簡體   English   中英

數組中的數字是否小於給定數字?

[英]How many numbers in an array are smaller than a given number?

天真的是O(n)。 有一個是O(log n)還是O(1)?

排序數組怎么樣? 如何使用二叉搜索樹?

我的數組有一個大小n = [2 ^(h + 1)] - 1? // h =完整二叉樹的高度

未分類
如果數組沒有排序,那么你可以做到比O(n)更好。 證明:假設您沒有查看數組中的每個元素,那么攻擊者就可以使其中一個元素看起來不大於或小於給定數字,以使您的計數不正確。 所以,優於O(n)是不可能的。

排序
如果數組已排序,那么您可以通過查找大於或等於給定數字的第一個元素,然后從數組大小中減去該索引來確定O(log n)時間的結果。

如果沒有排序,你不能比O(n)做得更好。 最后。

通過排序,您可以在最壞的情況下使用二進制搜索來執行O(log(n))。 現在你可以改進這一點,假設陣列布局具有不錯的熵或者(大部分)是線性的,瞄准預期點,好像布局是純線性的。

例如,取一個帶有[0] = x,a [n] = y和閾值v的排序數組a。而不是將數組平分為n / 2,測試元素為[n *(vx) )/(yx)]使用常規布局(a [i] = const1 * i + const2)得到O(1)中的結果,一次擊中+ - 舍入誤差,所以最差2.使用“白噪聲”隨機布局(所有值同樣可能),你得到它仍然比O(log(n))快得多。

暫無
暫無

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

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