# 大一計算機概論筆記 ## **persudocode 概論:** 是什麼? ans: 草稿(寫下邏輯) testplan:要測多少次,用什麼樣的資料去測 code converage:確認每行程式都被執行 data converage:各種範圍內的資料都可執行成功 ### **Problem solving and Algorithm:** 概念:製作演算法的科學方法 先自己讀課本 #### binary search: 條件:排序後的陣列 概念:不斷的取區間內的中間值進行比對 ex: 0-100 中找23 1.找到50的地址,50比23大,區間改成0~50 2.找到25的地址,25比23大,區間改成0~25 3.找到12的地址,12比23小,區間改成12~25 4.找到18的地址,18比23小,區間改成18~25 5.找到21的地址,21比23小,區間改成21~25 6.找到23的地址 *複雜度為O(logn) 遠小於一個一個找的O(n) #### bubble sort: 條件:擁有一個陣列 概念:不斷的把最大值交換到最後 ex:array={1,7,4,3,5} 1.array={1,4,3,5,7} 1.交換1,7失敗 2.交換7,4成功array={1,4,7,3,5} 3.交換7,3成功 array={1,4,3,7,5} 4.交換7,5成功 array={1,4,3,5,7} 2.array={1,3,4,5,7} 1.交換1,4失敗 2.交換3,4成功 3.交換4,5失敗 4因最後一位已經確定為最大值,因此不再交換 3.array={1,3,4,5,7} 1.交換1,3失敗 2.交換3,4失敗 3.最後兩位不執行 4.array={1,3,4,5,7} 1.交換1,3失敗 2.後三位不執行 5.結束 *複雜度為O(n^2)比一般的sort大,但是為理解sort的最好範例 *如果你沒注意到,當一直取較大的數時,最後得到的數會是比對範圍內的最大值 [氣泡排序範例點我](https://hackmd.io/@eRA5F9qrRx2xUqx5v3ZPRQ/ry0c5VGf1x) #### selection sort: 條件:擁有一個陣列 概念:把最小的放到最前面 ex:array={3,2,5,1,4} 1.array={1,2,5,3,4} 2.array={1,2,5,3,4} 3.array={1,2,3,5,4} 4.array={1,2,3,4,5} *因為第i點會將陣列中的前i項都sort好,因此第i+1點只找i+1到n的最小值 *複雜度為O(n^2次),跟bubble sort 一樣都是基礎 [選擇排序點我](https://hackmd.io/@eRA5F9qrRx2xUqx5v3ZPRQ/ry8W5KmGJe) #### bubble sort and selection sort 的比較: 1.一般 bubble 是找最大值,selection 是找最小值,但不一定要如此 2.一般 bubble 是由後往前排, selection 是由前往後排,但反著做也不是不能sort 3.bubble 是以不斷交換得出 最大/最小 值,而 selection 是以for迴圈跑一遍來得出 最大/最小 值並交換 4.二者的最大執行次數都是n*(n+1)/2次,也就是0.5n^2+0.5n,因為常數項太小(把n當成10^5以上),所以可以忽視,時間複雜度為O(n^2) *課本是在排序英文,與排序數字是一樣的,a<z, ab<az, az<za, 可以當成(26^幾位數)*ASCII+(26^[幾位數-1])*ASCII...進行比對 ## CH10 ### 目錄: 1. OS 2. batch 3. timesharing 4. memory management 5. process management 6. CPU schedualing ### 1. OS: 1. 電腦的核心 2. 可以有很多個,但一次只能運行一個 3. 管控電腦資源(記憶體,輸入輸出等⋯⋯) 4. 存在的意義是讓不同程式"和平共享"資源 5. 一小部分存在ROM,其他存在磁碟 6. 電腦開機時啟動,這過程被稱為Booting ### 2. Batch: 早期為了使資源準備更快而出現 需要相同資源的工作會被分類到同一個batch 現代的batch與以往不同 bat檔 是用來寫系統指令 ### 3. Timesharing: 原先time sharing系統包含一個mainframe, OS存在於那裡 所有連接的使用者傳送指令過去執行,在得到結果 造成彷彿每個使用者都有各自的電腦的現象 ### 4. Memory management: * 課本介紹了三種方式 #### A. Single continious: 記憶體一次只放一組程式進去 記憶體總共只有OS和一組程式 #### B. Partition: * 把記憶體分成多組的空間,再把不同的程式放進不同的空間 * 有三種放法,first fit, best fit, worst fit * first fit 是把程式放到第一個放得下的空間 * best fit 是把程式放到最小的、可以容納它的空間 * worst fit 是把程式放到最大的空間,看似是最糟糕的做法,但在動態的partition分配中,它是最好的選擇 #### C. Paged memory: 把記憶體分成大量相同大小的frame來裝程式的不同部分 透過一個表格把邏輯地址轉換成實體地址 page = logical_address / frame_size offset = logical_address % frame_size Physical_address = Frame * frame_size + offset 優點是每個當下都只需要裝需要執行的那部分程式 會使人感覺記憶體容量無限 適合虛擬環境 ### 5. Process management: 分為五種狀態 * New: 程序剛被創立 * Ready: 隨時可以執行 * Waiting: 等待CPU以外的資源 * Running: 執行中 * Terminates: 結束 PCB 是一個OS用來儲存及規劃一個process的資料結構 ### 6. CPU schedualing: 課本介紹了三種,並分為兩類,非競爭性與競爭性 #### Nonpreemptive(非競爭性): 這裏包含兩種方法 ##### FCFS: first come first serve 就只是先來的先執行 ##### SJN: shorest job next 是安排最小執行時間的先執行 由於還沒執行,因此我們不知到他的執行時間有多長,因此不是最受歡迎的 #### Preemptive: ##### Round Robin: 設定一個timeslice 每個程序都輪流跑timeslice的時間 是最公平且最受歡迎的 ###### 恭喜讀完第10章 (^_\^)v ## CH11 ### 目錄: 1. Dictionary trees 2. File intro 3. Disk schedualing ### Dictionary Trees: windows 和 linux 系統的資料架構 每個Dictionary裡,不能有重複的名字 注意⚠️斜線方向⚠️ #### absolute address: 從根到目的的路徑 #### relative address: 從現在位置到目的的路徑 ### File introduction: 有兩種類型,text, binary text files 是純文字檔,如.txt 或 程式嗎檔 binary files 是其他 由於所有檔案都是01組成、只是翻譯方式不同,因此更改副檔名不會損毀檔案,只是會開不了檔案 文件有保護機制,只有相應的權限才能做相應的是,不懂的可以參考ppt的權限 文件存取方式有兩種,一種是順序性,另一種是直接性 可以參考磁帶及RAM ### Disk schedualing: 一樣,分三種 #### A. FCFS: 不用多說了 #### B. SSTF: shortest seek time first 是按照距離現在位置最近的順序去找 #### C. SCAN: scan 是來回掃描 他還有circular的模式,也就是掃到底時回到原點 ###### 恭喜讀完ch 11 🥳 ## CH 15 ![IMG_0060](https://hackmd.io/_uploads/SJ4FcaABJx.jpg)