一、在線算法
在計算機科學中,一個在線算法是指它可以以序列化的方式一個個的處理輸入,也就是說在開始時並不需要已經知道所有的輸入。相對的,對於一個離線算法,在開始時就需要知道問題的所有輸入數據,而且在解決一個問題后就要立即輸出結果。例如,選擇排序在排序前就需要知道所有待排序元素,然而插入排序就不必。
因為在線算法並不知道整個的輸入,所以它被迫做出的選擇最后可能會被證明不是最優的,對在線算法的研究主要集中在當前環境下怎么做出選擇。對相同問題的在線算法和
離線算法的對比分析形成了以上觀點。如果想從其他角度了解在線算法可以看一下 流算法(關注精確呈現過去的輸入所使用的內存的量),動態算法(關注維護一個在線輸入的結果所需要的
時間復雜度)和在線機器學習。
一個很好的展示在線算法概念的例子是加拿大旅行者問題,這個問題的目標是在一個有權圖中以最小的代價到達一個目標節點,但這個有權圖中有些邊是不可靠的,可能已經被剔除。然而一個旅行者只有到某個邊的一個端點時才能確定該邊是否已經被移除了。最壞情況下,該問題會變得簡單,即所有的不確定的邊都被移除該問題將會變成通常的
最短路徑問題。
二、離線算法
離線
算法設計策略都是基於在執行算法前輸入數據已知的基本假設,也就是說,對於一個離線算法,在開始時就需要知道問題的所有輸入數據,而且在解決一個問題后就要立即輸出結果,通常將這類具有問題完全信息前提下設計出的算法成為離線算法。