一、演算法
演算法就是任何良定義的計算過程,該過程將某個值或值的集合作為輸入並產生某個值或值得集合作為輸出;亦可將演算法看作是用於求正確解的計算問題的工具。
一般情況下,問題陳述了期望的輸入和輸出之間的集合對映關係;而演算法則描述乙個特定的計算過程來實現問題的輸入和期望的輸出之間的對映關係。
二、np問題
演算法理論中,最深刻的問題之一是:從計算機的觀點來看,要解決的問題的內在複雜性如何?它「容易」計算還是計算比較」困難「 ?為了評價演算法的有效性,需要對演算法的效率進行估計。問題的計算複雜性可以通過解決該問題所需的計算量的多少進行度量;但是如何區分乙個問題是「難」還是「易」,通常將可以在多項式時間內解決的問題被看作是「易」解問題,而將需要指數函式時間解決的問題被看作是「難『解決的問題。
p類問題:所有在多項式時間內被確定性計算模型(一般計算機,採用猜測的方式,總能猜出問題的正確解)求解的判定問題構成p類問題。
np類問題: 所有在非確定性計算模型(有些問題的答案,不能依照公式進行推算,只能對可能的解進行驗證;這種計算模型不能給出正確答案是哪些,但是它可以驗證你所列出的答案是否正確;如質數的判斷,並沒有可用的公式可以推測下乙個質數是什麼,但是給出乙個數,計算機就可以判斷這個數是不是質數。)下的易驗證性問題(答案可以在多項式時間內驗證完成的問題)構成np類問題。
np完全問題(np-c問題),千禧年大獎難題,是世界七大數學難題之一;由p類問題和np類問題的定義可知,p是np的子集,但是有人認為np中包含了 非p類問題。
如果任何乙個np問題都能通過乙個
多項式時間演算法轉換為某個
np問題
,那麼這個np問題就稱為np完全問題——問題轉化為:找到可以在多項式時間內將np問題轉化為np完全問題的演算法。目前為止:沒有人能夠證明存在這樣的演算法,也沒有人能夠證明不存在這樣的演算法。
演算法作為一種技術:由於計算機儲存空間的有限性和計算速度不是無限快的限制,以及我們對計算時間的要求,我們需要設計在時間和空間方面有效的演算法來解決問題。
三、分析演算法
1.概念:
分析演算法:即估計演算法所需要的資源;
分析使用的模型為:單處理器計算模型——隨機訪問機ram;在ram中,指令被一條接一條地執行,並沒有併發執行。
輸入規模:輸入規模的度量依賴於所要研究的問題;如對排序和傅利葉變換,輸入規模的度量自然是輸入引數的項數;而對於大整數相乘,輸入規模需要依據輸入的整數表示時所需要的二進位制的位數來度量。
最壞情況:對於輸入規模為n的任何輸入,演算法的最長執行時間。、
o記號:漸進上界;演算法分析中最常用的一種漸進記號;
ω記號:漸進下界;
θ記號:同階。
2.分析一般法則
a)for迴圈:乙個for迴圈的執行時間至多是該for迴圈內部語句的執行時間乘以迭代次數;
b)for迴圈巢狀:從裡之外分析巢狀迴圈;在一組巢狀迴圈內部的一條語句總得執行時間為該語句的執行時間乘以改組所有的for迴圈的大小的乘積。
c)順序語句:將各個語句的執行時間求和即可;
d)if/else :if 中語句執行時間和else中語句執行時間較長的乙個。
演算法學習筆記(一)演算法基礎
一 資料結構和演算法的關係 資料 data 結構 structure 是一門研究組織資料方式的學科,有了程式語言也就有了資料結構.學好資料結構編寫出更加漂亮,更加有效率的 要學習好資料結構就要多多考慮如何將生活中遇到的問題,用程式去實現解決 程式 資料結構 演算法 資料結構是演算法的基礎,換言之,想...
演算法設計與分析 算法學基礎(一) 算法學概述
分類目錄 演算法設計與分析 總目錄 算法學基礎 二 分析演算法 算法學基礎 三 漸進記號 演算法定義的是計算過程,該過程取某個值或值的集合作為輸入並產生某個值或值的集合作為輸出。這樣演算法就是把輸入轉換成輸出的計算步驟的乙個序列。我們也可以把演算法看成是用於求解良說明的計算問題的工具。一般來說,問題...
演算法學習筆記(一) 概述
系統的學習演算法對乙個程式設計師是十分有必要的。mit 講授 演算法導論 的 erik demaine 教授說過 if you want to become a good programmer,you can spend 10 years programming,or spend 2 years p...