」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 搜尋演算法

搜尋演算法

發佈於2024-07-31
瀏覽:111

Search Algorithms

了解 PHP 中的二分查找

二分搜尋是一種在排序數組中尋找元素的更有效的演算法。它的工作原理是反覆將搜尋間隔分成兩半。以下是您的二元搜尋函數的詳細分類:

function binarySearch(array $arr, float|int $x)
{
    $low = 0;
    $high = count($arr)-1;
    // $midIndex = (int) ($low   ($high - $low)/2);
    $i = 0;
    while($low  $arr[$midIndex]){
            $low = $midIndex  1;
            echo $low."\n";
        }else{
            $high = $midIndex - 1;
        }
    }

return "The number {$x} was not found in the array";


}

echo binarySearch([1,2,3,4,5,6,7,8,9,10,44,45,46,47,48,49,50], 45)

函數binarySearch接受兩個參數:

  1. $arr:已排序的整數陣列。
  2. $x:要找的數字,可以是浮點數,也可以是整數。
  3. $low 被初始化為數組的第一個索引。
  4. $high 被初始化為陣列的最後一個索引。
  5. $i 是一個追蹤迭代次數的計數器。
  6. 只要搜尋間隔有效($low 小於或等於 $high),while 迴圈就會運作。
  7. $midIndex 計算為目前區間的中間索引。
  8. 如果中間元素等於$x,函數會傳回索引和迭代次數。
  9. 如果$x大於中間元素,則將$low調整為midIndex 1(將搜尋範圍縮小到上半部)。
  10. 如果$x小於中間元素,則將$high調整為midIndex - 1(將搜尋範圍縮小到下半部)。

了解 PHP 中的線性搜索

線性搜尋是用於尋找陣列中特定元素的最簡單的搜尋演算法之一。讓我們分解一下 PHP 中的 LinearSearch 函數。

