資料結構與演算法分析 3 演算法執行時間中的對數

2021-09-11 08:03:45 字數 1173 閱讀 9499

演算法思想

假定資料已被排序,查詢其中是否存在某個元素

演算法實現

int binsearch(const vectora, int b)

else if(a[mid] > b)

else

}return -1;

}

二分搜尋複雜度分析從right - left = n - 1開始,每次折半,直到right - left >= -1為止,

演算法描述:求兩個數值的最大公約數

演算法實現:

int getmaxfactor(int a, int b)

cout << a << endl;

return a;

}

演算法分析:

(1) 對於兩個整數a和b,顯然兩個數的餘數必然小於這兩個數中最小的數

(2) 兩個數的餘數小於其中較大的數的一半,即

(3)演算法的最壞情形為輸入的兩個數字出自斐波那契數列,拉梅定理就給出了步數的計算公式。

由此,演算法的複雜度將介於log a 和log b之間

演算法描述

分四種情形考慮該問題,

情形一:所有數值的0次冪均為1;

情形二,所有數的一次冪等於他本身;

情形三,所有數的偶次冪等於其平方的折半次冪

情形四,所有數的奇次冪等於其平方的折半次冪再乘以他本身

**實現

int mypow(int a, int b)

else if(b == 1)

else if(b % 2 == 0)

else

}

演算法分析:每次遞迴呼叫,問題規模減小一半,所需次數最多為不可行的做法:將問題分解成n/2次遞迴呼叫子問題,演算法複雜度不再是logn級別

int mypow(int a, int b)

else if(b == 1)

else if(b % 2 == 0)

else

}

資料結構與演算法分析 二 演算法分析(執行時間計算)

大o執行時間是上界 for迴圈 for迴圈的執行時間是for迴圈內語句的執行時間乘以迭代次數 巢狀的for迴圈 從裡向外分析 順序語句 各個語句的執行時間求和 if else語句 if s1else s2不超過判斷 s1和s2執行時間長者的總的執行時間 情況一 實質上是for迴圈,所以為o n in...

資料結構中執行時間演算法

在比較演算法的效率時,往往是演算法的執行時間與資料項個數關係間比較,例如,為了得到某個結果,在同一資料量下,哪個演算法執行最快,效率最高,而後改變這一資料量,哪種演算法的時間又最快.大o表示法 在描述演算法執行時間時,往往能看到o n o logn 等,大o中的o的意思就是 order of 大約是...

Redis資料結構執行時間

注意謹慎使用的list命令如下 hash即雜湊表,redis的hash和傳統的雜湊表一樣,是一種field value型的資料結構,可以理解成將hashmap搬入redis。hash非常適合用於表現物件型別的資料,用hash中的field對應物件的field即可。hash的優點包括 可以實現二元查詢...