《演算法導論》習題2 1 3

2021-07-29 15:37:38 字數 747 閱讀 7434

考慮以下查詢問題:

輸入:n個數的乙個序列a=

和乙個值

v 。

輸出:下標i使得

v=a[

i]或者當

v 不在

a中時,

v 為特殊值nil。

寫出線性查詢的偽**,它掃瞄整個序列來查詢

v。使用乙個迴圈不變式來證明你的演算法是正確的。確保迴圈不變式滿足三條必要的性質。

偽**:

find-key(a, v)

fori = 1 to a.

length

if a[i] == v

return

ireturn nil

迴圈不變式:對於每次迴圈迭代,子陣列(已遍歷的元素)中沒有與v相等的值。

初始化:第一次迴圈之前,i = 1,子陣列沒有元素,其中肯定沒有與v相等的值,迴圈不變式成立。

保持:每次迭代都將比較a[i]與v的值,如果相等,迴圈終止;如果不等,a[1…i]中沒有與v相等的值,迴圈不變式保持。

終止:當i > a.length 時或者a[i] == v 時迴圈終止。顯然對於子陣列即下標小於i的所有元素均沒有與v相等的值,演算法正確。

《演算法導論》課後習題 2 1 3

consider thesearching problem input a sequence of n numbers a and a value v.output an index i such that a i v or the special value nil if v does not w...

演算法導論 習題 5 4 1

題 乙個房間裡必須要有多少人,才能讓某人和你生日相同的概率至少為1 2?必須要有多少人,才能讓至少兩個人生日為7月4日的概率大於1 2?解 1.假設一年有n 365 天,房間裡面有x人 不算自己 為求某人與自己生日相同,可求其反面,即房間裡面沒人跟自己生日相同,他們每個人生日可以在n天中選擇除去我生...

演算法導論 習題 6 5 8

題 請給出乙個時間為o nlgk 用來將k個已排序鍊錶合併為乙個排序鍊錶的演算法。此處n為所有輸入鍊錶中元素的總數。k個已排序鍊錶,假設每乙個鍊錶的第乙個元素為root i i 1,2,3.k 那麼可以為這k個元素root i 構造乙個最小堆heap min,其時間複雜度為o lgk 此時堆頂元素假...