數據結構對演算法的影響
⑴ C語言與演算法和數據結構的關系
① 不要認為單獨學C很難真正編寫出程序。
② 不要太認為你沒學數據結構和演算法難以解決實際編程問題。
③ C語言只要你熟練掌握,這就是你學Data structure and Algorithms 的基礎。
④ 學好數構和演算法的前提是:你C語言用得比較熟練了(特別是指針、復合變數、數組的編程運用)
⑤ 最後,你只要看一本關於數據結構和演算法的書就夠了《演算法導論》(國外的那本),如果要深入搞懂它,最好看它之前看Knuth的一本《Concrete Mathematics》。演算法導論算是演算法與數據結構的聖經了,裡面充分講了演算法和數據結構的大部分理論和實踐。
⑥另外,演算法和數據結構是有深刻關系的,但是你完全可以學演算法的時候不用復雜數據結構就能解決大部分問題;或者不用復雜演算法,單憑構造復雜數據結構解決復雜問題。
⑵ 數據結構與演算法的關系
數據結構與演算法的關系表現在以下幾個方面:
首先,它們在指代上有所區別。演算法指的是解決問題的准確且完整的步驟描述,是一系列解決問題的明確指令。而數據結構則指的是數據元素之間存在特定關系的虛擬集合。
其次,它們的目的不同。演算法的描述的是一個計算過程,它能夠從一個初始狀態和可能的初始輸入開始,通過一系列有限且清晰定義的狀態轉換,最終產生輸出並停止於一個最終狀態。數據結構則研究數據的邏輯結構和物理結構之間的相互關系,定義相應的運算,並設計出相應的演算法,以確保經過這些運算後得到的新結構仍然保持原有的結構類型。
最後,它們的特點也有所不同。演算法中的每個計算步驟都可以被分解為基本的可執行操作步驟,即每個步驟都可以在有限時間內完成。而數據結構的核心技術是分解與抽象。通過分解,可以將數據劃分為三個層次;通過抽象,可以舍棄數據元素的具體內容,從而得到邏輯結構。
⑶ 演算法和數據結構的關系
記得網上曾經有一個帖子,大概的列出了學習ACM來說需要的知識背景。如果不是牛人,或者天生受虐傾向,普通人看到了都會暈倒,多達100多個科目(全部需要數學背景)。樓主覺得你能學的過來嗎?
但是,所有的演算法,乃至數學在實際運用中都是要根據不同的數據來選擇不同的方法,所以一般學習過演算法和數據結構的人都會越發的認識到,數據才是程序的中心,只有找到了一個組織數據的最佳方式,演算法的運用才會事半功倍。比如我印象最深刻的是在大二時做的一道題目:判斷一個輸入的數是否符合科學計演算法。如e*103,-30.90*103就不是。 這樣一道題,如果用普通的數組線性存儲,然後逐一判斷,效率的演算法的復雜度都是不合格的。 有限狀態機則清晰明了的解決了這個問題。即把所有可能的狀態和狀態的轉換畫成一個矩陣,然後每讀取一個輸入的字元就在這些狀態中跳轉,直到最後一個字元為止,判斷最終狀態是有效還是無效狀態。
總而言之:數據結構是問題的核心,是演算法的基礎。
建議樓主先磨好數據結構這把劍,對演算法也不用著急,畢竟很多的數據結構的書中都有一些基礎演算法的介紹的。