function linearSearch(array $arr, float|int $x)
{
    for($i=0; $i 



線性搜尋函數接受兩個參數:

  1. $arr:整數陣列。
  2. $x:要找的數字,可以是浮點數,也可以是整數。
  3. for 迴圈迭代數組的每個元素。 count($arr) 函數傳回數組中的元素數量。
  4. 在迴圈內,程式碼檢查目前元素 ($arr[$i]) 是否等於 $x。如果找到匹配項,它將傳回一則訊息,指示找到該號碼的索引。
  5. 如果循環完成後沒有找到該數字,則函數將傳回一則訊息,指示在陣列中找不到該數字。
  6. 線性搜尋簡單且易於實現。它順序檢查數組的每個元素,直到找到所需的元素或到達數組末尾。這種方法很簡單,但對於大型陣列來說效率較低,因為它的時間複雜度為 O(n)。
版本聲明 本文轉載於:https://dev.to/ayowandeapp/search-algorithms-2613?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • **在 Go 中使用泛型進行切片初始化時如何保留介面-實作者關係?
    **在 Go 中使用泛型進行切片初始化時如何保留介面-實作者關係?
    Golang 泛型中的介面/實作同時性考慮建立一個泛型函數以初始化值填滿切片的任務。雖然這看起來很簡單,但當嘗試利用介面切片並在函數中指定具體類型時,就會出現挑戰。 在 Go 1.18 中,將 X 和 Y 限制為通用函數 Fill 中的任何類型會導致損失介面與其實作者之間的任何關係。這可以防止在函數...
    程式設計 發佈於2024-11-05
  • 如何處理 Pandas 中的“ValueError:無法從重複軸重新索引”錯誤
    如何處理 Pandas 中的“ValueError:無法從重複軸重新索引”錯誤
    理解錯誤:「ValueError:無法從重複軸重新索引」在pandas 中,「ValueError:無法從重複軸重新索引”當嘗試沿著包含重複值的軸重新索引或分配資料時,會遇到“axis”。當將資料連接或指派到具有重複索引值的列/行時,會發生此問題。 將概念應用於範例在提供的範例中,使用者正在嘗試將索...
    程式設計 發佈於2024-11-05
  • 如何在單擊按鈕時列印特定的 HTML 內容而不列印整個頁面?
    如何在單擊按鈕時列印特定的 HTML 內容而不列印整個頁面?
    在按鈕點擊時列印特定的HTML 內容而不包括完整網頁在使用者點擊按鈕時僅列印特定的HTML內容可以透過多種方式實現方式。一種方法是建立一個隱藏的 div 元素來保存所需的 HTML。為了列印目的,該 div 的顯示屬性應設定為“print”,而為了螢幕顯示,其顯示值應保持“none”。頁面上的其他元...
    程式設計 發佈於2024-11-05
  • 尋找經濟實惠的同日格蘭尼公寓(附 Pillar Build Granny Flats)
    尋找經濟實惠的同日格蘭尼公寓(附 Pillar Build Granny Flats)
    在 Pillar Build Granny Flats,我們為您提供祖母屋解決方案的精英服務,滿足您的獨特需求。無論是房主、承包商還是投資者,我們都可以幫助您在當天購買後院公寓,效果非常好,為您節省寶貴的時間,而且不用說,預算也很實惠。我們的祖母房建造者將在每一步工作,以確保您的專案以最精確和細心的...
    程式設計 發佈於2024-11-05
  • 如何使用 botoith Google Colab 和 AWS 集成
    如何使用 botoith Google Colab 和 AWS 集成
    您有沒有想過,在實施AWS Lambda時,想要一一確認程式碼的運作情況? 您可能認為在 AWS 控制台上實施很痛苦,因為您必須執行 Lambda 函數並且每次都會產生成本。 因此,我將向您展示您的擔憂的解決方案。 它是透過 Google Colab 和 AWS 整合實現的。 步驟如下: ...
    程式設計 發佈於2024-11-05
  • (高效能 Web 應用程式的要求
    (高效能 Web 應用程式的要求
    “高性能网络应用程序”或“前端”到底是什么? 自从 Internet Explorer 时代衰落以来,JavaScript 生态系统变得越来越强大,“前端”一词已成为高性能、现代 Web 客户端的代名词。这个“前端”世界的核心是 React。事实上,在前端开发中不使用 React 常常会让一个人看...
    程式設計 發佈於2024-11-05
  • 如何將單一輸入欄位設定為分區輸入?
    如何將單一輸入欄位設定為分區輸入?
    將輸入欄位設為分區輸入有多種方法可用於建立一系列分區輸入欄位。一種方法利用「字母間距」來分隔單一輸入欄位內的字元。此外,「background-image」和「border-bottom」樣式可以進一步增強多個輸入欄位的錯覺。 CSS Snippet以下 CSS 程式碼示範如何建立所需的效果:#pa...
    程式設計 發佈於2024-11-05
  • 用 Go 建構一個簡單的負載平衡器
    用 Go 建構一個簡單的負載平衡器
    负载均衡器在现代软件开发中至关重要。如果您曾经想知道如何在多个服务器之间分配请求,或者为什么某些网站即使在流量大的情况下也感觉更快,答案通常在于高效的负载平衡。 在这篇文章中,我们将使用 Go 中的循环算法构建一个简单的应用程序负载均衡器。这篇文章的目的是逐步了解负载均衡器的工作原理。 ...
    程式設計 發佈於2024-11-05
  • 如何以超連結方式開啟本機目錄?
    如何以超連結方式開啟本機目錄?
    透過超連結導航本地目錄嘗試在連結互動時啟動本地目錄視圖時,您可能會遇到限制。然而,有一個解決方案可以解決這個問題,並且可以在各種瀏覽器之間無縫運作。 實作方法因為從HTML 頁面直接開啟路徑或啟動瀏覽器是由於安全原因受到限制,更可行的方法是提供可下載的連結( .URL 或.LNK)。 建議路徑:.U...
    程式設計 發佈於2024-11-05
  • 為什麼 Makefile 會拋出 Go 指令的權限被拒絕錯誤?
    為什麼 Makefile 會拋出 Go 指令的權限被拒絕錯誤?
    在執行Go 時Makefile 中出現權限被拒絕錯誤透過Makefile 執行Go 指令時可能會遇到「權限被拒絕」錯誤,即使你可以直接執行它們。這種差異是由於 GNU make 中的問題引起的。 原因:當您的 PATH 上有一個目錄包含名為“go.gnu”的子目錄時,就會出現此錯誤。 ”例如,如果您...
    程式設計 發佈於2024-11-05
  • parseInt 函數中 Radix 參數的意義是什麼?
    parseInt 函數中 Radix 參數的意義是什麼?
    parseInt 函數中 Radix 的作用parseInt 函數將字串轉換為整數。然而,它並不總是採用以 10 為基數的數字系統。若要指定所需的基數,請使用基數參數。 理解基數基數是指單一數字表示的值的數量。例如,十六進制的基數為 16,八進制的基數為 8,二進制的基數為 2。 為什麼要用基數? ...
    程式設計 發佈於2024-11-05
  • 如何使用 JavaScript 將連結保留在同一選項卡中?
    如何使用 JavaScript 將連結保留在同一選項卡中?
    在同一分頁和視窗中導覽連結您可能會遇到想要在同一視窗和分頁中開啟連結的情況作為當前頁面。但是,使用 window.open 函數通常會導致在新分頁中開啟連結。為了解決這個問題,您可以使用name 屬性,如下所示:window.open("https://www.youraddress.co...
    程式設計 發佈於2024-11-05
  • 如何解決Python中的循環依賴?
    如何解決Python中的循環依賴?
    Python 中的循環依賴使用 Python 模組時遇到循環依賴可能是一個令人沮喪的問題。在這個特定場景中,我們有兩個文件,node.py 和 path.py,分別包含 Node 和 Path 類別。 最初,path.py 使用 from node.py import * 導入 node.py。但是...
    程式設計 發佈於2024-11-05
  • MariaDB 與 MySQL:開發人員需要了解什麼
    MariaDB 與 MySQL:開發人員需要了解什麼
    MariaDB 和 MySQL 是著名的開源 RDBMS,但儘管它們有著共同的歷史,但它們在功能和效能方面卻有所不同。本文快速強調了主要差異,幫助開發人員決定哪個資料庫最適合他們的需求。 差異和範例 儲存引擎,MariaDB 對 Aria 和 MyRocks 等引擎的擴充支援提供了...
    程式設計 發佈於2024-11-05
  • 為什麼我的 Goroutine 遞增變數會產生意外的結果?
    為什麼我的 Goroutine 遞增變數會產生意外的結果?
    這是編譯器最佳化的結果嗎? 在此程式碼片段中,啟動了一個 goroutine 並重複遞增變數 i:package main import "time" func main() { i := 1 go func() { for { ...
    程式設計 發佈於2024-11-05

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3