Time of Update: 2018-12-04
<<AtA>>上的一道思考題.昨天開始琢磨,今天又琢磨到現在.我承認我腦袋比較迷糊,但也有點慢得讓我接受不了了."不急跬步,無以至千裡;不積小流,無以成江海",只能如此安慰自己了.呵呵. 問題本身就是,給定 N 個數的集合S, S {X | X ∈ S, 0 <= X <= k).恩.書上是1,我這裡出現的是0.多了個數罷了.要求是,修改計數排序,以完成在 O (N + K) 時間完成排序的任務,並且只能使用 O (K) 的儲存空間.
Time of Update: 2018-12-04
/*open_addressing_hash_with_hashing_again.c -- 開放定址散列表線性探測法可再散列實現檔案*/#include <stdio.h>#include <stdlib.h>#include "open_addressing_hash_with_hashing_again.h"/*局部函式宣告*/static int Get_Prime_Value (const int size) ;static int Is_A_Prime
Time of Update: 2018-12-04
/*binomial-queue.c -- 二項隊列實現檔案*/#include "binomial-queue.h"/*局部函式宣告*/static SubTree Combine_Trees (SubTree t1, SubTree t2) ;static Node * Make_Node (const Item item) ;static void Recursively (const SubTree t, void (* pfun) (const Item item))
Time of Update: 2018-12-04
兩天時間,白天看虛擬儲存空間,晚上到家寫這個東西,剛剛寫完.缺點不少,功能實現是必須的. 這個東西,是根據習題的要求寫的,關於盒子問題,所以我給它取了個名字--盒子樹.呵呵. 在寫代碼的過程中,我希望寫完之後大肆慶祝下,.可寫完之後,又覺得沒什麼...呵呵 對於這個東西,我解釋下我的分析. 總體要求,就是要求有序.於是我選擇了二叉搜尋樹,考慮過AVL樹,後來覺得新東西,還是先簡單地實現下.
Time of Update: 2018-12-04
/*box.c -- 盒子問題實現檔案*/#ifndef GENERIC#include "box.h"#endif/*局部函式宣告*/static Box * Make_Box (const Weight capacity) ;static Box * Find_Max (Box * box) ;static Box * Find_Min (Box * box) ;static int Insert_ (BoxTree * const pbt, const Weight capacity,
Time of Update: 2018-12-04
終於開始接觸排序了.實現可以理解,複雜度的分析對我來說很難./*7-1-11-19-00.01.c -- 第七章第一題*/#include <stdio.h>#include <stdlib.h>#define SIZE 9typedef int Item ;int main (void) ;void insert_sort (Item * array, const int size) ;void print_array (const Item * const
Time of Update: 2018-12-04
排序的穩定性,是指排序前後,相同元素的位置先後關係是否改變.穩定排序,是位置先後關係不變.不穩定排序,是先後位置關係改變,當然,也存在不改變的可能.更說明了他的不穩定.可笑吧?哈哈... <<AtA>>的一道課後習題,問了幾種常見排序的穩定性問題,以及如何將不穩定排序改為穩定排序.為了探尋這個問題,我決定動手寫出這些排序.這是昨天的事,昨天開始寫的.到現在寫完了,中途幹了許多別的事情. 還是第一次,默寫這些個排序.收穫很多,可以說,最起碼克服了默寫這些排序的恐懼.
Time of Update: 2018-12-04
同度點集,就是產生相同的距離集合,但卻是不同點集的那些點集.這個東西,整個白天都在想.到現在,也不是很清楚.但,代碼寫出來了,回溯部分總是不自信的感覺. 核心的思想就是:傳遞給常式一個數組指標,之後用一個 static int 類型變數儲存點集的個數.即每次使集合為空白,就執行 count++ ; 無論是否成功產生點集,都進行回溯.通過對決策樹的分析,在每次調用 place () 結束之後,都通過上一個點集的內容對 distance
Time of Update: 2018-12-04
/*7-4-11-19-19.58.c -- 第七章第四題*/#include <stdio.h>#include <stdlib.h>#define SIZE 9int main (void) ;void print_array (const int * array, const int size) ;void shell_sort (int * array, const int size) ;int main (void){int array[SIZE] = {9,
Time of Update: 2018-12-04
計數排序,白天手機看維基百科看到的.對付資料跨度小的 int 型資料,的確很快.代碼,很直觀./*count_sort-11-03-21-19.01.c -- 計數排序*/#include <stdio.h>#include <stdlib.h>#define SIZE (10)int main (void) ;int countSort (int * const array, const int size) ;void printResult (const int *
Time of Update: 2018-12-04
/*7-11-11-19-22.12.c -- 第七章第十一題*/#include <stdio.h>#include <stdlib.h>#define LEFTCHILD(position) ((position) * 2 + 1)/*Notice the space*/#define SIZE 12int main (void) ;void print_array (const int * const array, const int size) ;void
Time of Update: 2018-12-04
/*7-23-11-23-23.10.c -- 第七章第二十三題*/#include <stdio.h>#include <stdlib.h>#define CUTOFF (3)#define SIZE (40)#define WRONG (-36768)int main (void) ;void print_array (const int * const array, const int size) ;void swap (int * const p1, int *
Time of Update: 2018-12-04
/*binary_heap.c -- 二元堆積實現檔案*/#include <stdio.h>#include <stdlib.h>#include "binary_heap.h"/*局部函式宣告*/static int Percolate_Up (const Binary_Heap * const pbh, const int index) ;static int Percolate_Down (const Binary_Heap * const pbh, const
Time of Update: 2018-12-04
話說這個東西寫到淩晨3點27分,都沒有寫好.剛才睡醒了寫完的.主要遇到的問題就是當數組大小不是2的冪的時候發生的 right_end 越界的時候.我的邏輯起初偏於複雜,後來重新組織邏輯,當發生 right_end 越界的時候, 取 size - 1 為 right_end, 並且保持前一個數組完整, 後一個數組的大小不去顧及. 這樣問題就解決了. 這貌似加深了我對歸併排序的理解./*7-14-11-21-00.21.c -- 第七章第十四題*/#include
Time of Update: 2018-12-04
看<<AtA>>,講計數排序後面的一道習題.確實,睾丸之後,耳朵裡面略疼,呵呵. 指定的資料,在 min ~ max 範圍內,確定其中資料在 start ~ end 的資料的個數.因為是計數排序的習題,很自然地想到藉助於計數排序解決,或者,是一部分,或者,是變體.其實,這一部,貌似很難.只不過,在那個時刻,理所當然地想到了. 之後,很快就寫好了.寫好了的時候, min 只能為 0 .
Time of Update: 2018-12-04
實現檔案.裡面的細節,關係到輸出的方式.可以選擇多種輸出方式,沒有大肆封裝.//block.cpp -- 類比整合電路板實現檔案#include "stdafx.h"#include "block.h"namespace block{//private:void Test :: m_Merge (const int left, const int leftEnd, const int right, const int rightEnd){int i, j, k ;for (i = left,
Time of Update: 2018-12-04
就感覺,自己對這些個排序.至少,腦袋裡還沒有.哎,我老是不專心呢.加油吧. 說說快速排序吧.這東西,原理就是不斷地將一個數組分成3部分.保持所有數組處在這種狀態,最終完成排序. 這些思想,還沒有掌握.加油吧,我還能說什麼? 說些這個,呵呵. 這段代碼,起初不懂.後來,隨著不斷手工類比,發現,採用了很多技巧.也難怪起初根本理解不了.自己試著手工按照代碼上的去做,再按照自己的想法做了下,就清晰多了.確實很多技巧.
Time of Update: 2018-12-04
動態規劃的演算法. 計算出當前二叉搜尋樹構造成最優二叉搜尋樹後的最低訪問代價.雖然還沒有去寫產生最優二叉搜尋樹的常式,但已經很開心了.畢竟,接觸動態規划算法的第三天,寫出了這個,很高興. 希望,並且相信,最近能相繼寫出更多的有關動態規划算法的問題,並且最終遊刃有餘地掌握. 代碼貼出來吧.就不多說了,自覺寫得不錯哦.從分析問題到寫出代碼,用了5小時左右吧./*10-31-11-02-05-20.23.c -- 第十章第三十一題*/#include
Time of Update: 2018-12-04
這個東西,對於數學上的分析我看明白了90%.但並未做深入研究.這個代碼是抄來的,核心部分是抄來的.感覺不錯. 產生固定的隨機數序列,只要種子一樣的話.這個隨機數產生器比較透明,而且較容易改動.很不錯. 每次實現代碼的時候,都會發現很多問題.而且,一旦寫上了代碼,時光就飛逝了...很不錯. 好吧,帖出來吧.又是來網吧,又是邊下電影邊寫Blog,呵呵.很不錯./*10-35-11-02-08-20.11.c -- 第十章第三十五題*/#include
Time of Update: 2018-12-04
回溯演算法.話說這東西也是經曆過各種磨難才寫出來的.寫出來之後,就不想再多說些什麼了./*10-40-11-02-16-06.10.c -- 第十章第四十題*//*02-18-01.54 完成.大概用了13小時.*/#include <stdio.h>#include <stdlib.h>#define FALSE (0)#define TRUE (1)typedef int Item ;typedef int BOOL ;/*Data is a kind of