線性搜尋,又稱為循序搜尋(sequential search),是一個在序列中找尋目標的方法。正如字面上的意義,線性搜尋會按照順序疊代序列,挨家挨戶比對每個元素與目標值是否相等,若相等則停止疊代,並回傳搜尋所得結果。
線性搜尋乍看之下,是最簡單實作也最 naïve 的實作,效能應該不怎麼好。事實上,在資料量不多時(少於 100 個元素),線性搜尋的效能也不會太差,因為其他搜尋演算法可能需要建立特殊資料結構,就會導致時空間初始開銷暴增,複雜度的常數項成本變大。
Complexity | |
---|---|
Worst | |
Best | |
Average | |
Worst space |
若序列中總共有
線性搜尋就是用一個 for-loop 解決。要注意的是,T
泛型參數至少要實作 PartialEq
才能比較。程式碼中使用了疊代器的 enumerate,建立一個新疊代器,每次疊代產生疊代次數與對應的值。
pub fn linear_search<T>(arr: &[T], target: &T) -> Option<usize>
where T: PartialEq
{
for (index, item) in arr.iter().enumerate() {
if item == target {
return Some(index);
}
}
None
}
事實上,若利用 Rust 內建的 iterator.position
,程式碼也許會更簡潔。
pub fn linear_search<T>(arr: &[T], obj: &T) -> Option<usize>
where T: PartialEq
{
arr.iter().position(|x| x == obj)
}