JavaScript >> Javascript 文檔 >  >> JavaScript

JavaScript 中的線性搜索

簡介

在計算機科學的上下文中,搜索是在給定列表/數組中定位特定元素的過程。如果我們密切關注,我們可以找到無處不在的搜索算法。

考慮登錄網站的過程。根據數據庫中現有的鍵值對搜索輸入的電子郵件和密碼以驗證用戶。

在本文中,讓我們看一下搜索給定元素列表的最基本算法 - 線性搜索 .

理解線性搜索

線性搜索算法是一組指令,用於遍歷給定列表並檢查列表中的每個元素,直到找到我們正在尋找的任何元素。我們正在尋找的元素的技術術語是 - key .

該算法從最左邊(或起始)元素開始繼續搜索,直到找到所需元素或遍歷列表中的所有元素。

如果找到元素,我們將返回位置(或 index ) 的元素。如果我們要查找的元素在列表中不存在,我們一般返回-1 .

JavaScript 中線性搜索的實現

我們可以使用 for 遍歷給定的列表 環形。再來看看Linear Search的實現:

function linearSearch(arr, key){
    for(let i = 0; i < arr.length; i++){
        if(arr[i] === key){
            return i
        }
    }
    return -1
}

在這裡,我們將遍歷數組中的所有元素,並將每個元素與鍵進行比較。如果找到匹配項,則返回元素的索引。在我們的例子中,變量 i 跟踪我們在數組中的位置,如果找到匹配項,則返回 i 的當前值 .

如果該元素在我們的列表中不存在,linearSearch 函數不會返回任何 i 循環中的值。我們只是return -1 在循環之後顯示該函數沒有找到所需的元素。

全局線性搜索

在前面的實現中,我們在遇到我們要查找的元素的第一次出現後返回一個值 (key )。但是如果我們想要給定元素的所有出現的索引呢?

這就是全局線性搜索的用武之地。它是線性搜索的一種變體,我們正在尋找給定元素的多次出現。

下面看一下全局線性搜索的實現:

function globalLinearSearch(arr, key){
    let results = []
    for(let i = 0; i < arr.length; i++){
        if(arr[i] === key){
            results.push(i)
        }
    }
    // If results array is empty, return -1
    if(!results){
        return -1
    }

    return results
}

在這種情況下,我們不是立即返回匹配元素的索引,而是將其存儲在一個數組中。最後,我們返回了索引數組。

線性搜索的效率

線性搜索是 brute-force 的經典示例 算法。這意味著該算法不使用任何邏輯來嘗試快速完成它應該做的事情,或者以某種方式減少它搜索 key 的元素範圍 .其他搜索算法旨在通過對列表/數組進行某種預處理來更有效地做到這一點,例如對其進行排序。

線性搜索的時間複雜度是O(n) , 其中 n 是我們正在搜索的列表中的元素數。這是因為我們在計算時間複雜度時總是考慮最壞的情況。在線性搜索(與大多數搜索算法一樣)的情況下,最壞的情況發生在元素不存在於列表中時。在這種情況下,我們需要遍歷所有 n 元素來確定該元素不存在。

結論

在本文中,我們看到了線性搜索背後的邏輯,然後利用這些知識,我們在 JavaScript 中實現了算法。我們還研究了線性搜索算法的時間複雜度。

到目前為止,它是 simples 搜索算法,它不使用任何邏輯來嘗試丟棄特定範圍進行搜索或專注於速度。


Tutorial JavaScript 教程
  1. 從對象 javascript/typescript 數組更改屬性名稱

  2. 100 天的反應

  3. 如何製作 DevTools 擴展

  4. React 與普通 JS

  5. JavaScript charCodeAt 方法 |獲取 char 的 Unicode 值

  6. 你應該知道的關於 Javascript 函數的一切

  7. 重複的參數名稱

  1. 你不需要 React 來使用 JSX

  2. 為什麼 2+2 在 JavaScript 中等於 22(以及其他導致錯誤的陷阱)

  3. Object.keys() 與 Object.getOwnPropertyNames()

  4. Express MySQL:使用 Express.js 和 MySQL 構建簡單的 REST API

  5. React 面試問題(中高級)

  6. 來自街區的道場

  7. 使用 JavaScript 在元素退出和進入屏幕時對其進行動畫處理

  1. 我是如何開始我的 Web 開發之旅的

  2. 我從建立我的第一個站點中學到的 4 件事

  3. 3個你應該在你的投資組合中的項目

  4. 一個使用 node.js 的簡單多人在線遊戲——第四部分