在高斯想出1+...+100那個演算法之前,他老師是一遍遍迴圈把1到100的和計算出來的。以下是比較的普通演算法與高斯演算法的不同,其中gettime()是獲取當前的毫秒數。
#include#include#include "mytime.h"
long normal(int max); //普通演算法 從1加到100
long gaosi(int max); //高斯演算法 從1加到100
int main(void)
long normal(int max)
printf("normal --> %.0f\n",sum);
long s2 = gettime();
return s2 - s1;
}long gaosi(int max)
對於兩個演算法,在測試時為了避免數值過大溢位,使用了double計算和,而在高斯演算法中,為避免(1+max)*max/2時會首先過大,所以先計算的/2再*max
演算法分析:
演算法的核心在於普通的迴圈加和與高斯的運算公式,前者的計算次數會隨著max的變化而線性變化,而後者不會,因此前者的時間複雜度為o(n),而後者是o(1)
實際測試:
[yanhua@localhost chap02]$ gcc gaosi.c mytime.c -o a.out
[yanhua@localhost chap02]$ ./a.out
輸入從1加到多少:10000
normal --> 50005000
total:0ms
gaosi --> 50005000
total:0ms
[yanhua@localhost chap02]$ ./a.out
輸入從1加到多少:100000
normal --> 5000050000
total:0ms
gaosi --> 5000050000
total:0ms
[yanhua@localhost chap02]$ ./a.out
輸入從1加到多少:1000000
normal --> 500000500000
total:5ms
gaosi --> 500000500000
total:0ms
[yanhua@localhost chap02]$ ./a.out
輸入從1加到多少:10000000
normal --> 50000005000000
total:39ms
gaosi --> 50000005000000
total:0ms
由執行結果看,引數越大,越能看出高斯演算法的優勢。 資料結構與演算法 演算法 演算法和資料結構
資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...
資料結構與演算法之高階排序 希爾 堆 《十一》
基礎排序 資料結構與演算法之基礎排序 冒泡 插入 選擇 十 希爾排序 希爾排序又稱為縮小增量排序。該演算法是乙個泛化的插入排序,插入排序在序列幾乎有序的情況下非常有效。希爾排序利用此特性,分多路並使用不同的間距進行插入排序,當間距為1是則就是簡單的插入排序,本質上希爾排序是插入排序的簡單拓展 優點 ...
資料結構與演算法
資料結構的三個方面 1.資料的邏輯結構 包括 1 線性結構 線性表 棧 佇列。2 非線性結構 樹形結構 圖形結構。2.資料的儲存結構 順序儲存 鏈式儲存。3.資料的運算 檢索 排序 插入 刪除 修改等。二 棧 stack 1 通常稱插入刪除的這一端為棧頂,另一端為棧底。2 棧是限制僅在表的一端進行插...