演算法思想
假定資料已被排序,查詢其中是否存在某個元素
演算法實現
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的優點包括 可以實現二元查詢...