陣列排序的最少時間複雜度o nlog2n 怎麼計算的

時間 2021-12-20 16:29:56

1樓:匿名使用者

for(int j=1; j<=n; j*=2)這個迴圈最終執行的次數假設為x,則x次的時候j=2^x 。

當j>n時停止執行,於是2^x>n ,則可以認為該迴圈一共執行了log2(n)次。

所以該迴圈的時間複雜度為o(log2(n)),簡記為o(log n) ,忽略掉2的底數。

方法:1、首先,看外迴圈for(i=0;i2、再看內部迴圈,for(j=1;jn===》x=log2(n)。

3、如果把兩個迴圈合在一起看,也就是一共迴圈了n個x次,也就是log2(n)。

2樓:匿名使用者

這個是基於關鍵字比較在最壞情況下的最好時間複雜度,計算過程:

因為一次比較可以區分資料的兩個狀態,n個資料的初始排列可能為n!,用完全二叉樹來看,n!個葉子的高度為o(log2(n!))~o(nlog2n)

3樓:wx越前龍馬

o(log2(n!))~o(nlog2n)並不相似吧,他兩的階數不同,右側等同於o(log2(n∧n)),冪指不等同於階乘吧!

快速排序,希爾排序和堆排序的平均時間複雜度都是o(nlog2n),為什麼說快速排序是最快的?

4樓:匿名使用者

快速排序是用遞迴的思想,用棧來儲存資料,它第n趟最多要確定2^n個數的最終位置。它使用的空間是最多的,用空間換取了時間。例如:

5樓:匿名使用者

快排只是內排序演算法啊,而且在內排序中也並不是最快的,只是快排在大多數情況下效果很好,因為一般的無序元素不會是完全或者近似倒序的。

6樓:下個倒角

每種排序都有它的優勢。

11、在基於排序碼比較的排序演算法中,( )演算法的最壞情況下的時間複雜度不高於o(nlog2n)。 a. 起泡排序 b.

7樓:謝浩

排序抄方法 最壞時間複雜度

bai 最好時間複雜du度 平均時間複雜度zhi

直接插入 o(n2) o(n) o(n2)

簡單選擇 o(n2) o(n2) o(n2)

起泡排序dao o(n2) o(n) o(n2)

快速排序 o(n2) o(nlog2n) o(nlog2n)

堆排序 o(nlog2n) o(nlog2n) o(nlog2n)

歸併排序 o(nlog2n) o(nlog2n) o(nlog2n)

設序列長度為n,在最壞的情況下,時間複雜度為o(log2n)的演算法是什麼

8樓:匿名使用者

二分法二分法的基本思想如下:

假設資料是按公升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功;若x小於當前位置值,則在數列的前半段中查詢;若x大於當前位置值則在數列的後半段中繼續查詢,直到找到為止。

由於是陣列是預先排序好的,所以可以採用折半查詢的方式,每次拋掉待查詢部分的一半

這樣,長度為n的陣列,只需要log2n次查詢即可,2是對數的底。

例如,長度為7的陣列,最多隻需要3次就可以找到o(log2n)只是表示是log2n同一數量級,因為有個取整的問題,而且也有可能在查詢過程中就已經找到(也就是某個折半查詢點正好是待查詢資料),這樣o(log2n)就是乙個上限

c 語言快速排序最好情況時間複雜度為什麼是 nlog2n ?(菜鳥**)

9樓:匿名使用者

快速排序最好的情況是每次把上一次的陣列平均分成兩個子陣列。設陣列總數一共為n,如果把這n個數每次分成2半最後每個陣列只包含乙個元素,假設要分k次,則2的k次方=n,解得k=log2 n(log以2為底對n取對數).也就是說要分log2 n次,而每次都是處理n個資料。

所以總的時間複雜度為o(n*log2 n)。

10樓:匿名使用者

第一趟要遍歷整個陣列複雜度為n很好理解,接下來的log2n實際上和二分法查詢規律差不多,每次的規模減半,設計算次數為x,則n = 2^x,所以x = log2n。

電腦程式設計中快速排序的時間複雜度n log n 是n*log(n)還是什麼

11樓:匿名使用者

問題中兩者選擇的答案是相同的,且是正確的,n log n 即等於n*log(n),其中*代表乘,預設底數為

2.快速排序的複雜度為log以2為底,n^2的對數,也就是o(n^2),如排序10個數,最壞的情況就是o(10^2)=o(100)≈33

12樓:

快速排序的平均複雜度是在n*log2(n)也就是nlog(n),在資訊學中nlog(n)的底數預設為2。至於說快速排序10個數的時間複雜度,是沒辦法計算的,這個還是和這10個數的初始順序有關。只能說排序10個數的平均複雜度在10*log2(10),如果這個10個序列差勁,複雜度也有可能是o(10^2)。

(快速排序的最壞情況下的時間複雜度是o(n^2))

13樓:匿名使用者

複雜度的表示式裡面只看冪級不看具體底數,log n跟log2n是一回事,感覺你有些概念不清的樣子,時間複雜度的n就表示演算法處理的數字個數,快速排序的時間複雜度就是n log n,快速排序10個數的時間複雜度也還是n log n,你可以說n=10,但是時間複雜度的表示式裡面要求把具體的輸入個數用n表示,因為這樣才能反映出演算法在輸入個數增加的時候執行時間相應增加的程度,也就是「時間複雜度」這個概念本身想說明的問題。

14樓:謙謙知臨

資料結構中logn一般表示2為底數,如果不是的話,才會明確標明。

誰能給乙個時間複雜度是o(log2n)的演算法,謝謝。

15樓:匿名使用者

(1)時間頻度

乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。

乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。

(2)時間複雜度

在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

在各種不同演算法中,若演算法中語句執行次數為乙個常數,則時間複雜度為o(1),另外,在時間頻度不相同時,時間複雜度有可能相同,如t(n)=n2+3n+4與t(n)=4n2+2n+1它們的頻度不同,但時間複雜度相同,都為o(n2)。

按數量級遞增排列,常見的時間複雜度有:

常數階o(1),對數階o(log(2)n),線性階o(n),

線性對數階o(nlog(2)n),平方階o(n^2),立方階o(n^3),...,

k次方階o(n^k),指數階o(2^n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

16樓:匿名使用者

log2n和logn一樣 常數2可以忽略 有序數列二分查詢某值的演算法就是logn的

17樓:匿名使用者

我沒聽說過。不過我有md5的演算法,c++的,要可以給你

對於輸入為n個數進行快速排序演算法的平均時間複雜度是 o(nlog2n) 請講的通俗易懂些 捷徑

18樓:百度使用者

這不是平均吧,是最優吧。

先要知道大寫o和小寫o,極限什麼的。

時間複雜度o(n^2)=n(n-1)/2,那麼o(nlog2(n)=多少??

19樓:烏石

你問的這個問題,本身就有問題,

時間複雜度o(n^2)=n(n-1)/2

應是o(n(n-1)/2)=o(n^2)

o(nlog2(n))=?這個問法不合理,可以寫出無窮多個,比如o(nlog2(n))=o((n-1)log2(n))=o(nlog2(n)+n+c)

時間複雜度的計算。時間複雜度怎麼計算?

1.時間複雜度o n 2 2.時間複雜度o n 2 3.時間複雜度o n 2 4.時間複雜度o n 5.時間複雜度o n 3 一般來說,時間複雜度是總運算次數表示式中受n的變化影響最大的那一項 不含係數 比如 一般總運算次數表示式類似於這樣 a 2 n b n 3 c n 2 d n lg n e ...

希爾排序時間複雜度O n 中的1 3是怎麼來的

設計複雜 1 首先希爾排序是一種遞減增量的排序演算法,下面使用大小為9的陣列 54 26 93 17 31 44 55 20。2 令資料間隔為3,將該陣列分成三個子陣列,如下圖所示,為下圖中灰色的部分。3 對每乙個子陣列都進行插入排序操作,將排序好的子陣列合併到乙個陣列當中。這個時候,會發現,每個數...

時間複雜度相同的演算法一樣好嗎,氣泡排序演算法的時間複雜度是什麼

大二的猴 如果只分析你上面段程度,顯然方法二做了許多無用功,當然一好。時間複雜度估的是個時間隨規模n增長的趨勢,他倆的趨勢是一樣的。給定規模n,如果方法二能跑,那方法一肯定能跑,只不過比前者多常數倍時間而已,你跑1秒,我不過跑2秒而已,你跑一天,我跑倆天而已,你要跑一年以上,那勸你還是找個更快的演算...