借鑑自生活中「較大」、「較小」、「偏快」、「偏慢」等粗略的度量概念,在電腦科學中有一種粗略的度量方法稱之為「大o」表示法
這是一種可以描述演算法的速度如何與資料項的個數相聯絡的比較。
無序陣列中新的資料項總是被放在下乙個有空的地方,無論資料項個數有多大,一次插入總是用相同的時間,這個時間可以表示為乙個常數,即用如下式子表示
t=k;(t用來表示時間,k用來表示常數)
其中k與以下因素有關:處理器效率、編譯程式生成程式**的效率等等;
線性查詢尋找特定資料項所需的比較次數平均為資料項總數的一半。用n表示資料項總數,搜尋時間t與n的一半成正比:
t=k*n/2
二分法對於有序陣列查詢,時間t與以2為底n的對數成正比
由於二分法的特性,s次查詢所能容納的最大資料量d=2^s;所以
t=k*log2
(n)
由於所有對數都與其他對數成比例,故此可以將底數也併入k中即
t=k*log(n)
大o表示法注重比較的是對應不同的n值,t是如何變化的,而不是具體的數字,所以將常數省略
大寫字母o可以理解為「order of」(大約是)
線性查詢:o(n)
二分查詢:o(logn)
有序陣列的插入:o(n)
無序陣列的插入:o(1)
有序陣列的刪除:o(n)
無序陣列的刪除:o(n)
通過比較不同的大o值,o(1)優秀,o(logn)良好,o(n)一般,o(n^2)欠缺。
資料結構與演算法2 時間複雜度和空間複雜度
演算法效率的度量方法 事後統計的方法 事前分析估算方法。演算法的時間複雜度 在進行演算法分析時,語句總的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度記作 t n o f n 它表示隨問題規模n的增大,演算法執行時間的增長率和f n ...
演算法學習(二)時間複雜度
1 什麼是大o o f n 表示執行演算法所需要執行的指令數,和f n 成正比 從圖中可以看出來n的差距是量級上的差距,可以看出來前面的常數可以忽略不計 不同複雜度的函式 在學術上來講o f n 表示演算法執行的上界 歸併排序複雜度是o nlogn 的,但同時也是o n 2 的,因為o表示時間的上界...
資料結構和演算法(二) 時間複雜度和空間複雜度
演算法效率的度量方法 事後統計方法 這種方法主要是通過設計好的測試程式和資料,利用計算機計時器對不同酸防編制的程式執行時間進行比較,從而確定演算法效率的高低。這種方法有很大的缺陷,必須依據演算法事先編制好測試程式,通常需要花費大量時間和精力,如果完了發覺測試的是糟糕的演算法,就會功虧一簣。不同測試環...