我們前面學習的資料結構和演算法思維,是解決問題和**優化的基礎。本節課開始,我們進入實戰模組,從真正解決問題的角度來看看,如何將我們此前學到的知識靈活運用到實際工作中。
加入我現在面對乙個實際的演算法題,我需要從以下兩個方面進行思考。
首先,我們要明確目標。即用盡可能低的時間複雜度和空間複雜度,解決問題並寫出**;
接著,我們要定位問題。目的是更高效地解決問題。這裡定位問題包含很多內容。例如:
面對乙個未知問題時,你可以從複雜度入手。嘗試分析這個問題的時間複雜度上限是多少,也就是採用暴力法去解題,然後分析這個問題時間複雜度的下限是多少,這是你寫**的目標。
接著,嘗試去定位問題。分析完問題後,就需要去設計合理的資料結構和運用合適的演算法思維,去逼近寫**的目標。
最後,需要對資料操作進行分析。例如,在這個問題中,需要對資料進行哪些操作(增刪查),資料之間是否需要保證順序或逆序?當分析出這些操作的步驟、頻次之後,就可以根據不同資料結構的特性,去合理選擇你所應該使用的那幾種資料結構了。
以上這套方法適用於絕大多數的問題,在實戰中需要你靈活運用。
總結:在開發前,一定要對問題的複雜度進行分析,做好技術選型。這就是定位問題的過程。
重學資料結構與演算法 漢諾塔
def hanoi n,a,b,c if n 0 hanoi n 1,a,c,b print moving from s to s a,c hanoi n 1,b,a,c hanoi 3,a b c 遞迴總體來說,要看整體,不能揪住細節不放,也就是說要按照不失一般性的思路來考慮。漢諾塔可以總結出3個...
重學資料結構之演算法2 7
include 輸入輸出函式標頭檔案 include 記憶體申請函式標頭檔案 define list init size 100 define listincrement 10 typedef int elemtype typedef struct sqlist 操作結構,構造乙個空的線性表l vo...
重學資料結構 單鏈表
我們來學習一些單項鍊表的增刪改查。對於鍊錶可謂是又愛又恨,愛是因為它是真的好用,恨是因為晦澀難懂,來來回回學了幾遍才搞懂。鍊錶中由兩部分構成 資料 位址指標。頭節點一般都是不存放資料,只是當做單項鍊表的開始索引,方便進行相關操作 頭節點不一定都存在 位址指標存放著下乙個節點的記憶體位址,最後乙個節點...