談談演算法複雜度與二分查詢

2021-08-29 04:05:24 字數 1399 閱讀 2046

程式設計對於工科學生的重要性不言而喻,如果你喜歡這篇文章,歡迎一起交流學習!歡迎交流:[email protected]

好一點的查詢是雜湊表查詢法,python裡面直接用字典實現了,先給二分的**:

def binary_search(list, item):

low = 0;

high = len(list) - 1;

while low <= high:

# in py3 integer's division need '//'

mid = ( low + high )//2;

guess = list[mid];

if guess == item:

return mid;

if guess < item:

low = mid + 1;

else:

high = mid - 1;

if low==high:

if list[low]==list[len(list)-1]:

print('the item is too large.');

else:

print('the item is too small.');

return none;

my_list = [1,2,3,4,5,6,7,8,9];

print(binary_search(my_list,3));

大o表示法是一種特殊的表示法, 指出了演算法的速度有多快。大o表示法指出了最糟情況下的執行時間。

假設你使用簡單查詢在**簿中找人。 你知道, 簡單查詢的執行時間為o (n ), 這意味著在最糟情況下, 必須檢視**簿中的每個條目。 如果要查詢的是adit——**簿中的第乙個人, 一次就能找到, 無需檢視每個條目。 考慮到一次就找到了adit, 請問這種演算法的執行時間是o (n )還是o (1)呢?

簡單查詢的執行時間總是為o (n )。 查詢adit時, 一次就找到了, 這是最佳的情形, 但大o表示法說的是最糟的情形。 因此, 你可以說, 在最糟情況下, 必須檢視**簿中的每個條目, 對應的執行時間為o (n )。 這是乙個保證——你知道簡單查詢的執行時間不可能超過o (n )。

o (log n ), 也叫對數時間 , 這樣的演算法包括二分查詢。

o (n ), 也叫線性時間 , 這樣的演算法包括簡單查詢。

o (n * log n ), 這樣的演算法包括第4章將介紹的快速排序——一種速度較快的排序演算法。

o (n^2 ), 這樣的演算法包括第2章將介紹的選擇排序——一種速度較慢的排序演算法。

o (n !), 這樣的演算法包括接下來將介紹的旅行商問題的解決方案——一種非常慢的演算法。

時間複雜度 二分查詢

不常見的時間複雜度 看看就好 如何一眼判斷時間複雜度?def hanoi n,a,b,c if n 0 hanoi n 1,a,c,b print s s a,c hanoi n 1,b,a,c hanoi 5,a b c h n 2h n 1 1 h 1 1遞迴面試題 斐波那契 斐波那契 數列 f...

01 複雜度3 二分查詢

position binarysearch list l,elementtype x 其中list結構定義如下 typedef int position typedef struct lnode list struct lnode l是使用者傳入的乙個線性表,其中elementtype元素可以通過 ...

01 複雜度3 二分查詢

本題要求實現二分查詢演算法。position binarysearch list l,elementtype x 其中list結構定義如下 typedef int position typedef struct lnode list struct lnode l是使用者傳入的乙個線性表,其中elem...