將m行n列的二維數(shù)組中的數(shù)據(jù) 找出N個(gè)數(shù)組中第二大的數(shù),需要比較多少次?
找出N個(gè)數(shù)組中第二大的數(shù),需要比較多少次?比較次數(shù)最少的理論從n個(gè)數(shù)中找出最大的兩個(gè)數(shù)是:n logn-2分析1:類(lèi)似于競(jìng)爭(zhēng)推廣,配對(duì)比較,勝者再次配對(duì),最后得到冠軍(最大數(shù)),這可以看作是一個(gè)二叉樹(shù)
找出N個(gè)數(shù)組中第二大的數(shù),需要比較多少次?
比較次數(shù)最少的理論從n個(gè)數(shù)中找出最大的兩個(gè)數(shù)是:n logn-2分析1:類(lèi)似于競(jìng)爭(zhēng)推廣,配對(duì)比較,勝者再次配對(duì),最后得到冠軍(最大數(shù)),這可以看作是一個(gè)二叉樹(shù)。以4個(gè)人為例:0020123,我們可以看到比較的最大次數(shù)是n-1。那么第二大的數(shù)字必須是與冠軍相比的數(shù)字,所以很明顯,每層有一個(gè),所以有l(wèi)ogn-1比較。所以總共是n logn-2比較。分析二:泡泡法找出最大比較數(shù)是n-1,然后在前面的每次比較結(jié)果中找出第二大數(shù),比較數(shù)是logn,需要減去最后一次比較的最大數(shù),即找到第二個(gè)數(shù)是logn-1,結(jié)果是n logn-2。
如何找到一個(gè)數(shù)組里面重復(fù)次數(shù)最多的數(shù)?
例如,B[i]=num,這意味著我出現(xiàn)num次。實(shí)現(xiàn)代碼也非常簡(jiǎn)單。//將數(shù)組B初始化為0For(I=0i<ni){B[a[I
}。您可以直接在數(shù)組B中找到最大值,即出現(xiàn)的次數(shù)。下表顯示了引用的值。
c語(yǔ)言數(shù)組折半查找題目:,有n個(gè)數(shù)按由大到小順序存放在一個(gè)數(shù)組中,再輸入一個(gè)數(shù)x。要求用折半查找法找出?
你好,我是黑手浩武大班店。我很高興為你回答。#這是包含<<;T<;T<;T<;T<;T<;T<;T>&(n/2)>K&(n/2)>K&(n/2)>K&(n/2)>K&(n/2)>K&(n/2)>K&(n/2)>K&(n/2)&T(int,int,int,K,K,int,int,int,n,int(n/2){(int&T(int*P(int,int,int,int,int,K,int,int,int,int,int,int,int,int,N/N/2{(T){[T&T&T>(T&T&T&T&T&T>(T&T>(T&T>&“”沒(méi)有這樣的數(shù)字N”T}}}T int main(){tint N,a[100],I,K,tprintf(”請(qǐng)輸入要查找的數(shù)字“)tscanf(%d”,&n)T for(I)=0I<ni)T,tscanf(%d”,&A[i])tprintf(%d”,&K)tscanf(%d”,&K)tfun(a,K,n)turn 0}更多專(zhuān)業(yè)科普知識(shí),請(qǐng)關(guān)注我。如果你喜歡我的回答,也請(qǐng)給我表?yè)P(yáng)或轉(zhuǎn)發(fā),你的鼓勵(lì)是支持我寫(xiě)下來(lái)的動(dòng)力,謝謝。
挑戰(zhàn)程序員同學(xué),如何只用2GB內(nèi)存從20/40/80億個(gè)整數(shù)中找到出現(xiàn)次數(shù)最多的數(shù)?
1、4字節(jié)表示的整數(shù)數(shù)為2^32≈40億,2字節(jié)表示的無(wú)符號(hào)整數(shù)數(shù)為2^16≈60000。
2、2G=2^31b≈20億字節(jié)。
3、為了找出出現(xiàn)次數(shù)最多的數(shù)字,應(yīng)記錄每個(gè)數(shù)字的出現(xiàn)次數(shù)。最快的方法是記錄每個(gè)數(shù)字在內(nèi)存中出現(xiàn)的次數(shù)。記錄方法是記錄相應(yīng)的存儲(chǔ)器地址數(shù)和相應(yīng)地址的存儲(chǔ)器單元數(shù)。但是,2G內(nèi)存只能記錄20億字節(jié)的數(shù)字,如果每個(gè)數(shù)字的出現(xiàn)次數(shù)大于255則會(huì)發(fā)生溢出,沒(méi)有風(fēng)險(xiǎn)。因此,這種方案是不可取的。
4、這樣,磁盤(pán)上只能記錄每次出現(xiàn)的次數(shù)。這樣,就在磁盤(pán)上創(chuàng)建了一個(gè)16g文件。每4個(gè)字節(jié)對(duì)應(yīng)一個(gè)整數(shù),可以對(duì)應(yīng)40億個(gè)整數(shù)。用于記錄相應(yīng)整數(shù)的個(gè)數(shù)。
1. 初始化文件。
2. 依次讀取數(shù)據(jù)并用無(wú)符號(hào)整數(shù)記錄在磁盤(pán)文件中。如果發(fā)生溢出,則該數(shù)字是次數(shù)最多的數(shù)字。
3. 從文件中讀取每個(gè)數(shù)字的次數(shù),用變量a記錄最高次數(shù),用變量B記錄最高次數(shù)的數(shù)據(jù),用文件依次記錄最高次數(shù)的數(shù)據(jù)。當(dāng)最大次數(shù)增加時(shí),a1和B被設(shè)置為1,并且該數(shù)字被寫(xiě)入文件中。當(dāng)出現(xiàn)相同次數(shù)的數(shù)字b1時(shí),該數(shù)字被寫(xiě)入文件的相應(yīng)位置,直到全部被讀取為止。
所以您根本不需要2G內(nèi)存。