【每天進步一點】2012.04.12

上午

      上午剛到實驗室的時候,先寫完了一個程序,在USACO上一次就pass,雖然比較水,但是還是很開心。然後又打電話跟女朋友溝通了一些感情上的問題,說完之後,感覺心情明顯好得多了。要不然,可能今天一整天就會用寫程序去打發它了。

      之後閱讀了<<Introduction To Algorithms>>的single-source shortest paths章節中的兩個算法:Bellman-Ford算法與Dijkstra算法。其中,Bellman-Ford算法的效率沒有Dijkstra的效率高,但它可以去解決存在negative-edge的情況。

     在Bellman-Ford算法中,首先需要initialize這個single source圖。然後循環對所有的邊進行v-1次relax操作。最後判斷有無非環的操作是遍歷每一條邊(u,v),測試d[v]>d[u]+(u,v)。

     而在Dijkstra算法中,類似於BFS,它使用一個一個最小堆來維護所有的頂點,從當中取出具有最小d值的節點,然後訪問它所有直接相連的邊,進行relax操作。然後將新的節點更新到最小堆中,這裏涉及Decrease-Key操作。

下午

      下午按照導師佈置的任務,接觸了MagicARM2410試驗箱,完成了一個GPIO實現,基本的原理和問題都能夠搞得比較明白,只是將程序燒寫到板子上之後,就進不去原來自帶的Linux系統了,從網上查閱了一些資料,估計以後會進行到這一步,然後完成它的。雖然自己一點兒都不喜歡嵌入式,不過還是強迫着自己去學習吧,遇到困難不能夠畏縮,而是要迎頭而上。這纔是作爲一個更強的人的基本保證。畢竟,爲什麼別人可以,我不行呢?就應該這樣對自己說。

晚上

       今天晚上又學習了<<Introduction To Algorithms>>中的接下來一部分內容,比較重要的是Difference contraints使用shortest paths方法求解。這裏講解了一種處理比較特殊的一類linear programming問題——Systems of difference contraints。使用頂點來表示未知的x,每一條邊就代表着b值,也即約束條件。使用的方法是,構建graph的時候,添加進來一個新的頂點v與v到其他所有頂點的邊,每個邊的權值都是0,最後從v點開始,使用Bellman-Ford算法搜索Shortest path,每個頂點的d值即是x的可取值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章