演算法有什麼作用呢,在我的理解來看:演算法可以鍛鍊自己的邏輯思維能力,問題解決能力,在特定的應用場合能夠更快更好的確定計算方法,當然,在程式設計中,有各種各樣需要解決的問題,演算法是定的,人是活的,精通演算法更多的是在思維上對人的幫助。
最後:不懂演算法的程式設計師不是合格的程式設計師
今天去面試,出了個演算法題,題目如下:
在如下8*6的矩陣中,請計算從a移動到b一共有多少種走法。要求每次只能向上或向右移動一格,並且不能經過p
如果你對各種演算法不熟悉 或者沒有對類似問題做過思考與歸納總結,又或者你沒有看過這方面的資料文獻,那麼如果你的思維能力不是很強,可能搞個半天不一定能夠得出正確的答案 。
這個問題是屬於典型的動態規劃類的演算法
假如a到b的總的走法為記為ab,
a到p記為ap,
p到b記為pb,
那麼符合規則的走法re = ab - (ap * pb);
橫向假如設為x軸,縱向設為y,
用(x,y)表示各點的座標
那麼除a(1,1)點外y座標為1的點的值(到此點的走法)都為1,除a(1,1)點外x座標為1的點的值(到此點的走法)也都為1;除去以上點,那麼各個點的走法為到他左邊點的走法加上到它下面點的走法,用二維陣列表示即為:arr[x][y]=arr[x-1][y]+[x][y-1];
c語言實現如下
int count(int x,int y);
for(int i=1;i<=x;i++)else}}
return dp[x][y];
}
php實現如下
function
roadcount
($x,$y)else
if(($i==1 || $j==1) && ($i != $j))else}}
return
$arr[$x][$y];
}
python實現
def
roadcount
(x,y):
x = x+1;
y = y+1;
list = [([0]*(y)) for i in range((x))];
for i in range(1,x):
for j in range(1,y):
if (i == 1
or j==1) and (i !=j):
list[i][j] = 1;
else:
list[i][j] = list[i-1][j] + list[i][j-1];
return list[x-1][y-1];
如果你沒得卵事,可以用ruby、js、perl等語言實現它 但是最核心是:
dp[i][j] = dp[i][j-1]+dp[i-1][j];
即後面的資料與前面的資料有某種因果關係。所有這種類似的問題都可以用這種模型去解決。這就體現了學習演算法的最主要作用:思維+模式;
活學活用,不要死記!!!
從下一節起,將會研究各種演算法
MySQL系列一 前言
mysql大體來講分為兩部分 service層,儲存引擎層 1 service層 查詢快取 命中則直接返回結果,以key value形式存放在記憶體中,如果表 現更新操作,則快取全部失效,在mysql8.0版本之後已經去掉這個模組 分析器 詞法,語法分析,檢查你的sql是否有一場 優化器 執行計畫生...
軟體工程(一) 前言
筆者正在學習 軟體工程 實踐者的研究方法 這本書,記錄下一些讀書筆記,共勉!軟體開發時間長 開發成本高 軟體交付客戶前,無法找到所有錯誤 維護已有程式花費較高的時間和人力代價 軟體開發和維護過程難以度量。1 指令的集合,通過執行這些指令可以滿足預期的特徵 功能和效能需求 2 資料結構,使得程式可以合...
效能優化總結(一) 前言
最近一直忙著學2010 wpf 看架構師教程 學英語,搞得都沒時間寫部落格了。最近在gix4專案上做了一些效能方面的優化,為了方便和同事們分享經驗,今天準備把一些相關的小技巧都寫一下。這幾個技巧並不難,也不是說設計得多好,而是我覺得它們很重要。記得我在做上乙個web系統時,也支援oo的業務富模型,其...