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