- 如何評斷演算法表現
- 會受機器等其他因素影響
- 計算執行時間
- 執行的數量
- 相關指標
- Big-O
- f(n) 屬於 O(g(n)) f(n) upper bound 不會超過 big O
- 指數為n總是比多項式為n來的大 ex.n100次方 屬於(=) O(2n次方) computer science在這裡常把屬於寫成=
- 只在意n極大時的是否能bound住
- 不在意n小的時候的表現? n如何算小該如何定義? n很大的時候Big-O仍然比f(n)表現好嗎?
- Big-Omega
- f(n) 屬於 O(g(n)) f(n) lower bound 不會超過 big Omega
- Big-Theta
- f(n)既是Big-O又是Big-Omega
- Big-O
- 主要先抓三種情境 best、worst、average
- 因為表現會被輸入資料影響所以才需區分情境
- 分析通常最重視 average 有時為了預期最壞的情況會注意worst比較少注意 best的情境
- 演算法主要issue
- 運算結果正確
- 效能
- loop須注意三個屬性
- precoditions
- 進入前的狀況
- loop invariants
- 在loop中不會改變
- Termination condition
- 最後停止loop的條件
2017年9月9日 星期六
[公開課閒聊] 計算機概論第十一講 Algorithm - 台大 于天立
Ped隨手摘
2017年6月18日 星期日
[公開課閒聊] 計算機概論第十講 Algorithm - 台大 于天立
Ped隨手摘
- 演算法表示法
- Flowchart (流程圖)
- 太複雜的演算法用流程圖難以表達需要靠自己簡化
- Pseudocode (P不發音) 虛擬碼
- 介於自然語言和程式語言之前,不用嚴謹的語法,主要用來表達想法
- Flowchart (流程圖)
- 問題解決
- 分析、了解問題後才有辦法去提出並執行解決計畫,最後再去評估這個解法是否正確與能否用以解其他問題
- 老師特別強調分析問題
- 通常需要 top-down 和 bottom-up 並行
- 迴圈
- 包含三個必要部分
- 迴圈進行前的初始化
- 測試條件是否符合繼續的條件
- 更改某參數以確定迴圈會結束
- 包含三個必要部分
- 插入排序法 未排序資料一次一個, 跟排序好的新陣列中每個值比較,比未排序大的值往下移一個位置,最後會多一個洞放置新資料
- 二分搜尋法 先拿中間值和目標值比較,較大的話只要搜尋下半部,較小則搜尋上半部,可節省搜尋時間
- 遞迴
- 終止條件需寫在最前面
- 由於遞迴會不斷呼叫自己,迴圈的速度會比遞迴快很多,如果可以用迴圈解的話可以考慮使用迴圈
- 演算法重要技巧
- divide and conquer (D&C)
- 先把問題切分成需多子問題,再一個個解決,二分搜尋法即是此種方式
- 每個子問題是獨立的,並不會互相影相
- top down
- dynamic programming (DP)
- 一樣會先切分許多子問題,各子問題間的結果會互相影響,並產生最後的結果,最短路徑問題即可用此方式解
- bottom up
2017年6月13日 星期二
[公開課閒聊] 計算機概論第九講 Internet - 台大 于天立
Ped隨手摘
- XML 現在的瀏覽器大多可以解讀
- 伺服器與客戶端
- 通常圖形運算多在客戶端、資料運算則較多在伺服器端
- 客戶端
- Java applets、Flash 需要先安裝
- Javascripts
- 伺服器端
- CGI、Servlets(jsp、asp)、PHP
- Internet協定
- 最簡單的四層
- application 建立訊息並指定要傳送至哪個地址
- Transport 將訊息切分成許多封包,並在接收時負責將封包組合回原訊息
- Network 決定要從哪甚麼路線傳送,接收封包後確認本身是否為目的地,不然繼續往下傳送
- Link 實作傳送與接收封包
- OSI有更細的七層分別(由此四層再分更細)
- 藉由 port 區分傳送來的資料避免丟錯應用程式
- TCP/IP
- Transport Layer
- TCP(transmission control protocol) 先做一次握手再傳送,適合遠端傳送
- UDP(user datagram protocol) 不確認對方是否想收到或是否收到訊息,直接傳送,速度較快,但較不可靠
- Network Layer
- routing 決定為 ip
- TCP/IP 指的是一整個套件而非兩種通訊協定
- Transport Layer
- 安全性
- 攻擊與防護
- Malware 釣魚攻擊 偽裝成被使用者信任的來源騙取密碼或植入惡意程式
- Denial of service (Dos) 阻斷式攻擊 主要靠防火牆擋ip防堵
- Spam 垃圾信件
- 可以透過可信任的VPN或是proxy連線
- 攻擊與防護
- 公私鑰加密架構
- SSL (secure socket layer) 可套用在各種通訊上 ex.sftp、https、ssh
- 互為反函數:A加密B能解密,B加密A能解密
- 傳送訊息時用傳送方用接收方的 public key 加密;接收方再用接收方的 private key 解密
- 數位簽章用以確認是對的人傳送的
- A先用自己的private加密再用B的public加密;B用自己的private key 解密再用A的public key解密就能確認訊息真的是A傳送的
- 被信任的第三方 Certificate authority(CA) 簽署過較能確定傳送方 public key 的正確性
- 非對稱性加密演算法現在常用 RSA
- 申請憑證流程:(Ped補充)
- 申請方會先把 public key 和網站基本資料放進CSR(certificate signing request)
- CA 將public key簽署完後會核發 ceriticate 給申請方
- 申請方將 ceriticate 作為SSL 的 public key 使用
- 瀏覽器中會預裝CA的public key通過認証後瀏覽器就會使用此public key加密
2017年6月4日 星期日
[公開課閒聊] 計算機概論第八講 Network & Internet - 台大 于天立
Ped隨手摘
- Scope
- LAN 區域網路 通常會配發虛擬 ip 外界傳輸無法直接傳輸至此ip 需傳輸給 router後再透過他配送訊息
- MAN 大型區域網路
- WAN 整個外部網路
- Topology
- 連線型態目前最流行的是 Bus 例如利用 hub 連線的方式,傳出的訊號會廣播給所有的人
- 不同 topology 通常會有不同協定
- 協定
- 協定規定好後並無強制力
- token ring
- 取得 token 的機器才能發言
- 只能把訊息與token往同一方向 傳遞
- CSMA/CD
- 有線網路使用,發現兩個機器同時要傳輸時會產生一隨機等待時間
- CSMA/CA
- 無線網路使用,偵測到有空的頻道時等待隨機等待時間後再傳輸能夠減少同時間傳輸的機率
- 發生碰撞時就重新傳輸
- 無線 ap (access point)
- 無線傳輸都是和ap溝通
- 無線網路標準 IEEE 802.11 (b, g, i, n, ac, ....)
- 連接網路的機器
- 以下三個機器不處理協定的轉換
- repeater
- 會把訊號增強
- 會將訊號廣播給所有連接中的電腦
- 僅能連接兩個分區
- bridge
- 類似repeater 但廣播時會分區廣播
- 僅能連接兩個分區
- switch
- 類似 bridge但可連接兩個以上分區
- router
- 能夠處理不同協定間的傳輸
- 通常也包含防火牆的功能
- 溝通模式
- server-client
- 網頁伺服器與瀏覽器
- 郵件伺服器
- p2p (peer-to-peer)
- server-client
- distributed systems 可以透過網路連接 可利用 .NET 等framwork 操作
- Internet
- ICANN 負責管理domain,其會將domain管理權下放給各個 registrar
- 利用 gateway (通常是router) 與外界連結
- ip 透過 ISP(Internet service provider) 配發
- domain name 透過 DNS (domain name server) 可查詢對應的 ip
2017年6月3日 星期六
[公開課閒聊] 計算機概論第七講 Operating systems - 台大 于天立
Ped隨手摘
- scheduler 排程
- 管理 process table
- 加入新程序
- 移除新程序
- 決定哪些程序是 ready 那些是 waiting
- 管理 process table
- dispatcher 分派
- 執行程式
- 利用中斷的方式去切換不同程序的執行
- process switch 會讓系統看似一次可以同時處理很多 process 但如果資源實在太不足反而會因為 process switch 浪費過多時間
- 執行程式
- critical region
- 當有檔案進入 critical region 時其他程式無法對該檔案同時進行寫入也無法中斷
- 造成 deadlock 的必要條件
- 競爭無法分享的資源 ex.需要寫入同一個檔案
- 逐次要求部分所需資源 ex.一開始需要100bytes 寫完檔案後再要100bytes
- 將資源分配出去後卻無法強制討回
- 解決deadlock 如果強制拿走某個程序的資源容易遇到 starvation 的問題
- starvation 新的程序又繼續拿走資源導致某個程序永不被執行
- 其中一個解決方法是 aging 一直拿不到資源時優先權會提高
- 安全性
- 避免不安全密碼、壞習慣
- 利用偵測軟體紀錄並分析怪異行為
- 威脅來源
- 病毒 把自己的程式碼依附在其他的可執行檔上
- 蠕蟲 能夠自行複製傳播
- 木馬 偽裝成其他程式背後多做了非預期的惡意行為
- 權限分級可有限度的防止惡意行為
2017年5月31日 星期三
[公開課閒聊] 計算機概論第六講 Operating systems - 台大 于天立
Ped隨手摘
- 作業系統組成部分
- file manager
- device drivers 驅動程式
- memory manger
- 包含主記憶體與虛擬記憶體
- 當主記憶體不足時會將一些暫時用不到的資料先存到硬碟中
- scheduler
- dispatcher
- linux
- 指的只是 kernel 其實不包含 GUI 之類的東西
- made by GNU
- MacOS
- base on BSD
- boot strapping (booting) 含意: 不求人
- boot loader 會去把在 ROM 中的作業系統載入到主記憶體中後再將控制權交給作業系統
- BIOS可以和 boot loader 溝通
- process
- process state
- program counter 程式跑到第幾行
- general purpose register register進行的動作
- associated memory cell 記憶體位置
- process table
- 記憶體位置
- 優先順序
- waiting / ready
2017年5月29日 星期一
[公開課閒聊] 計算機概論第五講 Data manipulation & operating systems - 台大 于天立
Ped隨手摘
- pipelining
- 不同行為用到的電路是不同的,此技術是讓不同行為可以同時進行 ex.fetch、decode、execute 同時跑
- parallel 平行運算
- 名詞解釋
- MIMD (mutiple instruction mutiple data) 多個指令對多個動作 ex.pipelining
- SIMD(single instruction mutiple data) 此種方式常用在多媒體上,比如一個指令讓所有像素亮度調高
- distributed 分散式系統
- 不同電腦間利用網路同時進行處理不同任務
- 平行與分散 常見的議題
- data dependency 接下來的計算依賴前一步計算的結果
- load balancing 工作平均分配
- synchronization 同步
- reliability 可靠性
- 多核心 CPU 因為資料 可進行平行運算的比例與不同核心間溝通的時間造成多核心運算加速有個極限
- 作業系統最大的目的
- 讓系統可以最大化的使用運算資源,平順的切換不同任務的進行
- 作業系統類別
- real-time 即時反應
- time-sharing and mutitasking 使用者可同時執行多個任務,系統切分每個任務可占用的執行時間
- multiprocessor 使用多核心平行進行多個任務
- user 僅能透過 shell 與 kernel 溝通 包含文字與圖形介面
2017年5月27日 星期六
[公開課閒聊] 計算機概論第四講 Data manipulation - 台大 于天立
Ped隨手摘
- 電腦的結構
- Registers (暫存器)
- 通常用 SRAM
- 常見的有
- program counter
- 程式在記憶體中目前執行到的位置
- instruction register
- 從記憶體中取出現在正要執行的指令
- program counter
- Bus (連接記憶體和CPU)
- Motherboard (主機板)
- CPU
- Main Memory
- Registers (暫存器)
- CPU
- ALU Arithmetic/logic unit 算數/邏輯運算元
- Control unit
- Machine Instructions (機械指令/機械碼)
- 利用指令集操作CPU
- 組合語言(assembly)和機械指令原則上是一對一的對應
- 大概會有的指令
- LOAD 從記憶體取出資料
- STORE 把資料放回主記憶體
- I/O 輸入輸出
- 加減乘除
- SHIFT
- logic shift 移動方向的最後一個bit補零
- Arithmetic shift 第一個位(正負數) 永遠不動
- ROTATE
- 移出去的bit捕到領一個方向
- 流程控制
- JUMP 類似 goto 分為有無條件的JUMP
- HALT (停止流程
- 現在的主流是 CISC (complex instruction set computing)
- 詳細解釋 Machine Instruction
- op-code
- 告訴CPU要執行甚麼動作
- Operand
- 運算元指定對某個記憶體定址執行 op-code 指定要進行的行為
- 用以表達記憶體位置的bytes數會影響能使用的主記憶體大小 (ex.32位元最多能插 4G )
- 機械碼範例: 356C
- 3:store 5:register位置 6C:主記憶體位置
- 白話: 把register 位置 5 的資料寫入主記憶體 6C 的位置
- 組合語言會轉成較易表示的格式: ex. STORE 5, 6C
- op-code
- 高階語言 to Machine Instruction流程範例
- 寫好的C語言 compile to Object 檔
- Object 再和 libary link 成為一個 binary(可執行檔)
- compile 的方式會影響到效能因為有各種翻法
- Machine cycle
- 組成動作
- fetch 從主記憶體中將指令取至register
- decode 解碼讓CPU知道指令的意思
- execute
- clock ex.3GHz 就是一秒可以跑 3*1000000000 次 machine cycle
- 組成動作
- I/O 與 CPU 間溝通至 bus 前還有一層 controller 會稍微暫存指令以免太頻繁佔據通道流量
- 與其他設備通訊
- DMA direct memory access
- 周邊裝置需要存取主記憶體前只需要通過一次CPU的授權
- 握手 Hand shaking
- 收到訊息後回傳通知對方已收到
- 比較嚴格的會先告知對方我要送訊息, 對方允許後才開始傳送
- 平行 / 序列 傳輸
- 不一定平行傳輸比較快
- 傳輸單位
- bps (bit per second) 注意不是 byte
2017年5月6日 星期六
[公開課閒聊] 計算機概論第三講 Data Storage - 台大 于天立
Ped隨手摘
- 二進位小數轉成十進位其實常有誤差存在,十進位常常不是二的倍數
- 壓縮
- 非失真壓縮
- Run-length : 一連串相同的位元在紀錄時就只記連續幾位 ex.11111 連續5bits 為1
- Frequency-dependent : 常用的碼用比較少位元數代表;少用的用比較長的位元數表示
- Huffman code
- 固定長度編碼接收端比較好分割,但會比較占空間。
- ex.A=00;B=01;C=10
- 利用二元樹依出現頻率由短至長編碼有機會會更省空間
- ex.A出現9次;B出現3次;C出現2次;D出現1次 A=0;B=10;C=110;D=111
- 固定長度編碼接收端比較好分割,但會比較占空間。
- Huffman code
- dictionary : 將常用的 pattern 用一組較短位元數紀錄他,跟frequecy有點關係
- LZW
- 不用把字典傳給接收端,因為接收端可用和傳送端同樣的演算法進行解碼
- LZW
- 失真壓縮
- relative/difference : 只記錄有改變的地方
- ex.影像、聲音
- relative/difference : 只記錄有改變的地方
- 如果原始資料重複的pattern (redundancy) 很少,反而可能會壓大
- Communication errors
- 壓縮過的資料如果有遺失會導致解碼錯誤
- error detection : 可發現傳送的資料有誤,但無法回復
- check code
- 身分證字號
- ISBN
- parity bits
- ex.多傳一個 bit 讓資料永遠為奇數,但同時錯兩個 bit 時就沒救了 XD
- RAID (磁碟陣列)
- check code
- error-correcting code (ECC)
- repetition code
- 多傳幾次ex.傳三次 010 因為 0 比較多所以回復成 0
- ex.(7,4)Hamming Code
- 發生錯誤時根據 Hamming distance 還原成最近的
2017年5月3日 星期三
[公開課閒聊] 計算機概論第二講 Data Storage - 台大 于天立
Ped隨手摘
- 聲音怎麼紀錄
- sampling rate
- bps(bit per second) 每秒鐘用多少 bits 紀錄聲音檔取決於兩個參數
- 取樣率
- 紀錄震幅用的 bits 數
- bps(bit per second) 每秒鐘用多少 bits 紀錄聲音檔取決於兩個參數
- MIDI
- 由音效卡由設定好的聲音再現不同的音效卡呈現出來可能不同
- sampling rate
- 整數
- Overflow
- 兩個正數加起來變一個負數或兩個負數加起來變一個正數
- 由於記憶體不足導致計算結果無法表達
- 兩個正數加起來變一個負數或兩個負數加起來變一個正數
- Overflow
- 小數
- fixed-point
- 直接換算
- ex.101.101 = 5又5分之8
- 直接換算
- floating-point
- 正負 sign
- 指數 exponent
- 假數 mantissa
- ex.11010101 = 1(負sign) 101(1指數) 0101(.0101假數) = -(1/4+1/16)x2的一次方 = -5/8
- 所以轉換成十進位除不盡或記憶體不足的時候會有誤差 => Truncation Error
2017年5月2日 星期二
[公開課閒聊] 計算機概論第一講 Data Storage - 台大 于天立
Ped隨手摘
- 為什麼用 2 進位?
- 方便對應 true false
- 電器常用電壓作為辨別,比較好判斷 (ex.五伏電壓)
- 為什麼用 16 進位?
- 較2進位方便人類表達
- 2的倍數易於轉換2進位
- 記憶體位置本身也是以2進位表示,記憶體位置中擺著以 cell 為單位的資料,資料至少以8bits(1byte)為單位
- 以1D的方式排列
- 現在幾乎都是隨機存取
- 可直接取得目標記憶體位置的資料
- 主記憶體如DDR等技術都是持續供電以奈米等級的小電容紀錄01,增加容量的方式就是讓電容越排越密,越來越小
- 硬碟則是用磁性紀錄因為一個檔案會分開存在硬碟的不同位置,將不同位置的資料組合回一個檔案供讀取是buffer常被拿來用做的事,他會一次讀一堆資料後再整理出我們要的丟出來
- 各式各樣如何用二進位記錄資料說明:
- 文字
- Unicode、ASCII
- 圖片
- BMP、SVG
- 數字
- 直接從換算成2進位
訂閱:
文章 (Atom)