计算机导论
一、計劃
http://study.163.com/curricula/cs.htm
計算機導論視頻
二、符號化、計算化、自動化
可用或門與門非門,并再構(gòu)建加法器等復雜電路,在繼承復雜組合的邏輯電路形成芯片。
進位制:用 數(shù)碼和 帶有權(quán)值的數(shù)位 來表示有大小關(guān)系的 數(shù)值性信息的表
示方法。
編碼:編碼是以若干位數(shù)碼或符號的不同組合來表示非數(shù)值性信息的方法,它是人為地將若干位數(shù)碼或符號的每一種組合指定一種唯一的含義。
漢字內(nèi)碼 (雙字節(jié)): 漢字在計算機內(nèi)部采用漢字內(nèi)碼存儲,漢字內(nèi)碼是一兩字節(jié)且
最高位均為1的0,1型編碼(國標碼最高位是0,但因為最高位是0則無法判斷是否是漢字編碼,所以把其改為1,區(qū)分和ASCII碼)
漢字字形碼是用0和1編碼無亮點和有亮點像素,形成漢字字形的一種編
碼。依據(jù)字形碼通過顯示器或打印機輸出漢字。
所以可用把數(shù)值和非數(shù)值信息都轉(zhuǎn)化成0和1進行表達。
所有的算術(shù)運算都可以轉(zhuǎn)化為邏輯運算
在計算機中,所有的計算過程,最終都歸結(jié)為處理器運算單元中的計算.
從軟件方面看:
所有的計算,都是數(shù)的計算.而數(shù)的計算都可以理解為數(shù)位上數(shù)字的變化.
計算機中的數(shù),都是以二進制形式存在的.對于二進制數(shù),數(shù)位上只有0和1兩個取值.
而0和1的任何變化,都可以用邏輯代數(shù)中的運算——邏輯運算——來實現(xiàn).
從硬件方面看:
計算機中,所有數(shù)據(jù)的計算過程都是通過門電路實現(xiàn)的.
而所有的門電路,都可以通過最基本的與門、或門、非門組合而成.
顯然,與、或、非門所實現(xiàn)的就是最基本的邏輯運算.
當然,計算機是軟件和硬件的統(tǒng)一體,它們在邏輯功能上,是,也必須是等價的.
加減乘除都可轉(zhuǎn)換成加法來實現(xiàn)(使用補碼實現(xiàn)), 加法又可由與、或、非、異或等邏輯運算來實現(xiàn)—只要實現(xiàn)了基本邏輯運算,便可實現(xiàn)任何的計算
實現(xiàn)0 和1 的基本元器件: 電信號和繼電器開關(guān)
用繼電器開關(guān)實現(xiàn)基本邏輯運算
二極管、三極管可實現(xiàn)基本的集成電路: 與門、或門和非門
這些電路被封裝成集成電路(芯片),即所謂的門電路。
? 異或門電路(XOR) :是實現(xiàn)邏輯異或運算的集成電路,即:當兩個輸入端
同為高電平(1)或同為低電平(0)時,則輸出端為低電平(0);否則,輸出端為高電平(1)。
三、馮諾依曼計算機
程序是如何被執(zhí)行的?
算法程序化 --程序指令化–指令存儲化–執(zhí)行信號化
程序可以看成是存儲在存儲器的一條條指令,是程序化的算法,具體的指令都對應(yīng)一個地址,由控制器發(fā)送指令地址在存儲器中讀取分析指令,并根據(jù)指令內(nèi)容調(diào)用數(shù)據(jù),最后由控制器發(fā)送到運算器運算,獲得結(jié)果。緊接著執(zhí)行之后的指令。
CPU :中央處理單元(Central Process Unit)****,將運算器和控制器集成在一塊芯片上,形成微處理器。
CPU :程序執(zhí)行與數(shù)據(jù)計算
主存儲器(內(nèi)存):程序與數(shù)據(jù)保存、I/O 設(shè)備、總線成為現(xiàn)代計算機的四大核心部件。
機器指令**:**
CPU可以直接分析并執(zhí)行的指令,一般由0和1的編碼表示。
指令 =操作碼 + 地址碼(相當于java的變量名和變量值)(對/對象)
操作碼:000001取數(shù) 000010 存數(shù) 000011加法 000100乘法。。。
高級語言程序和機器有什么關(guān)系呢?
int a,a=2其中a是變量。變量的地址是由編譯程序在編譯過程中自動分配的。
運算器
(數(shù)據(jù))寄存器
算數(shù)邏輯部分
控制器
? pc程序計數(shù)器(自動+1):存儲下一要執(zhí)行指令的地址
ir指令寄存器:臨時存儲當年指令內(nèi)容
信號與時鐘發(fā)生器:生成信號,即是機器主頻
信號控制器:發(fā)送信號,發(fā)送給誰
內(nèi)存
存儲單元地址(地址寄存器)
? 存儲單元內(nèi)容(內(nèi)容寄存器)
內(nèi)存主體
機器周期一條指令完整執(zhí)行的時間為,一個機器周期又分為多個節(jié)拍
時鐘周期–最小的時間區(qū)隔單位
圖靈機計算思想
計算就是用0或1對一串0或1進行變換的過程
(水平紙帶看成數(shù)據(jù),垂直方向可以指令(00停止,11前進。。。)組合起來的程序)
四、現(xiàn)代計算機
基本思路
存儲體系**-磁盤存取-**操作系統(tǒng) **-作業(yè)與進程-**程序執(zhí)行的管理與控制;
資源組合利用體系化:外存內(nèi)存不同系能資源的折中同一
管理分工合作協(xié)同化:不同環(huán)境不同部分,分工管理,再通過協(xié)同合力解決問題
外存程序內(nèi)存進程化:外存中的程序文件裝入到內(nèi)存中成為進程(可有多個)
硬件不足功能軟件化:操作系統(tǒng)彌補硬件的性能不足,替用戶管理資源。
內(nèi)存外存
馮. 諾依曼計算機解決了: 程序裝載在內(nèi)存,便可被CPU
但是還有存儲問題,包括永久存儲,容量、速度、價格
內(nèi)存(RAM、ROM一般有半導體制作,電易失性):按地址訪問,有一個個存儲單元(1-8個字節(jié)),給出一個個地址編碼后找到對應(yīng)的存儲單元。
外存(硬盤,一般由磁性材料做成,可永久保存):由很多盤片組成,然后是刺刀,最后分為若干扇區(qū),一個扇區(qū)(512字節(jié))
存儲體系:
不同性能資源的組合優(yōu)化———需要一個資源管理者——操作系統(tǒng)
內(nèi)存:速度快、價格高、容量小、非永久存儲; 按存儲單元
外存:速度慢、價格低、容量大、永久保存; 按塊交換
所有內(nèi)容需裝入內(nèi)存,才能被處理
所有內(nèi)容需存入外存,才能永久保存
用空間換時間
看起來有內(nèi)存的速度和外存的容量
操作系統(tǒng)**(Operating System:OS)**
是控制和管理計算機系統(tǒng)各種資源是控制和管理計算機系統(tǒng)各種資源( 硬件資源、軟件資源和信息資源)、合理組織計算機系統(tǒng)工作流程、提供用戶與計算機之間接口以解釋用戶對機器的各種操作需求并完成這些操作的一組程序集合,是最基本、最重要的系統(tǒng)軟件。
操作系統(tǒng)的作用:
操作系統(tǒng)是用戶與計算機硬件之間的接口。
操作系統(tǒng)為用戶提供了虛擬機(Virtual Machine) 。
操作系統(tǒng)是計算機系統(tǒng)的資源管理者
在硬件外包一層操作系統(tǒng),硬件形態(tài)的計算機,加上操作系統(tǒng)有了軟件形態(tài)的計算機即是虛擬機。
操作系統(tǒng)是一組“管理各種資源以便執(zhí)行應(yīng)用程序”的程序:
1、分工
2、合作
以任務(wù)為驅(qū)動,中心任務(wù)就是“讓計算機或者說****CPU 執(zhí)行存儲在外存上的程序”,各部件合作完成該任務(wù)。
3、協(xié)同
當基本解決后,關(guān)鍵就是協(xié)同,“合作”和“同步” , “自動化”及 “最優(yōu)化”。
**A磁盤管理—**管理磁盤信息的讀寫
化整為零(磁盤塊),還零為整
磁盤:一個磁盤塊=若干扇區(qū)(隨系統(tǒng)不同有差異2次方及更高);
文件:分解為若干磁盤塊,單存入磁盤后并不是連續(xù)的(那樣占有空間,實際類似劍鋒插針,每個磁盤塊含有下一塊的位置(表xiang),有點像鏈表。第一個磁盤塊位置在哪兒?文件夾是文件的清單,在文件背后記錄了第一個磁盤塊的位置。);
再配以文件分配表,進行讀寫
磁盤的四個主要分區(qū):
保留扇區(qū)
文件分配表區(qū)域
根目錄區(qū)域
數(shù)據(jù)區(qū)域
**B內(nèi)存管理—**管理內(nèi)存空間的分配與回收;
內(nèi)存被分成不同的塊/頁,一般內(nèi)存的一頁和磁盤的一塊相等或為其倍數(shù)。
內(nèi)存空間管理
內(nèi)存空間分配
內(nèi)外存信息的自動交換
內(nèi)存空間的回收
C 、CPU 管理— 調(diào)度CPU執(zhí)行哪一個程序;
1)內(nèi)存中待執(zhí)行的程序段落地址發(fā)送到控制器的計數(shù)器;
2)確定執(zhí)行哪個程序
3)程序切換中的狀態(tài)/環(huán)境 保護問題
操作系統(tǒng)如何提高資源利用率?
分時:
一臺主機一個cpu,操作系統(tǒng)把cpu分為不同時間分區(qū),使其在不同分區(qū)執(zhí)行不同程序(片段充分小),讓每個終端看起來都在獨占cpu;
并行:OS將作業(yè)分為若干小作業(yè),并由不同cpu執(zhí)行(多核),如此多個cpu并行完成一個作業(yè);
分布:網(wǎng)絡(luò)中多臺主機多個cpu執(zhí)行一個任務(wù)(通過網(wǎng)絡(luò)傳輸)
合作協(xié)同:
1、幾個區(qū)分的概念
程序(文件):存儲在外存的程序文件
進程:裝入內(nèi)存的程序
任務(wù):大粒度的工作,一個應(yīng)用程序的完整執(zhí)行,有多進程完成
作業(yè):小粒度工作,不同作業(yè)由不同進程完成
操作系統(tǒng)進程:其進程也在內(nèi)存中,需要cpu調(diào)度,cpu在操作系統(tǒng)和多個應(yīng)用進程減來回切換。
應(yīng)用程序的進程:應(yīng)用本身的進程,在操作系統(tǒng)控制下
合作協(xié)同進程
相當于調(diào)度,調(diào)配其他OS進程執(zhí)行相應(yīng)的作業(yè)
通用計算環(huán)境的演化:
馮諾伊曼計算機——個人計算機——并行分布計算環(huán)境——云計算環(huán)境
云
物理機:數(shù)百數(shù)千個64G內(nèi)存;
數(shù)百數(shù)千個1T外存
虛擬化的OS
根據(jù)不同需要配置虛擬機:(cpu、內(nèi)外存、網(wǎng)絡(luò)帶寬)
云操作系統(tǒng):跨物理機管理
把計算機看做一種服務(wù)設(shè)施提供用戶,用戶按租用時間進行付費
SAAS(software as service):將應(yīng)用軟件以可配置科技非的服務(wù)方式提供給用戶使用;
賣軟件和賣服務(wù) 用戶通過互聯(lián)網(wǎng)使用云上的軟件(可添加監(jiān)控和結(jié)算)
五、機器語言到高級語言
高級語言除了語法外的共性
常量:
變量:通過賦值語句把表達式的值保存
保留字(關(guān)鍵字,運算符)
表達式:
算術(shù)表達式:由常量、變量、數(shù)學運算符組成,結(jié)果是數(shù)值
比較表達式:比較運算符,結(jié)果是真假
邏輯表達式:邏輯運算符,結(jié)果是真假
語句:
賦值語句:將表達式的結(jié)果賦給一個變量;
結(jié)構(gòu):順序、分支、循環(huán)(有界循環(huán)(for),條件循環(huán)(while));
函數(shù)**:**函數(shù)是一種抽象,用一個名字代表一個程序段落
函數(shù)的定義:數(shù)學的函數(shù)是一個符號表達而計算機是指一段可執(zhí)行的程序。
函數(shù)的調(diào)用:
函數(shù)體,實現(xiàn)函數(shù)功能的程序語句序列以形式參數(shù)作為需要處理的對象。當被調(diào)用時,用實際參數(shù)替換相應(yīng)的形式參數(shù)進行程序執(zhí)行。
運用函數(shù)構(gòu)造復雜程序
程序構(gòu)造:自上而下、自下而上
計算機語言:步驟書寫的規(guī)范、語法規(guī)則、標準的集合是人和計算機都能理解的語言
算法:解決問題的步驟
程序:計算機能夠理解與執(zhí)行的解決問題的步驟
指令系統(tǒng): CPU用二進制和編碼提供的可以解釋并執(zhí)行的命令的集合。
機器語言:用二進制和編碼方式提供的指令系統(tǒng)所編寫程序的語言被稱為機器語言
所有程序都需轉(zhuǎn)換成機器語言程序,計算機才能執(zhí)行
缺點:難以看懂,且書寫容易出錯
匯編語言:
人們提供用助記符編寫程序的規(guī)范/標準。(匯編語言)
同時開發(fā)了一個 翻譯程序,(匯編程序)
實現(xiàn)了將符號程序自動轉(zhuǎn)換成機器語言程序的功能。
匯編語言源程序:是用匯編語言編出的程序。
缺點:需考慮機器內(nèi)部結(jié)構(gòu)和指令系統(tǒng),較難
高級語言:
人們提供了 類似于自然語言方式、 以語句為單位書寫程序的規(guī)范/標準語句為單位書寫程序的規(guī)范/標準。并開發(fā)了一個翻譯程序翻譯程序(類似于匯編語言的匯編程序),實現(xiàn)了將語句程序 自動翻譯成機器語言程序的功能。
比較**😗*
高級語言 :
機器無關(guān)性;一條高級語言語句往往可由若干條機器語言語句實現(xiàn)且不具有對應(yīng)性
(一般很難直接編譯成機器語言,需借助中間語言如匯編語言,再翻譯成機器語言)。
匯編語言 :
? 機器相關(guān)性;匯編語言語句和機器語言語句有對應(yīng)性
匯編器已有,制作編譯即可。體現(xiàn)著集成封裝的思想。
遞歸和迭代
遞歸:由后向前帶入,有高階(n)帶入低階(n-1),只到遞歸基礎(chǔ)里獲得了值,再帶入值向后計算。
迭代:用新計算的值替換原來的值,并重復執(zhí)行
構(gòu)造程序的構(gòu)造方式:
傳統(tǒng)程序構(gòu)造及其表達方法-程序不是編的,是構(gòu)造出來的
—由粗到細(top-down)
為控制復雜性,先以函數(shù)來代替瑣碎的細節(jié),著重考慮函數(shù)之間的關(guān)系,以及如何解決問題
—由細到粗(bottom-up)
首先編寫一些基礎(chǔ)性的函數(shù),并確定其正確后,再處理上一層次的問題。
程序開發(fā)環(huán)境:
編輯(編輯器例如java和eclipse)、編譯、連接、調(diào)試、運行一體化平臺
編譯器:
1)由具體的運算式到模式運算
2)將簡單模式轉(zhuǎn)換成匯編語言語句序列,用常量值和變量地址進行替換,組合次序調(diào)整,得到最后的匯編語言程序。
計算機語言發(fā)展
新的語言**/**程序
類自然語言
圖形化語言
積木塊編程
智能化
(面向各專業(yè)專業(yè)化)
解釋語言和編譯語言
編譯器翻譯的方式有兩種:一個是編譯,一個是解釋。兩種方式之間的區(qū)別在于翻譯時間點的不同。當編譯器以解釋方式運行的時候,也稱之為解釋器。
編譯型語言:把做好的源程序全部編譯成二進制代碼的可運行程序。然后,可直接運行這個程序。 執(zhí)行速度快、效率高;依靠編譯器、跨平臺性差些。
解釋型語言:把做好的源程序翻譯一句,然后執(zhí)行一句,直至結(jié)束!
編譯型由于程序執(zhí)行速度快,同等條件下對系統(tǒng)要求較低,因此像開發(fā)操作系統(tǒng)、大型應(yīng)用程序、數(shù)據(jù)庫系統(tǒng)等時都采用它,像C/C++、Pascal/ObjectPascal(Delphi)等
解釋性一些網(wǎng)頁腳本、服務(wù)器腳本及輔助開發(fā)接口這樣的對速度要求不高、對不同系統(tǒng)平臺間的兼容性有一定要求的程序則通常使用解釋性語言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB等等。
但隨著硬件的升級和設(shè)計思想的變革,編譯型和解釋型語言越來越籠統(tǒng)。例如JAVA
一、你可以說它是編譯型的。因為所有的Java代碼都是要編譯的,.java不經(jīng)過編譯就什么用都沒有。
二、你可以說它是解釋型的。因為java代碼編譯后不能直接運行,它是解釋運行在JVM上的,所以它是解釋運行的,那也就算是解釋的了。
六、程序與遞歸:組合**-** 抽象**-** 構(gòu)造
1**、抽象:一個命名的過程**
將低層次系統(tǒng)實現(xiàn)的一些復雜動作進行命名命名,用該名字(封裝)作為高層次系統(tǒng)的指令被使用。
2**、命名對象**
A****命名計算對象 和構(gòu)造中使用名字 及 計算中以計算對象替換名字
(define height 2) (+ 100205)
前綴表示法:用運算符 ( 即前述的指令 )。將兩個數(shù)值組合起來,運算符在前面
B****命名新運算符(即定義函數(shù))
? 上述AB多重組合(一個構(gòu)造帶入到另一個構(gòu)造中)實現(xiàn)復雜函數(shù)(方法)
注意:不同類型的對象可以有不同的定義方法。這里統(tǒng)一用 define來表示,在具體的程序設(shè)計語言中是用不同的方法來定義的。
3**、含名字的運算組合式的計算方法**
A**:求值、代入、計算**
B**:代入、求值、計算(正則表達式)**
**構(gòu)造:**遞歸迭代
遞歸就是在過程或函數(shù)里面調(diào)用自身;在使用遞歸時,必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口。
遞歸分為兩個階段:
1)遞推:把復雜的問題的求解推到比原問題簡單一些的問題的求解;
2)回歸:當獲得最簡單的情況后,逐步返回,依次得到復雜的解.
迭代:利用變量的原值推算出變量的一個新值.如果遞歸是自己調(diào)用自己的話,迭代就是A不停的調(diào)用B.
(迭:重復多次,代:取代之前)
| 遞歸 | 程序調(diào)用自身的編程技巧稱為遞歸 | 1)大問題化為小問題,可以極大的減少代碼量;2)用有限的語句來定義對象的無限集合.;3)代碼更簡潔清晰,可讀性更好 | 1)遞歸調(diào)用函數(shù),浪費空間;2)遞歸太深容易造成堆棧的溢出; (在到達遞歸基礎(chǔ)后才逐一釋放) |
| 迭代 | 利用變量的原值推算出變量的一個新值,迭代就是A不停的調(diào)用B. | 1)迭代效率高,運行時間只因循環(huán)次數(shù)增加而增加;2)沒什么額外開銷,空間上也沒有什么增加, | 1) 不容易理解;2) 代碼不如遞歸簡潔;3) 編寫復雜問題時困難。 |
| 二者關(guān)系 | 1) 遞歸中一定有迭代,但是迭代中不一定有遞歸,大部分可以相互轉(zhuǎn)換。2) 能用迭代的不用遞歸,遞歸調(diào)用函數(shù),浪費空間,并且遞歸太深容易造成堆棧的溢出./相對/ |
數(shù)學中的遞推式
? 一個數(shù)列的第n 項a n 與該數(shù)列的其他一項或多項之間存在某種對應(yīng)關(guān)系,被表達為一種公式,稱為遞推式。
?遞推基礎(chǔ) ; 第1 項( 或前K 項) 的值是已知的—
?遞推規(guī)則/ 遞推步驟 ;由第n 項或前n 項計算第n+1 項—
?由前向后,可依次計算每一項
遞歸 是一種表達相似性對象及動作的無限性構(gòu)造和執(zhí)行的方法。
? 遞歸基礎(chǔ) :定義、構(gòu)造和計算的起點,直接給出;
? 遞歸步驟 :由前n項或第n項定義第n+1項;由低階f(k)且k<n,來構(gòu)造高階f(n+1)。
遞歸是一種算法或程序的構(gòu)造技術(shù)—自身調(diào)用自身,高階調(diào)用低階,構(gòu)造無限的計算步驟。
遞歸是一種典型的計算/執(zhí)行過程— 由后向前代入,直至代入到遞歸基礎(chǔ),再由遞歸基礎(chǔ)向后計算直至計算出最終結(jié)果,即由前向后計算。
遞歸:
int fib(intn)
{
if (n == 1 || n == 2)return 1;
else return fib(n - 1) + fib(n - 2);
}
迭代(遞推)****:
int fib2(int n)
{
int f, g;
g = 0;
f = 1;
while (–n)
{
f = f + g;
g = f - g;
}
return f;
}
梵天塔又名漢諾塔2n-1
七、算法
算法 — 計算機與軟件的靈魂
數(shù)學建模是用數(shù)學語言描述實際現(xiàn)象的過程,即建立數(shù)學模型的過程 。
遍歷算法:列出每一條可供選擇的路線,計算出每條路線的總里程,從中選出一條最短的路線。
貪心算法一定要做當前情況下的最好選擇,否則將來可能會后悔,故名“貪心”。
最優(yōu)解 vs. 可行解
算法設(shè)計
數(shù)據(jù)結(jié)構(gòu)設(shè)計:將數(shù)學模型中的數(shù)據(jù)轉(zhuǎn)為計算機可以存儲和處理的數(shù)據(jù)
控制結(jié)構(gòu)設(shè)計:構(gòu)造和表達處理的規(guī)則,以便能夠按規(guī)則逐步計算出結(jié)果
數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)及其操作的總稱,
它提供了問題求解/ 算法的數(shù)據(jù)操縱機制。
“樹”的存儲結(jié)構(gòu) :
A一個存儲單元存儲“數(shù)據(jù)元素” ;一個存儲單元存儲“指針”,指示數(shù)據(jù)元素之間的邏輯關(guān)系.
B用兩個指針表達數(shù)據(jù)之間的邏輯關(guān)系,一個指向其左數(shù)據(jù)元素,一個指向其右數(shù)據(jù)元素。
存儲結(jié)構(gòu)中,通過指針的變化, 不改變數(shù)據(jù)元素的存儲, 但改變了數(shù)據(jù)元素之間的邏輯關(guān)系
指針和引用
從實現(xiàn)上來講,引用可以理解為一種受限的指針,引用底層可以采用指針來實現(xiàn),也可以采用句柄的方式實現(xiàn)。早期jvm一般采用句柄的方式,現(xiàn)在的jvm,比如sun的,IBM的,一般就是用指針來實現(xiàn)。
不過從語言的角度來將,沒有必要把java的引用和C的指針來比較。
指針是可以進行與整數(shù)做加減運算的,兩個指針之間也可以進行大小比較運算和相減運算。
引用不行,只能進行賦值運算。
多元素變量及其存儲
? 向量或 列表 是有序數(shù)據(jù)的集合型變量,向量中的每一個元素都屬于同一個數(shù)據(jù)類型,用一個統(tǒng)一的向量名和下標來唯一的確定向量中的元素。在程序設(shè)計語言中,又稱為 數(shù)組 。
? 向量名通常表示該向量的起始存儲地址,而向量下標表示所指向元素相對于起始存儲地址的偏移位置。
算法與程序構(gòu)造的表達方法:
1、程序流程圖
? 矩形框:一組順序執(zhí)行的規(guī)則或者程序語句。
? 菱形框:條件判斷
? 圓形框:算法或程序的開始或結(jié)束。
? 箭頭線:算法或程序的走向。
2、步驟描述法
用人們?nèi)粘J褂玫恼Z言和數(shù)學語言描述算法的步驟。
自然語言表示的算法容易出現(xiàn)二義性、不確定性等問題
算法的實現(xiàn)
程序 是算法的一種機器相容(Compatible)的表示,是利用計算機程序設(shè)計語言對算法
描述的結(jié)果,是可以在計算機上執(zhí)行的算法。
計算機解決一個具體問題時,大致需要經(jīng)過下列幾個步驟:首先要從具體問題中抽象出一個適當?shù)?strong>數(shù)學模型,然后設(shè)計一個解此數(shù)學模型的算法(Algorithm),最后編出程序、進行測試、調(diào)整直至得到最終解答。尋求數(shù)學模型的實質(zhì)是分析問題,從中提取操作的對象,并找出這些操作對象之間含有的關(guān)系,然后用數(shù)學的語言加以描述。
數(shù)據(jù)結(jié)構(gòu)直接關(guān)系到算法的選擇和效率。**運算是由計算機來完成,這就要設(shè)計相應(yīng)的插入、刪除和修改的算法。也就是說,數(shù)據(jù)結(jié)構(gòu)還需要給出每種結(jié)構(gòu)類型所定義的各種運算的算法。
算法的效果評價:
算法的輸出是最優(yōu)解還是可行解?如果是可行解,與最優(yōu)解的偏差多大
證明方法:利用數(shù)學方法證明;
A仿真分析方法:產(chǎn)生或選取大量的、具有代表性的問題實例,利用該算法對這些問題
B實例進行求解,并對算法產(chǎn)生的結(jié)果進行統(tǒng)計分析。
算法的效率:時間效率和空間效率
時間復雜性 : 如果一個問題的規(guī)模是n,解這一問題的某一算法所需要的時間為T(n),它
是n的某一函數(shù),T(n)稱為這一算法的“時間復雜性”。
“ 大****O 記法” :
?基本參數(shù) n——問題實例的規(guī)模,把復雜性或運行時間表達為n的函數(shù)。
?“O”表示量級 (order),允許使用“=”代替“≈”,如n 2 +n+1=Ο(n 2 ) 。
說明事件復雜性更關(guān)注循環(huán)的層數(shù)(n2**)**
難解性問題
?當算法的時間復雜度的表示函數(shù)是一個多項式時,如 O(n 2 ) 時,則計算機對于大規(guī)模問題是可以處理的,即可解的。例如,TSP問題的貪心算法 O(n 3 ) 。
?當問題的計算時間復雜度是用指數(shù)函數(shù)表示時,如 O(2 n ) 或階乘函數(shù)時,如 O( n! ), 當n很大(如10000)時計算機是無法處理的,在計算復雜性中將這一類問題稱為難解性問題 。例如TSP問題。
算法的空間復雜度:算法在執(zhí)行過程中所占存儲空間的大小
P 類問題:多項式問題(Polynomial Problem),可求解問題
所有可以在多項式時間內(nèi)求解的問題?
NP 類問題,非確定性多項式問題(Non-deterministic Polynomial) P?NP。
計算機在有限時間內(nèi)不能求解的( 難求解問題),在多項式時間內(nèi)可以由
一個算法驗證一個解是否正確的非確定性問題。(能驗證)
NPC NPC?NP
NP問題的所有可能答案都可以在多項式時間內(nèi)進行正確與否的驗算
完全不可計算問題:計算機完全不能求解的
近似解、精確解、滿意解。用精度換時間
八、遺傳算法
ppt-8-26
導向性群**(** 體**)** 隨機搜索法**(根據(jù)上面解法優(yōu)化)**
? 基于概率論:隨機選擇
?多條路徑下的最優(yōu),總比一條路徑的最優(yōu)要更優(yōu)一些。多條路徑下的最優(yōu),總比一條路徑
的最優(yōu)要更優(yōu)一些。
?遺傳算法就是這樣一種導向性群隨機搜索算法。遺傳算法就是這樣一種導向性群隨機搜索算法。
?同一時刻多條路徑上的解集合即為一個種群。多次選擇,即多代進
遺傳算法提供了一種求解復雜系統(tǒng)問題的通用框架。
九、計算機科學技術(shù)
十、指針和引用
在計算機科學中,指針(Pointer)是編程語言中的一個對象,利用地址,它的值直接指向(points to)存在電腦存儲器中另一個地方的值。指針的機制比較簡單,其功能可以被集中重新實現(xiàn)成更抽象化的引用(reference)數(shù)據(jù)形別。
指針作為實體,是一個用來保存一個內(nèi)存地址的計算機語言中的變量。
指針作為數(shù)據(jù)類型,可以從一個函數(shù)類型、一個對象類型或者一個不完備類型中導出。
C++標準規(guī)定,指針分為兩類:
function pointer type:指代一個函數(shù)
object pointer type:指向void或?qū)ο箢愋?#xff0c;表示對象在內(nèi)存中的字節(jié)地址或空指針。
★ 相同點:
\1. 都是地址的概念;
指針指向一塊內(nèi)存,它的內(nèi)容是所指內(nèi)存的地址;引用是某塊內(nèi)存的別名。
★ 區(qū)別:
\1. 指針是一個實體,而引用僅是個別名;
\2. 引用使用時無需解引用(*),指針需要解引用;
總結(jié)
- 上一篇: 机器学习之线性回归缩减维度
- 下一篇: 上网行为管理(使用软件Panabit)