簡體   English   中英

搜索復雜度為O(log n)的算法,UNSORTED列表/數組

[英]Searching algorithm with complexity O(log n), UNSORTED list/array

我在考試中表示:

找到一種算法,該算法可以搜索未排序列表中的最大數字,並具有O(log(N))的Big-Oh復雜度。

我發現的唯一具有log n復雜性的搜索算法是二進制搜索算法,但是需要對我的列表/數組進行排序。

有這樣的算法嗎?

這是一個棘手的問題。 尚未說明該清單有N個要素。 因此,您可以使用變量更改,並將N替換為2 K. 現在,在具有K個元素的列表上使用線性算法解決問題。

如果我們假設列表中有N個元素,則可能的解決方案是使用N個並行計算元素[ CE 0 .. CE N ]。 在算法的基本情況下,我們讓[ CE N / 2 ... CE N ]中的每個計算元素CE i比較列表值x 2i-Nx 2i-N + 1 每個計算元件將它們的兩個指定值中較大的一個報告給CE i / 2 該算法的迭代步驟是接收兩個報告值的每個計算元件CE kCE k / 2報告最大值。 該迭代邏輯繼續,直到CE 0處理來自其自身的報告。 它不是再次向自己報告,而是輸出結果。

如果排除了並行計算,則問題無法解決。

不,沒有這樣的算法。 在未排序的列表中,找到需要瀏覽所有元素的最高數字。

所以,沒有比O(n)更好的算法!

最好的方法是在未排序的數組中進行O(n)時間。

但是,不是簡單地查看整個列表,而是可以應用partition()例程(來自quicksort算法),而不是在分區的下半部分遞歸,您可以在上半部分遞歸並繼續分區,直到找到最大的元素。 這需要O(n)時間。

查看詳細說明:

http://en.wikipedia.org/wiki/Quickselect

如何在O(n)中找到長度為n的未排序數組中的第k個最大元素?

希望它有所幫助! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM