[英]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-N和x 2i-N + 1 。 每個計算元件將它們的兩個指定值中較大的一個報告給CE i / 2 。 該算法的迭代步驟是接收兩個報告值的每個計算元件CE k向CE 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.