# 台大計算機概論 --- ## 資料儲存 為何二進位binary? 符合邏輯,五伏特零伏特→容錯率高unambiguous XOR 兩者為真兩者為假都為0 OR兩者為假為0 FlI p-flop正反器,可以存一個零一,有state static memory,四個結構:兩個input,set0,set1,if no input preserve 0/1,11 undefine,需要供電才能用,久了會忘, 16進位,0~9A~F,表要很熟 Memory cell→8bits=1bite,最左邊most significant最右邊least significant Random accessible (相反於循序存取)可按任意順序存取,刪除與插入會比較方便 Dynamic memory(DRAM)久了會忘因為電容過小約奈米非絕緣,refresh circuit,優點小,缺點:隨時讀取後刷新。 DDR一個時脈可以存兩次,電壓降低,耗電少,充電快。 Dual channel兩個記憶體並行 K十的三M6G9T12 大量儲存裝置:硬碟more capacity, less volatility(揮發),slower,online or offline. Flash drive 不易忘例如COM。雷射改變形狀,磁場。 硬碟Access time=seek tine探針移動時間+rotation delay轉過來的時間 Transfer rate 電路delay,SATA6 Physic/Logical record,檔案通常不連續存因為會刪除等等,硬碟 Buffer緩衝區,把分散資料整理到傳給電腦,等一段時間在把這段時間中蒐集的所有資料一次送到CPU。 Ascii→7,UNICODE 16,ISO STANDARD→32,A=65, 10進位變2進位:一直除二得到餘數得最後一位數,想十進位 影像表達法 Bit map technic: pixel Vector向量:放大不容易失真,不會鋸齒,可以記弧線 聲音表達法 Sampling:每過一段時間記一次,sample rate 隔多久記一次,beat resolution,y軸精確度。兩個相乘為每秒要記多少bits,BPS bits per second。 MIDI合成:只能記某種聲音,撥預錄檔 數字表示法binary system 減法,定義負數 2補數法two's complement 3bit表示-4~3,9=1(mold8) 令7=-1,6=-2,5=-3,4=-4,好處正的不變且加法成立且判斷正負容易,2-1=2+7=9=1 -2算法:(1)8進位,8-2=6,所以表示六,(2)右邊開始照抄到第一個一,第一個一後開始抄相反的。 EXCESS  `01234567`→-4-3-2-1,0123,好處:比大小判斷正負容易,excess+"4"(3bits的時候)=binary。 Overflow,算數出來的值無法表示。在two complement中,兩個正的相加可能變負的,兩個負的相加等於正的,因為5=-3(mold8),一正一負不會。 小數 Fixed point,0.1=1/2 ;0.01= 1/4。 Floating point 浮點數,第一位0正1負sign,二到四指數位exponent(excess),五到八假數mantissa,假數小於一大於零/ex:0001=16/1 Truncation error:浮點數記法記憶不夠,導致所記的值與實際值的差異。 Normalized form:強制規定exponent第一個數比為一,在IEEE中exponent 0101= 1.0101,但0例外.0 000 0000 =0 !=1/16 (-1)^s*1.mmmm x 2^(eee-4) 4+1/4=4(mold8) 1/4+1/4=1/2 4+1/2=9/2 數值方法:安排誰先算 0.1換成二進位換不完,所以要int float double,因為都是趨近值。 Data compression資料壓縮: Lossless非失真壓縮。run-lenghth,100個零,frequency-dependent如Huffman code,dictionary coding給常出現的某個東西命名。 LOSSY失真壓縮。影像壓縮relative/difference找相似點,temporal masking拔打的時候記他聲音就好。 傳輸方法: Huffman 畫樹狀圖,保證只有一種解,但要傳tree去 LZW方法:字典壓縮法,但不用傳字典,例如:xyx_ xyx_ xyx →1213434。看到空白把前面當成一個字存進字典。 避免傳送錯誤,加redumdancy。 error detection知道有錯但沒辦法修,可以請對方重丟,error code,Parity bits 每八個bit加一個bit檢測正確與否(讓八個加起來是奇數)。RAID,磁碟陣列,備份,大小只要1.5倍,第三個用前兩個or(一個不見可以用另外兩個推出)。 Error correcting,hamming distance 為有幾個零一不一樣的,hamming code 找到跟原本的值差多少hamming distance 最少的距離及為值。Hamming code(7,4):畫排容原理圖,可以知道哪個出錯(要傳的值放在中間四個,其他讓大圈圈補到奇數)。 ## 計算機結構 central processing unit=CPU Register 暫存器 Bus與記憶體溝通橋樑 CPU只能對暫存器工作不能對周邊裝置 Load 主記憶體到CPU Store CPU 到主記憶體 I/O CPU 對其他周邊裝置 記憶體種類 RISK指令簡單,規定大小 SISK指令複雜 暫存器種類 Pc.存運算到的位置 IR 把Pc位子裡的資料丟到這個裡面 組合式語言store,5 , A,7。把暫存器五的資料存到記憶體A7中,機器語言15A7 C語言為高階語言 Compile 將高階語言轉成機器語言 Link 將library使用在compile中 Machine cycle Fetch,decode,execute(pc++) Clock 時脈,一秒幾次cycle ALC算數運算單元 Logic Shift 1100 左移後1000補零 Arithmetic shift 第一位不變, 後面的其他數logic shift,c++用的,例如:11010000右移變11101000保留第一位因為是正負號。 Rotatation 變一個圈。 Int a=1<<7;a=10000000 Bus有屏寬限制,電壓代表01,因此一次只能少部分人丟訊息給cpu(monitor,disk,cd driver等)因此有controller會等控制等到一定數量後一起傳。SATA 硬碟的controller 協定。 Port 埠,為了簡化指令集,給一個簡單的記憶體位置紀錄某外接裝置 協定 DMA.direct memory access,外部裝置要存取資料在主記憶體,只要通知cpu一次就可以無限存了 Hands shaking 確認開始結束傳送 Pipe line(pre-fetch)技術,cycle的三個步驟平行進行,因為三個步驟不同地方執行。困難:go to,前面白抓了。用預測來優化,如for迴圈。 Parallel 平行處理,MISD, MIMD, SIMD, SISD,MISD:多個部分同時平行運行M,但只有單一來源S。SIMD一個指令加在多個資料上,向量化。因為電腦一次計算一定要64bit,若你要算的東西只要32bit可以用類似向量法一次算兩個。 Parallel vs distribute,平行會共用記憶體,分散會藉由網路連結。seti,NASA 發明的分散式,幫他計算,螢幕保護程式。 平行困難:下一行取決於上一行的值時不行。A[i]=A[i-1]*2可以變成變成奇數項與偶數項拿去*4這樣變兩倍快。 synchronization,工作分配可能不平均,算完的要等沒算完的。 reliability,分散式運算,不會因某個電腦斷線而影響整體。 照片(多核心提升的效能)scaling Cp需要跟其他裝置溝通 P最多能平行運算的比例 M全部的工作 ## 作業系統 作業系統用處:最大限度的利用你的硬體。 FIFO:first in first out。 Batch 批次處理:累積到一定量一次處理 >interactive隨時與電腦即時互動。 Real time,response time 回應的時間重要,反應時間要短如軍事與醫療。 Time-sharing&multitasking 讓使用者一次使用多個程式雖然只有一個核心。每隔一段小時間given time輪流做某件事。感覺能同時做許多事。 Multiprocessor多核: scaling Software 分成 application&OS OS分成shell(使用者能用到) &kernel Shell:如:GUI圖形使用者介面,window manager如視窗 Kernel: file manager檔案管理(檔案系統) device driver 裝置驅動程式(認得外階裝置) memory manager記憶體管理(主記憶體管理,虛擬記憶體管理~把暫時用不到的資料存到硬碟,但速度很慢)(paging技術把記憶體的資料分成一頁一頁的,把不用的頁丟到硬體)。 kernel中的kernel: scheduler 排成:維持process table、移除記憶體值、排定優先順序, dispatcher派遣:context switch把不要的存回去要的存進來(切太短會浪費時間)、執行interrupt後使cpu去執行OS SSD 固態硬碟,讀寫有次數限制。compile就是反覆讀寫。 Virtual machine: virtual box記憶體要夠大 GNU Linux特化出Android (freeware, open source).VND特化出apple. Booting (boot strapping不求人): boot loader 開機由他呼叫OS把他從硬碟拉到主記憶體read only: EEPROM :erasable 避免這個壞掉就正台電腦壞掉。 BIOS 調整booting sequence 或超頻。 Process 正在運作的程式。 Process state: 被關掉把狀態存起來直到下一次被呼叫。如:虛擬記憶體位置、變數的值。 Process table :process的內容或優先順序管理,如工作管理員。 Mutual exclusion 絕對不能同時處理的事,如共用變數。 Critical region 在執行某程式時沒有其他人能access同個程式,如寫入某程式 Semaphore: atomic test-and-set判斷跟執行間不能中斷。看到沒旗(沒人使用)就插旗,結束拔旗,看到有旗則等待。 Deadlock死結必要條件: (必要條件:要發生一定要有的條件,有條件不一定會發生) 1.競爭不可分享的資源 2.partial basis 執行的過程中會要求新的資源 3.無法強制拿回記憶體 避免方法:ㄧ,強制搶回記憶體,但可能出錯。二,不能先拿部份資源,可能永遠拿不到資源starvation, aging可以解決 等越久優先序越高。 Security, Bad habit 密碼強度不高 Auditing software 偵測惡意行為 Sniffing software 鍵盤記錄器 Virus 把自己的負載在其他黨上,不執行該受感染黨就沒事 Worm 本身可執行 Trojan horses 木馬程式,偽裝成善意程式但執行其他功能 OS能夠設定使用者權限,讓非root的程式不能接觸到所有記憶體 ## 網絡 LAN:Local area network區域網路(通常指前三個位子一樣):虛擬IP:193.168.@.@ or 10.@.@.@外面不能直接找到你 MAN:metropolitan area network有一定規模的區域網路 WAN:Wide area network Bus: 所有訊號廣播到bus上 Ring:只能知道下一家是誰 Star:所有電腦都拿到中心 Hub:通電的話bus能增強訊號 Protocols 協定 Ring上的:token ring: 拿到token的人才能發言,把token往下一家傳。token如果消失,隨即指定一個人當下一個token。 CSMA/CD:wire如果兩人同時要講話,一起忍一個隨機的時間,直到只有一個人要講話為止,再碰上就再一次。 CSMA/CA:wireless,偵測他是不是空的.等一下.再偵測一次.把錯誤機率變p^2.再錯就沒救了,等偵測錯誤重傳。 無限網路 AP: access point 兩機透過ap位子無限溝通 Wi-Fi: wireless fidelity IEEE:無限傳輸協定 網路連線工具 connecting compatibles network(前提是一樣的protocols) Repeater:把bus的訊號增強(把bus增長) Bridge:過濾訊息,要交給橋另一端的目的的訊息可過,但其他不給過,讓系統能同時處理兩個訊息 Switch:多方向的橋 Connecting incompatible network Router:連結不同的協定的網路,要拆封包重新整理,通常有無限網路。通常具有防火牆的功能,決定哪類訊息能走那條路。 P2P:當你想下載某物時你也會變成部分的伺服器,讓原始伺服器的負荷降低。 Distributes system: framework .NET Internet 最初是一個計畫 Domain 一個網址的位子,數據機 Gateway 通常是一個router ISP(Internet service provider) 如中華電信 ADSL 限制傳入跟傳出的量,讓大多數人能多下載一點 IPv4:現在在用2^32 ~> IPv6 (domain name) DNS(Domain name server)查位子在哪的機器 Host name (IP),與domain name(英文)不是一對一 VoIP: (voice over Internet protocol) 網路通話如Skype FTP: file transfer protocol Telnet: 如:Ptt ,密碼明文傳送 HTTP: hypertext transfer protocol XML:是一種HTML,純文字,一定要有開頭結尾的tag,把資料包在tag裡就能標準化,不一定要用在網頁。 Client side:javascript flash Service side:有不想讓你知道的資料 線上遊戲:圖形是client side 數據是service side Internet protocol Application layer:指定要傳的資料,目的 Transport layer:把資料切碎,封包,拼湊得到的 Network layer:傳出去,決定怎麼走(純預測) Link layer:丟資料 Port: http通常都是80 TCP/IP TCP:需要handshaking,reliable,長途通訊 UTP:不用通知,區網 ## 演算法 表示法 Flow chart流程圖,只能表示簡單的 Pseudo code 假的或不標準的程式碼,要有1assignment 2condition 3repeat 4function ,不要從零開始從一開始 解決問題方法 Top down :先分成子問題,逐一解決。 Bottom up:從下往上一個個解決 排序法 Insert sort:n=2,每次排好前n個,n++ Binary search:二分搜,top down 遞迴函數很浩時間,因為要重配記憶體。用loop取代。 費式數列應用:兔子生兔子,爬樓梯的方法。 Divide and conquer(D&C):切割成子問題逐一解決。子問題是independent 的 Dynamic programming (DP):最短路徑、矩陣乘法,子問題overlapping。 演算法效率 時間不行,因為跟機器有關係 演算法極限,重要的是當n極大時n,小時不管 Big-O: 100n=O(n^2)對,因為當n無線大時成立,100n=(n^100)也對 》 Big-omega:n極大時會比較小 》 Big-theta:又是bigO又是big-omega ,乘一個常數後會變上下界。 Best case不重要, worst case, average case. Const int I=5後面沒法改了 ## 程式語言 第一代 機器語言 第二代 組合語言 第三代 高階語言 高階語言特性 1. machine independent 所有機器都可以操作 2.非one to one mapping 3.compiler編譯,編譯第一次後記錄之。interpreter,如口譯,即時編譯,優點是能適應不同機器 程式語言formal language 重視文法 分類 1. Functional 函式導向 f(x y)->(f x y) 2. Object-orientation 如C++, informal hiding & inheritance & abstraction 3. Imperative 如C,procedural & algorithm 4. Declarative 為問題找到定義 Data structure Homogeneous 底下的東西一樣大 Heterogeneous 底下的東西不一樣大 Constant: Const int a =1 or final a =1 A constant cannot be a l- value Function 1. 記錄的是一個地址 2.有自己的local memory stack 3.函式裡頭的變數叫formal,函式呼叫的那個原本的變數叫actual Call by value 建立一個新的變數,把原變數值丟入 Call by reference 給原變數第二個名字 Call by address 給要操縱原變數大人那個變數地址 Translation process 1.Lexical analyzer :identify tokens a=b-> a = b 2.parser:建立parser tree Strongly typed: no coercion 不允許型態轉變 OOP特性(物件導向) 1.Destructor & garbage collection (自動偵測是否被其他參數引用若無則刪除) 2.Encapsulation資料封包:避免引用者用錯或更改錯誤,設定如:private. Getter & setter 3.Inheritance:? 4.concurrency:每個物件確保自己一次只被一個東西引用(插紅旗) Declarative programming 1.resolution :結合兩個邏輯敘述得到新的關係 2.unification: 用一個邏輯關係得到一個變數的值 3.conjuction normal form 一堆的邏輯關係組成的句子。clause 子句 P and not P 為空集合得到矛盾 **Prolog 某個語言** 1.第一個字大寫是變數,小寫是常數 2.fact: fast (rabbit,turtle) 3. :-表if 4.開始前打 [user].然後打事實,然後control d 5.如果有別的答案會有?按;可以繼續找下個答案 6.=代表賦值但沒有evaluation,is evaluable 的= (c裡常用) 7.term==term. Evaluable =:= evaluable 8. 建立檔案*.pl (a pure text file) double click 就會讀進去 9.listing 顯示讀入的檔案 10._底線表示所有都為true R ## 資料結構 Dynamic vs static 隨存隨取 與 不能改 靜態二元陣列給的是連續的地址 動態二元陣列,第一個一維陣列記第二個記憶體的地址 Homogeneous array 一個陣列裡元素都一樣大一樣的型態。二維陣列,用一維裡記一維,address polynomial。函式若引入陣列只是給開頭地址過去。 宣告時 `emplate <class T>` `Void swap(T &a)...` 呼叫時 `Swap<int>(a)` 》也可以用來做class Stack: first in last out Queue : first in first out (FIFO) Contiguous list: 連續儲存,取得方便,刪除或更改不方便 Linked list :一個元素除了存的值外會有記憶體指到下一個元素,最後指向null List. ->?? 變化 Dummy node:第一個位子不給值,好處是可以insert 第一個跟第二個的程式會一樣 Circular:把最後一個指到第一個 Double link list: 指向前一個跟後一個,要插最後面不用把全部走完一遍只要往回走。串連兩個list也很方便,因為也要走到最後一個。 Stack : 只有一個stack point ,應用:偵測掛號有沒有少、特殊計算機 Circular:可以加速,當front = rear時如果上一次是pop那就是空的若push就是滿的 Queue : 有兩個access point , Tree: 一個集合有很多元素,有一個最特別的叫root,每個分部都是另一個tre> 適合hierarchical 的資料 Root最上面-> children -> grandchildren -> leaves Node degree :下面有幾個分支,樹的degree所有node中最大的值 Binary tree : node小於等於2 記憶體中如果很密就用用陣列記1-1,23-2,4567-3...其他用link 》 Binary search tree (BST) In order 時左邊比你小右邊比妳大(等於) 可以做Traversal:把全部值看一次並做一件事&Search insertion deletion Big theta =log n(樹的高度)(前提是兩邊平衡) 給pre order 或post order 得到 in order Delete a degree-2:找到大於自己的最小值,把自己跟他交換,把在新位子的自己砍掉(一定非degree 2) Priority queue Binary min heap: complete binary tree最後一層外都要填滿,最後一層要靠左。用array表示。parent小於等於children. Traversal with index. Push 時,先放在最後一個位子,如果小於parent 跟他換。 Pop把第一個給出去,把最後一個拉到第一個,然後互換。 下沈時找小的換 Big theta = log n (heap search) [資料庫] Multidimensional,可以對單一dimension做處理access。 Schema 資料庫的整體設計結構 Subschema:誰可以做什麼 DBMS:應用程式access資料庫的窗口1.避免無法同步的問題2.處理disturbed database Relational database: 1.多對多的function ,column= attribute, row= tuple 2.最好分成多個relation,怎麼分分幾個很難 Operations: Select: choose row 橫 Project: choose column 直 Join : 合成 !!不同relation的attribute不同 SQL:Structure query language Insert, drop,delete, update ## 3D繪圖 平行投影:把z軸丟掉.不真,但還是會保留Z的值.為了要決定誰遮住誰 投射投影:近大遠小,似人類視覺,會失真所以會頭暈因為大腦要處理錯覺 Modeling :通常用三角,因為三點必同平面,好找法向量 Bezier: 會通過第一個點與最後一個點,但其他點對線有影響力,曲線必在多邊形內 Recursive subdivision: 一直切一半,可以趨近於曲線 Lighting : 周圍光:漫射來的、當作最弱的背景光 Directional: 理想的平行光 Point lighting : 點光源,強度與距離有關係 Shading : 1.每個面分別上色2.找法向量(單位)3.diffusion霧面:找cos內機,直射光最強4.specular鏡面: cos的x次方得到越接近反射角的線上最亮,反射光是光的顏色其他是物體的顏色 內差著色法,可以使有稜有角的東西看起來平滑,比多切三角形還有效率。 Flat shading :每個三角形一個顏色 》點的normal vector是它有碰到的邊的normal vector 的平均,得到三角形頂點的顏色。; Gouraud shading:每個點都是三角形頂點的內差 Phong shading: 得到的是三角形三頂點的normal vector, 拿向量去外積。運算量最大。 ## 人工智能 Act(think) like human(rationally) Natural language processing 語音判斷 Knowledge representation 知識學習 Automated reasoning建自己的知識架構 Machine learning Weak AI : exhibit intelligent behavior Strong A I: possess-consciousness 如: 一個老外在一間有中英對照表的房間,有behavior沒consciousness Performance oriented: 做某個動作 Simulation oriented: 像人,研究人怎麼辦到的 Image processing Edge enhancement, region finding , smoothing , hough transformation偵測線的存在 Reasoning 知道結果找到開始: Production systems: Rule, precondition, initial or goal state, control systems BFS: 寬度優先 DFS: 深度優先 Perfect information :完美資訊,全部資訊都知道 Zero sum : 一輸一贏,或平手 Heuristic: 粗估,用search但只估計,可以多search幾層 Minimax search: 給一個狀態一個分數,走分數最高或最低那步 Alpha-beta Pruning: 找到最小值就不用找其他可能,第一層先heuristic找最大或最小的開始,很容易能pruning Forward pruning: 只找合理的步往下走 水平線效應: 當heuristic值變動很大時,要繼續找因為可能下一層(搜不到的)會變很多。 Supervised監督式學習: 需要classifier分類器,可以給棋譜分數,把資料找出feature 。如:神經網路。 Unsupervised分類式: 如reinforcement learning(給每一步reward)、evolutionary(隨機產生feature,贏得留下,並產生子代) 類神經網路:neural network線性切割 Association memory: 看到甲想到乙,但觸發的東西不完全是你看到的 黑盒子最佳化: 找到一個函數能夠產出最好的y 1+1 revolution strategy: 產生亂數(常態分佈) 五分之一rule :成功機率高(超過五分之一)時應加大步伐,反之則反之 --- ###### tags: `CS`