相親交友原始碼開發,演算法的定義及複雜度分析
演算法的評估
斐波那契數引入複雜度分析
/** * 求第n個斐波那契數 * 斐波那契數列:這個數列從第3項開始,每一項都等於前兩項之和。 * 下標 0 1 2 3 4 5 6 7 * 數列 0 1 1 2 3 5 8 13 *///遞迴的方式:function fun1(n) { if (n <= 1) return n; return fun1(n - 1) + fun1(n - 2)}// 迴圈function fun2(n) { if (n <= 1) return n; let first = 0; let second = 1; for (let i = 0; i < n - 1; i++) { let sum = first + second; first = second; second = sum } return second}
function check(title, task, num) { console.log(title); let start = new Date().getTime() console.log('開始時間', start); task(num) let end = new Date().getTime() console.log('結束時間', end); console.log('耗時', (end - start) / 1000);}check('遞迴', fun1, 45)check('迭代', fun2, 1111111145)遞迴 開始時間 1637648114480結束時間 1637648126090耗時 11.61迭代 開始時間 1637648126091結束時間 1637648130718耗時 4.627
推導大O階方法
function cal01(age) { // 1 * unit-time if (age > 58) { console.log(1); } else if (age > 28) { console.log(2); } else { console.log(3); }}function cal02(n) { // (3+3n)*unit-time let sum = 0; // 執行一次 let i = 1; // 執行一次 // n次 n次 for (; i <= n; ++i) { sum += i // 執行n次 } return sum // 執行一次}function cal03(n) { // (1+3n)*unit-time // 一次 n次 n次 for (let i = 0; i < n.length; i++) { console.log(n[i]); // n次 }}function cal04(n) { // 1+2n+n(1+3n) = (3n^2+3n+1)*unit-time for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { console.log('666'); } }}function cal05(n) { // 1+2n+n*(1+3*20) = (1+63n)*unit-time for (let i = 0; i < n; i++) { for (let j = 0; j < 20; j++) { console.log('666'); } }}function cal06(n) { // (1+log(2)n)*unit-time let i = 1; // 一次 while (i < n) { i + i * 2 // 2*x = n x = log(2)n }}function cal07(n) { // i+=i 表示i=i+i=>i=2i,每次都乘以二,執行log2(n)次 // 所以外層迴圈執行1+2*log2(n)次,內層執行log2(n)*(1+3n)次 // (1+(3+2n)log2(n))*unit-time for (let i = 0; i < n; i += i) { for (j = 0; j < n; j++) { console.log('666'); } }}
常見的時間複雜度量級
int i = 1;int j = 2;++i;j++;int m = i + j;
for(int i=1;i<=n;i++){ console.log(i)}
for(int i=1;i<=n;i++){ console.log(i)}for(int i=1;i<=n;i++){ console.log(i)}
let i = 1;while(i<n){ i = i * 2;}
for(i=1; i<=n; i++){ for(j=1; j<=n; j++){ j = i; j++; }}
for(i=1; i<=m; i++){ for(j=1; j<=n; j++){ j = i; j++; }}
for(i=0; i<n; i++){ for(j=i; j<n; i++){ console.log(1) }}
for(m=1; m<n; m++){ i = 1; while(i<n){ i = i * 2; }}
分析斐波那契數的時間複雜度
//時間複雜度:其實就是看fun1方法被呼叫了多少次,呼叫了多少次就是執行了多少次,如果傳入的是5呼叫fun1(4)和fun1(3)依次推導共呼叫O(2^n)function fun1(n){ if(n<=1) return n; return fun1(n-1)+fun1(n-2);}//時間複雜度:O(n)function fun2(int n){ if(n<=1) return n; let first=0; let second=1; for (let i = 0; i <n-1 ; i++) { //每次加都是前兩個 let sum=first+second; first=second; second=sum; } return second;}
Leetcode(斐波那契數)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2844153/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 相親交友原始碼開發中,Redis的三種限流方式原始碼Redis
- 相親交友原始碼開發,前端如何實現水印功能?原始碼前端
- 相親交友原始碼開發,前端API如何請求快取?原始碼前端API快取
- 複雜度分析的套路及常見的複雜度複雜度
- 相親交友原始碼開發中會用到的幾種日期處理方法原始碼
- 演算法的複雜度分析演算法複雜度
- 演算法複雜度分析演算法複雜度
- 開發相親交友原始碼,需要熟練掌握的音視訊基礎知識原始碼
- 相親交友原始碼實現相親直播間,移動終端的優化方案原始碼優化
- 演算法複雜度分析(下)演算法複雜度
- 演算法複雜度分析(上)演算法複雜度
- 相親交友原始碼中,音訊AAC解碼的實現程式碼原始碼音訊
- 相親交友原始碼中的事件循壞,你瞭解多少?原始碼事件
- 影片相親交友系統開發,引領婚戀交友新玩法
- 相親交友原始碼實現程式內快取,提升高併發能力!原始碼快取
- 相親交友原始碼前端效能優化,通常使用哪些手段?原始碼前端優化
- 淺析程式碼圈複雜度及認知複雜度複雜度
- 演算法分析__時間複雜度演算法時間複雜度
- JavaScript 演算法之複雜度分析JavaScript演算法複雜度
- 相親交友原始碼的架構設計,實現合成複用原則需要如何做?原始碼架構
- 相親交友原始碼開發,關於分散式快取應該瞭解的一些事原始碼分散式快取
- 複雜度分析複雜度
- 相親交友 系統開發找哪家好?交友軟體的發展潛力如何?
- 如何進行演算法的複雜度分析?演算法複雜度
- 演算法分析__迴圈操作的複雜度演算法複雜度
- 用程式碼複雜度分析風險複雜度
- 常見排序演算法及複雜度排序演算法複雜度
- 衡量演算法的效能-時空複雜度分析演算法複雜度
- 【基礎】演算法的時間複雜度分析演算法時間複雜度
- 密碼複雜度設定函式密碼複雜度函式
- 如何實現相親交友原始碼的CPU效能優化?解決方案梳理原始碼優化
- 資料結構與演算法分析——開篇以及複雜度分析資料結構演算法複雜度
- 演算法--複雜度演算法複雜度
- 演算法複雜度演算法複雜度
- 演算法:複雜度演算法複雜度
- 相親交友原始碼第三方登入的實現及易擴充套件的達成原始碼套件
- 小前端學演算法之複雜度分析前端演算法複雜度
- 面試中的複雜度分析面試複雜度