1.-7的二進位補碼 (D)
(1)-7的原碼 1000 0111
(2)符號位不變 1000 0111
(3)數值位取反 1111 1000
(4)加1 1111 1001
注意:
(1)正整數的補碼與原碼相同
(2)補碼轉化為原碼
補碼的符號位為‘0’,原碼就補碼
補碼的符號位為‘1’,原碼就是補碼的補碼
2.四種介質,頻寬最大:(C)
A 同軸電纜 B 雙絞線 C 光纖 D 同步線
註:
(1)雙絞線也稱為雙扭線,是最古老但又最常用的傳輸媒體。把兩根互相絕緣的銅導線並排放在一起,然後用規則的方法絞合起來(這樣做是為了減少相鄰的導線的電磁幹擾)而構成雙絞線.
雙絞線分為1類到5類,區域網路中常用的為3類,4類和5類雙絞線。 3類線用於語音傳輸及最高傳輸速率為 10Mbps的資料轉送;4類線用於語音傳輸和最高傳輸速率為 16Mbps的資料轉送;5類線用於語音傳輸和最高傳輸速率為 100Mbps的資料轉送
(2)同軸電纜由內導體銅質芯線,絕緣層,網狀編製的外導體屏蔽層及保護塑料外層組成 ,內導體和外導體構成一組線對。由於外導體屏蔽層的作用,同軸電纜具有很好的抗幹擾性。
同軸電纜可以將 10Mb/S的基帶數字訊號傳送1千米到 1.2千米,因此被廣泛用於區域網路中
(3)光纖通訊就是利用光導纖維傳遞光脈衝來進行通訊,而光導纖維是光纖通訊的媒體。光纖在任何時間都只能單向傳輸,因此,要實行雙向通訊,它必須成對出現,一個用於輸入,一個用於輸出,光纖兩端接到光學介面上。
光纖的傳輸系統比同軸電纜大的多,一般小同軸電纜的最大傳輸頻寬為 20MHz左右,中同軸電纜的最大傳輸頻寬為 60MHz左右。單根光導纖維的資料轉送速率能達幾Gbps,在不使用中繼器的情況下,傳輸距離能達幾十公裡。
3. 進程阻塞原因 (A)
A.時間片切換 B.等待I/O C.進程sleep D.等待解鎖
如果沒有時間片輪轉,那麼進程就沒法切換了,一個進程將獨享CPU。但是不能稱時間片切換導致進程阻塞。
註:
(1)進程,概念主要有兩點:
第一,進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括文本地區(text region)、資料區域(data region)和堆棧(stack region)。
文本地區儲存處理器執行的代碼;
資料區域儲存變數和進程執行期間使用的動態分配的記憶體;
堆棧地區儲存著活動程序呼叫的指令和本地變數。
第二,進程是一個“執行中的程式”。程式是一個沒有生命的實體,只有處理器賦予程式生命時,它才能成為一個活動的實體,我們稱其為進程。
(2)進程的三種基本狀態
進程在運行中不斷地改變其運行狀態。通常,一個運行進程必須具有以下三種基本狀態。
就緒(Ready)狀態 當進程已指派到除CPU以外的所有必要的資源,只要獲得處理機便可立即執行,這時的進程狀態稱為就緒狀態。
執行(Running)狀態當進程已獲得處理機,其程式正在處理機上執行,此時的進程狀態稱為執行狀態。
阻塞(Blocked)狀態 正在執行的進程,由於等待某個事件發生而無法執行時,便放棄處理機而處於阻塞狀態。引起進程阻塞的事件可有多種,例如,等待I/O完成、申請緩衝區不能滿足、等待信件(訊號)等。
進程三種狀態間的轉換
一個進程在運行期間,不斷地從一種狀態轉換到另一種狀態,它可以多次處於就緒狀態和執行狀態,也可以多次處於阻塞狀態。圖3_4描述了進程的三種基本狀態及其轉換。
(1) 就緒→執行 處於就緒狀態的進程,當進程發送器為之分配了處理機後,該進程便由就緒狀態轉變成執行狀態。
(2) 執行→就緒 處於執行狀態的進程在其執行過程中,因分配給它的一個時間片已用完而不得不讓出處理機,於是進程從執行狀態轉變成就緒狀態。
(3) 執行→阻塞 正在執行的進程因等待某種事件發生而無法繼續執行時,便從執行狀態變成阻塞狀態。
(4) 阻塞→就緒 處於阻塞狀態的進程,若其等待的事件已經發生,於是進程由阻塞狀態轉變為就緒狀態。
關於進程的一些介紹 http://oa.gdut.edu.cn/os/multimedia/oscai/chapter2/pages/ch22.htm#頁頭
4.設只含根節點的二叉樹高度為1,現有一顆高度為h(h>1)的二叉樹上只有出度為0和出度為2的節點,那麼這顆二叉樹節點最少為:
A.2^h-1 B.2h-1 C.2h D.2h+1
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/
取H=1 則可以排除C和D
有個討巧的方法:直接取h=3,畫個圖看下,顯然是5,所以答案為B。
下面來分析下:如果每個節點出度要麼為0要麼為2,那麼也就是要麼自己為葉子,要麼自己擁有左右兒子。那麼什麼情況下節點最少呢?直接沿著一條路下去保持出度為2,直到高度達到h,那麼此時節點總數:2h-1。
5.給定下面程式,那麼執行printf("%d\n",foo(20,13));結果是多少:
int foo(int x,int y)
{
if(x <= 0 || y <= 0)return 1;
return 3*foo(x-6,y/2);
}
A.3 B.9 C.27 D.81
解:foo(20,13)->3*foo(14,6)->9*foo(8,3)->27*foo(2,1)->81foo(-4,0)=81
6.對於以下說法錯誤的是:
A.Dijkstra是求兩點間最短路徑的,複雜度:O(n^2)。
B.Floyd-Warshall是求所有點對之間最短路徑的,複雜度:O(n^3)。
C.求n個數中的中位元複雜度最低為:O(n*logn)。
D.基於比較的排序演算法複雜度下界為:O(n*logn)。
註:
(1)Dijkstra
http://jpkc.xaau.edu.cn/sjjg/datastru/zxxx/View/6.5.html
http://jpkc.xaau.edu.cn/sjjg/datastru/zxxx/six%20lesson/642.html
一個按路徑長度遞增的次序產生最短路徑的演算法。
該演算法的基本思想是:
設定兩個頂點的集合S和T=V-S,集合S中存放已找到最短路徑的頂點,集合T存放當前還未找到最短路徑的頂點。初始狀態時,集合S中只包含源點v0,然後不斷從集合T中選取到頂點v0路徑長度最短的頂點u加入到集合S中,集合S每加入一個新的頂點u,都要修改頂點v0到集合T中剩餘頂點的最短路徑長度值,集合T中各頂點新的最短路徑長度值為原來的最短路徑長度值與頂點u的最短路徑長度值加上u到該頂點的路徑長度值中的較小值。此過程不斷重複,直到集合T的頂點全部加入到S中為止。
虛擬碼:
1 function Dijkstra(G, w, s)
2 for each vertex v in V[G] // 初始化
3 d[v] := infinity
4 previous[v] := undefined
5 d[s] := 0
6 S := empty set
7 Q := set of all vertices
8 while Q is not an empty set // Dijstra演算法主體
9 u := Extract_Min(Q)
10 S := S union {u}
11 for each edge (u,v) outgoing from u
12 if d[v] > d[u] + w(u,v) // 拓展邊(u,v)
13 d[v] := d[u] + w(u,v)
14 previous[v] := u