天天看點

ID3算法 決策樹 C++實作

人工智能課的實驗。

資料結構:多叉樹

這個實驗我寫了好久,開始的時候從資料的讀入和表示入手,寫到遞歸建樹的部分時遇到了瓶頸,更新樣例集和屬性集的辦法過于繁瑣;

于是參考網上的代碼後重新寫,建立決策樹類,把屬性集、樣例集作為資料成員加入類中,并設立通路數組,這樣每次更新屬性集、樣例集時隻是标記通路數組的對應元素即可,不必實際拷貝。

主函數:

屬性結構體

樣例結構體

決策樹的結點

決策樹類的實作

ID3算法 決策樹 C++實作
ID3算法 決策樹 C++實作

Decision_tree

現在這個版本的代碼用了10小時完成,去檢查時被研究所學生貶得一文不值。。。也的确,現在我們寫的實驗題目面向的都是規模非常小的問題,自然體會不到自己的代碼在大資料面前的劣勢。不過我現在确實學得太少了,很多資料結構都沒有動手實作過,算法也是。對C++也隻能算入了門。俗話說“磨刀不誤砍柴工”,“工欲善其事,必先利其器”,先把基礎知識學好,多做基本練習,學到的資料結構和算法都動手實作一遍,這樣遇到實際問題也好對應到合适的資料結構和算法。

另外,參照一本書學習好的代碼風格和習慣也是很重要的,因為寫代碼的習慣是思維習慣的反映,而我現在還處于初學者階段,按照一種典型的流派模仿,建構起自己的思維模式後再談其他的。

忽然覺得自己學了快兩年程式設計還這麼水實在是不能忍,都怪大一時年少不懂事沒好好學基礎。。。

不過,“悟已往之不谏,知來者之可追”,有了方向,一步步走下去就好,不求優于别人,但一定要“優于過去的自己”。