python 去重 剛上大一,報的計科,學了一年的c和JAVA,都說計算機和數(shù)學關(guān)系緊密,可為啥沒有感覺到?感到迷茫?
剛上大一,報的計科,學了一年的c和JAVA,都說計算機和數(shù)學關(guān)系緊密,可為啥沒有感覺到?感到迷茫?呵呵,你才剛上大一,剛剛學了一點語言。甚至不是初學者。毫不夸張地說,學習電腦就是拼數(shù)學。光靠學幾門語言
剛上大一,報的計科,學了一年的c和JAVA,都說計算機和數(shù)學關(guān)系緊密,可為啥沒有感覺到?感到迷茫?
呵呵,你才剛上大一,剛剛學了一點語言。甚至不是初學者。毫不夸張地說,學習電腦就是拼數(shù)學。光靠學幾門語言你什么都做不了。特別是在編程實現(xiàn)某些函數(shù)時,如果數(shù)學學得不好,就不能設(shè)計出合適的算法。數(shù)學建模非常重要。我勸你不要想當然。讓我們來看看傅立葉變換,這是最常見的一個高數(shù)字。利用傅立葉變換設(shè)計低通濾波器是圖像處理中最常用的基本功能之一。
同樣,機器語言本身是一個二進制矩陣。圖像的本質(zhì)也是由像素組成的矩陣。然后你就會知道線性代數(shù)的重要性。然后對各種圖像、信號進行放大和縮小,需要用到各種插值,那么你會后悔離散數(shù)學沒學過。當你學習信息論和通信原理時,你會后悔沒有理解復變函數(shù)和概率。。。。。
即使是大二專業(yè)基礎(chǔ)課使用的數(shù)據(jù)結(jié)構(gòu),堆棧、列、排序、二叉樹、哈希圖、遞歸等。。。。都是數(shù)學模型。。。
如果你真的想學好編程,你必須徹底地學習數(shù)學。至于編程語言,這完全是語法結(jié)構(gòu)的問題。是一樣的。編程側(cè)重于算法。至于用什么語言,是膚淺和膚淺的。就像寫一本書,一部經(jīng)典,把它翻譯成任何語言。如廁讀物,如果你用八種語言寫的話,也是如廁讀物。
挑戰(zhàn)程序員同學,如何只用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ù)字,應記錄每個數(shù)字的出現(xiàn)次數(shù)。最快的方法是記錄每個數(shù)字在內(nèi)存中出現(xiàn)的次數(shù)。記錄方法是記錄相應的存儲器地址數(shù)和相應地址的存儲器單元數(shù)。但是,2G內(nèi)存只能記錄20億字節(jié)的數(shù)字,如果每個數(shù)字的出現(xiàn)次數(shù)大于255則會發(fā)生溢出,沒有風險。因此,這種方案是不可取的。
4、這樣,磁盤上只能記錄每次出現(xiàn)的次數(shù)。這樣,就在磁盤上創(chuàng)建了一個16g文件。每4個字節(jié)對應一個整數(shù),可以對應40億個整數(shù)。用于記錄相應整數(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ù)字被寫入文件的相應位置,直到全部被讀取為止。
所以您根本不需要2G內(nèi)存。