演算法分析與實踐 作業13

2022-08-19 00:18:16 字數 1108 閱讀 4221

讀後感

由於參與了我院acm實驗室的緣故,我有幸閱讀了《演算法競賽》(高階指南)這本書。儘管並沒有能完全地滲透這一本書,但是還是在這本書上學習一些比較有用的演算法。演算法可以說是基礎,很多問題倘若我們使用暴力的方法去解決,複雜度甚至可以達到o(n!),但是當我們使用了一些演算法去優化,複雜度可以降到o(nlogn),這能夠極大的節約我們的時間。比如對於乙個相同的問題,沒使用演算法的人跑了一天,而使用演算法的人只需要短短的幾秒鐘,這樣的差距是巨大的,同時也可見演算法給我們帶來了極大的便利。

這本書中關於動態規劃的這一部分令我十分敬佩。我一直覺得在演算法競賽中,動態規劃是一塊非常難的部分,動態規劃的題目一般是非常有靈性的。有很多題目你甚至第一時間不能直接想到動態規劃,反而會嘗試用貪心的思想去解決。我覺得對於動態規劃而言,有幾個方面的內容是非常重要的。首先就是轉移關係式的書寫,往往在這一步我們就能卡好久,我們需要聯想到當前這一狀態,能夠從之前的哪幾個狀態進行轉移,如何轉移;又或是陣列,我們是需要開二維陣列、三維陣列甚至於四維陣列,陣列的每一維狀態又分別表示什麼;初始化問題等等,這些都是動態規劃問題的難點。

在這本書中,他講解了許多不同型別的動態規劃,其中斜率優化動態規劃我學了好久,所謂斜率優化動態規劃,就是根據你自己得出的一條不等式,將所有能夠轉移的狀態放在乙個佇列中,隊頭的元素就是我們當前轉移的最優狀態,然後這個佇列需要用到你自己寫出來的這個不等式來進行維護,一般來講,我們需要維護的佇列依賴於佇列中相鄰兩個元素之間的某種「比值」。因為這個值對應線性規劃的座標系中的斜率,所以我們稱此為斜率優化動態規劃。這也可以算是一種線性規劃問題。斜率優化動態規劃也是極大地擴充套件了我的眼界。

在之前,我也做過一道題目,題目的大致內容是這樣的,給你n個棒子,每根棒子的長度已知,問你有多少種方法使得從這n根棒子中選出3根能夠組成三角形。很自然地想法是暴力列舉,但是時間複雜度為o(n3),並且n的範圍是1e5,使用這個複雜度明顯不能在1秒中跑出結果,後來我搜了一下這道題目的題解,發現這道題目所用到的演算法是快速傅利葉變化(fft),能夠將複雜度降到o(nlogn)。也算是學到了不少東西吧!

我覺得演算法更多的給予我們的是一種對於題目的思考方向。就好比老師上課講的,用演算法沒什麼,真正能設計出演算法的,那才是厲害的人。讀這本書極大地擴充套件了我的思路,教會我思考問題時,不能單單從乙個方面去思考,得時常冒出更加精彩的想法!

演算法分析與實踐 作業13 讀書筆記

演算法競賽高階指南 讀書筆記 在學習了演算法設計與分析基礎這門課後,我還翻閱了 演算法競賽高階指南 這本書,這本書根據ccf noi資訊學奧利匹克競賽涉及的知識體系進行編寫,對計算機程式設計的基本技能 資料結構與演算法進行了深入的講解。我覺得通過這本書,我了解到的東西還是比較豐富的。比如字典樹的概念...

演算法分析與設計實踐 作業13 讀書筆記

我從圖書館借閱了 演算法演化論 一書,此文是我讀後對該書的一些感想。計算機數學是科學計算的一門主體學科,它伴隨著電子計算機的推廣應用而成長壯大,是一門僅有40餘年歷史的新學科。在科學計算蓬勃發展的今天,迫切要求充實完善計算數學的學課體系。翻開科學發展史,可以看到,一門學科的形成可以有不同的方式 方法...

演算法分析與實踐 作業5

在包含有n個點的集合s中,找出距離最近的兩個點。設 p1 x1,y1 p2 x2,y2 pn xn,yn 是平面的n個點。嚴格地講,最近點對可能不止一對,此例輸出一對即可。利用分治求解 首先對所有的點按照x座標 或者y 從小到大排序 排序方法時間複雜度o nlogn o nlogn o nlogn ...