㈠ 初學者如何學演算法
先看看兩本書,一本數據結構,一本離散數學。。。看完以後你就會。。。。
㈡ 高中生適合看演算法導論嗎
高中生是否適合看演算法導論,取決於其編程基礎和數學基礎:
若基礎薄弱:對於大多數高中生而言,如果尚未具備扎實的編程基礎和數學基礎,演算法導論可能顯得過於復雜和深奧。此時不適合直接閱讀演算法導論。建議先通過一些簡單的編程練習和入門級演算法問題,逐步提升編程能力,並加強數學基礎。
若基礎扎實:如果高中生已經掌握了良好的編程技能,並且對數學有一定的理解和應用能力,那麼可以嘗試閱讀演算法導論。但需注意,閱讀此書需要有耐心和毅力,逐步理解書中的概念與演算法設計方法。同時,要注重理論與實踐相結合,通過實踐解決具體問題來加深對演算法的理解。
學習策略:在閱讀演算法導論時,高中生可以制定合理的學習計劃,分階段逐步深入。遇到難以理解的部分,可以查閱其他資源,如在線教程或相關書籍,也可以與同學討論,共同解決問題。
綜上所述,高中生是否適合看演算法導論,關鍵在於其是否具備必要的編程和數學基礎。在具備這些基礎後,通過有策略的學習,可以逐步探索演算法導論的奧秘,為日後的計算機科學學習打下堅實的基礎。
㈢ 我是學生,高中,現在想學計算機,自學,那麼《演算法導論》適合零基礎的嗎,高數啥的什麼都不會,學的好嗎
《演算法導論》不適合零基礎。可以先學習《計算機基礎》,然後再學習C語言或Java語言基礎,再學習《數據結構》。
㈣ 演算法怎麼學
貪心演算法的定義:
貪心演算法是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,只做出在某種意義上的局部最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。
解題的一般步驟是:
1.建立數學模型來描述問題;
2.把求解的問題分成若干個子問題;
3.對每一子問題求解,得到子問題的局部最優解;
4.把子問題的局部最優解合成原來問題的一個解。
如果大家比較了解動態規劃,就會發現它們之間的相似之處。最優解問題大部分都可以拆分成一個個的子問題,把解空間的遍歷視作對子問題樹的遍歷,則以某種形式對樹整個的遍歷一遍就可以求出最優解,大部分情況下這是不可行的。貪心演算法和動態規劃本質上是對子問題樹的一種修剪,兩種演算法要求問題都具有的一個性質就是子問題最優性(組成最優解的每一個子問題的解,對於這個子問題本身肯定也是最優的)。動態規劃方法代表了這一類問題的一般解法,我們自底向上構造子問題的解,對每一個子樹的根,求出下面每一個葉子的值,並且以其中的最優值作為自身的值,其它的值舍棄。而貪心演算法是動態規劃方法的一個特例,可以證明每一個子樹的根的值不取決於下面葉子的值,而只取決於當前問題的狀況。換句話說,不需要知道一個節點所有子樹的情況,就可以求出這個節點的值。由於貪心演算法的這個特性,它對解空間樹的遍歷不需要自底向上,而只需要自根開始,選擇最優的路,一直走到底就可以了。
話不多說,我們來看幾個具體的例子慢慢理解它:
1.活動選擇問題
這是《演算法導論》上的例子,也是一個非常經典的問題。有n個需要在同一天使用同一個教室的活動a1,a2,…,an,教室同一時刻只能由一個活動使用。每個活動ai都有一個開始時間si和結束時間fi 。一旦被選擇後,活動ai就占據半開時間區間[si,fi)。如果[si,fi]和[sj,fj]互不重疊,ai和aj兩個活動就可以被安排在這一天。該問題就是要安排這些活動使得盡量多的活動能不沖突的舉行。例如下圖所示的活動集合S,其中各項活動按照結束時間單調遞增排序。
關於貪心演算法的基礎知識就簡要介紹到這里,希望能作為大家繼續深入學習的基礎。
㈤ 《演算法導論》有什麼好的學習心得
本人沒有讀過這本書,文化水平不夠,就算讀了估計也是不知所雲,這個應該是比較專業的人看的吧,那我只能從網上摘錄些供大家分享。
推薦每學一個演算法,就去各個OJ(Online Judge)找一些相關題目做做,有時理論讓人很無語,分析代碼也是一個不錯的選擇。