python兩個list相減 挑戰(zhàn)程序員同學(xué),如何只用2GB內(nèi)存從20/40/80億個整數(shù)中找到出現(xiàn)次數(shù)最多的數(shù)?
挑戰(zhàn)程序員同學(xué),如何只用2GB內(nèi)存從20/40/80億個整數(shù)中找到出現(xiàn)次數(shù)最多的數(shù)?1、4字節(jié)表示的整數(shù)數(shù)為2^32≈40億,2字節(jié)表示的無符號整數(shù)數(shù)為2^16≈60000。2、2G=2^31b≈20
挑戰(zhàn)程序員同學(xué),如何只用2GB內(nèi)存從20/40/80億個整數(shù)中找到出現(xiàn)次數(shù)最多的數(shù)?
1、4字節(jié)表示的整數(shù)數(shù)為2^32≈40億,2字節(jié)表示的無符號整數(shù)數(shù)為2^16≈60000。
2、2G=2^31b≈20億字節(jié)。
3、為了找出出現(xiàn)次數(shù)最多的數(shù)字,應(yīng)記錄每個數(shù)字的出現(xiàn)次數(shù)。最快的方法是記錄每個數(shù)字在內(nèi)存中出現(xiàn)的次數(shù)。記錄方法是記錄相應(yīng)的存儲器地址數(shù)和相應(yīng)地址的存儲器單元數(shù)。但是,2G內(nèi)存只能記錄20億字節(jié)的數(shù)字,如果每個數(shù)字的出現(xiàn)次數(shù)大于255則會發(fā)生溢出,沒有風(fēng)險。因此,這種方案是不可取的。
4、這樣,磁盤上只能記錄每次出現(xiàn)的次數(shù)。這樣,就在磁盤上創(chuàng)建了一個16g文件。每4個字節(jié)對應(yīng)一個整數(shù),可以對應(yīng)40億個整數(shù)。用于記錄相應(yīng)整數(shù)的個數(shù)。
1. 初始化文件。
2. 依次讀取數(shù)據(jù)并用無符號整數(shù)記錄在磁盤文件中。如果發(fā)生溢出,則該數(shù)字是次數(shù)最多的數(shù)字。
3. 從文件中讀取每個數(shù)字的次數(shù),用變量a記錄最高次數(shù),用變量B記錄最高次數(shù)的數(shù)據(jù),用文件依次記錄最高次數(shù)的數(shù)據(jù)。當最大次數(shù)增加時,a1和B被設(shè)置為1,并且該數(shù)字被寫入文件中。當出現(xiàn)相同次數(shù)的數(shù)字b1時,該數(shù)字被寫入文件的相應(yīng)位置,直到全部被讀取為止。
所以您根本不需要2G內(nèi)存。
該如何用python進行辦公,自學(xué)過一點點的vba,兩者哪個辦公更有優(yōu)勢呢?
我兩個都用過。讓我們分享我的經(jīng)驗和觀點。
Python:
目前最流行的語言之一,有很多數(shù)據(jù)。它對于數(shù)據(jù)處理、財務(wù)數(shù)據(jù)分析、批量處理、對接辦公組件等都非常高效。但它有一定的水平,需要先學(xué)習(xí)Python的基本語法,然后再學(xué)習(xí)相應(yīng)的模塊??赡苡懈嗟募夹g(shù)比VBA學(xué)習(xí),但從長遠來看,它是好的。
VBA:
這是一種過時的技術(shù)。如果微軟office不給它一些應(yīng)用空間,恐怕公眾不會記得它是誰。然而,VBA在office等微軟應(yīng)用程序的開發(fā)中起著重要的作用。它與office開發(fā)無縫結(jié)合。使用它來開發(fā)辦公應(yīng)用程序很容易。公文也很詳細,學(xué)習(xí)門檻低。
結(jié)論:
短期辦公室使用哪種技術(shù)無關(guān)緊要,如果長期使用,建議學(xué)習(xí)python。