原创 算法:用Java實現圖論算法中的拓撲排序,並應用拓撲排序安排課程表

本文我打算用Java實現圖論算法中的拓撲排序,並應用拓撲排序安排課程表。課程表就是很常規的那種Java學習的簡單路線圖,首先下圖就是Java課程學習的一個拓撲順序圖: 上面這張圖是什麼意思呢?黑色的字就代表要學習的課程,而紅色的

原创 算法:用Java實現歸併排序(MergeSort)

本文我準備用Java實現歸併排序。具體的排序算法過程已經在註釋裏面了,大家可以複製代碼到IDE裏面,用DEBUG模式研究算法的過程(算法參考:https://blog.csdn.net/qq_36442947/article/de

原创 算法:根據二叉樹的數據及其對應的順序存儲下標值(從1開始),生成對應的二叉樹

之前我實現了通過二叉樹的中序遍歷順序,加上前後序任意一種遍歷順序,最後在內存中生成二叉樹的方法(點我去看看)。今天我再實現一種根據二叉樹的數據及其對應的順序存儲下標值(從1開始),在內存中生成對應的二叉樹 我們還是拿之前文章的二叉

原创 算法:用Java實現睡眠排序(SleepSort)

本文我準備用Java實現睡眠排序。睡眠排序由於其獨有的排序方式,排序數字最好是非負整數,且最大值不要太大,否則算法會運行很久……非負小數其實也可以,但是排序後的相鄰小數的差值不要太小,否則可能會出錯,因爲多線程的運行有其不確定性和

原创 算法:用Java實現外部排序(ExternalSort)

外部排序,是相對於內部排序而言的。之前我分享了很多種排序,這些排序都是將待排序的亂序數組全部放到內存裏面,然後執行相應的排序算法,完成排序並輸出結果的。整個排序的過程都是在內存裏一次性加載所有的待排序數字,然後在內存裏完成排序算法

原创 算法:用Java求解約瑟夫環(Joseph Circle)的問題

據說著名猶太曆史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人

原创 算法:用Java實現基數排序(RadixSort)

本文我準備用Java實現基數排序。基數排序由於其獨有的排序方式,只適合待排序的數字都是非負整數的情況。基數排序和計數排序名字很相像,不要搞混淆了。接下來我列舉一下二者的共同點和不同點: 計數排序和基數排序的共同點: 1、都是隻適合

原创 算法:用Java實現希爾排序(ShellSort)

本文我準備用Java實現希爾排序。具體的排序算法過程已經在註釋裏面了,大家可以複製代碼到IDE裏面,用DEBUG模式研究算法的過程(算法參考:https://baike.baidu.com/item/%E5%B8%8C%E5%B0

原创 算法:用Java實現堆排序(HeapSort)

本文我準備用Java實現堆排序。其實我以前在用二叉大頂堆實現優先隊列的時候,就已經順便實現了堆排序,今天把其中堆排序的代碼提取出來,專門作爲排序的一篇博文,並附上以前用二叉大頂堆實現的優先隊列,以及順便實現堆排序的博文地址:點我查

原创 算法:用Java實現在海量的數據中,找到最大的N個數字,也就是TopN問題

我準備用優先隊列來實現TopN問題,海量數據是指計算機內存裝不下的很大的數據文件,在裏面找到最大的N個數字。因爲是海量的數據文件,所以還是按照以前外部排序那種,每次讀文件的一部分,然後一個一個地吐數字,以確保內存可以處理。然後在讀

原创 算法:用Java實現計數排序(CountSort)

本文我準備用Java實現計數排序(計數排序由於其獨有的排序方式,只適合待排序的數字都是非負整數的情況,且最大的數字不能太大,否則用於計數的數組將佔用過大的內存空間)。具體的排序算法過程已經在註釋裏面了,大家可以複製代碼到IDE裏面

原创 算法:用Java實現不相交集類(DisjointSet),也叫並查集

本文我用Java實現不相交集類(DisjointSet)的數據結構與算法。在這裏先解釋一下不相交集類,你可以想象成爲剛開始有N個獨立的元素,N個元素兩兩都不等價(不屬於一個同等價集合,剛開始有N個等價集合,每個等價集合都只有一個元

原创 算法:以不相交集類(DisjointSet)作爲輔助工具類,用Java實現克魯斯卡爾(Kruskal)算法求出圖的最小生成樹

之前我用克魯斯卡爾(Kruskal)算法求出了圖的最小生成樹(還記得是如何求出最小生成樹的嗎?就是把圖的所有邊拿出來,按權重從小到大排列,依次拿邊嘗試放到圖中。如果邊放進去不形成環,則放進去。如果邊放進去會形成環,則這條邊捨棄,然

原创 算法:用Java實現圖論算法中歐拉回路的求解(一筆畫問題),並求出 "奧運五環" 的所有一筆畫畫法

今天我準備用Java來求解圖論算法中的歐拉回路(EulerCircuit)問題,這個名字可能對大家有些陌生,如果我說一筆畫,大家肯定就都清楚了。原來有一個"七橋問題",不知道的可以百度,這裏就不詳述。繼而引出了一筆畫的問題。後來歐

原创 算法:用Java實現一個帶刪除功能的布隆過濾器(BloomFilter)

上一篇博客,我實現了一個迷你的布隆過濾器(BloomFilter)。今天我再實現一個帶刪除功能的布隆過濾器增強版 布隆過濾器刪除功能的原理,就是原來是通過true和false來判斷,而現在是通過計數來判斷了。add()操作就是往那