資料結構與演算法之 高斯演算法

2021-06-20 09:52:58 字數 1380 閱讀 4381

在高斯想出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 棧是限制僅在表的一端進行插...