① 求數據結構試題…重點
這是我們老師要求的重點,即考點。列印出來,背一下就行了,准過!
第一章:緒論
1.1:數據結構課程的任務是:討論數據的各種邏輯結構、在計算機中的存儲結構以及各種操作的演算法設計。
1.2:數據:是客觀描述事物的數字、字元以及所有的能輸入到計算機中並能被計算機接收的各種集合的統稱。
數據元素:表示一個事物的一組數據稱作是一個數據元素,是數據的基本單位。
數據項:是數據元素中有獨立含義的、不可分割的最小標識單位。
數據結構概念包含三個方面:數據的邏輯結構、數據的存儲結構的數據的操作。
1.3數據的邏輯結構指數據元素之間的邏輯關系,用一個數據元素的集合定義在此集合上的若干關系來表示,數據結構可以分為三種:線性結構、樹結構和圖。
1.4:數據元素及其關系在計算機中的存儲表示稱為數據的存儲結構,也稱為物理結構。
數據的存儲結構基本形式有兩種:順序存儲結構和鏈式存儲結構。
2.1:演算法:一個演算法是一個有窮規則的集合,其規則確定一個解決某一特定類型問題的操作序列。演算法規則需滿足以下五個特性:
輸入——演算法有零個或多個輸入數據。
輸出——演算法有一個或多個輸出數據,與輸入數據有某種特定關系。
有窮性——演算法必須在執行又窮步之後結束。
確定性——演算法的每個步驟必須含義明確,無二義性。
可行性——演算法的每步操作必須是基本的,它們的原則上都能夠精確地進行,用筆和紙做有窮次就可以完成。
有窮性和可行性是演算法最重要的兩個特徵。
2.2:演算法與數據結構:演算法建立數據結構之上,對數據結構的操作需用演算法來描述。
演算法設計依賴數據的邏輯結構,演算法實現依賴數據結構的存儲結構。
2.3:演算法的設計應滿足五個目標:
正確性:演算法應確切的滿足應用問題的需求,這是演算法設計的基本目標。
健壯性:即使輸入數據不合適,演算法也能做出適當的處理,不會導致不可控結
高時間效率:演算法的執行時間越短,時間效率越高。 果。
高空間效率:演算法執行時佔用的存儲空間越少,空間效率越高。
可讀性:演算法的可讀性有利於人們對演算法的理解。
2.4:度量演算法的時間效率,時間復雜度,(課本39頁)。
2.5:遞歸定義:即用一個概念本身直接或間接地定義它自己。遞歸定義有兩個條件:
至少有一條初始定義是非遞歸的,如1!=1.
由已知函數值逐步遞推計算出未知函數值,如用(n-1)!定義n!。
第二章:線性表
1.1線性表:線性表是由n(n>=0)個類型相同的數據元素a0,a1,a2,…an-1,組成的有限序列,記作: LinearList = (a0,a1,a2,…an-1)
其中,元素ai可以是整數、浮點數、字元、也可以是對象。n是線性表的元素個數,成為線性表長度。若n=0,則LinearList為空表。若n>0,則a0沒有前驅元素,an-1沒有後繼元素,ai(0<i<n-1)有且僅有一個直接前驅元素ai-1和一個直接後繼元素ai+1。
1.2線性表的順序存儲是用一組連續的內存單元依次存放線性表的數據元素,元素在內存的物理存儲次序與它們在線性表中的邏輯次序相同。
線性表的數據元素數據同一種數據類型,設每個元素佔用c位元組,a0的存儲地址為
Loc(a0),則ai的存儲地址Loc(ai)為:Loc(ai) = Loc(a0)+ i*c
數組是順序存儲的隨機存儲結構,它佔用一組連續的存儲單元,通過下標識別元素,元素地址是下標的線性函數。
1.3:順序表的插入和刪除操作要移動數據元素。平均移動次數是 屬數據表長度的一半。(課本第50頁)
1.4:線性表的鏈式存儲是用若乾地址分散的存儲單元存儲數據元素,邏輯上相鄰的數據元素在物理位置上不一定相鄰,必須採用附加信息表示數據元素之間的順序關系。
它有兩個域組成:數據域和地址域。通常成為節點。(課本第55頁及56頁)
1.5單鏈表(課本56頁)
單鏈表的遍歷:Node<E> p = head; while(p!=null){ 訪問p節點;p = p.next;}
單鏈表的插入和刪除操作非常簡便,只要改變節點間的鏈接關系,不需移動數據元素。
單鏈表的插入操作:1):空表插入/頭插入 2)中間插入/尾插入
if(head == null) Node<E> q = new Node<E>(x);
{ head = new Node<E>(x); q.next = p.next;
}else{ p.next = q;
Node<E> q=new Node<E>(x); 中間插入或尾插入都不會改變單表
q.next = head; 的頭指針head。
head = q;
}
單鏈表的刪除操作:
頭刪除:head = head.next;
中間/尾刪除:if(p.next!=null){ p.next = p.next.next;}
循環單鏈表:如果單鏈表最後一個節點的next鏈保存單鏈表的頭指針head值,則該單鏈表成為環形結構,稱為循環單鏈表。(課本67)
若rear是單鏈表的尾指針,則執行(rear.next=head;)語句,使單鏈表成為一條循環單鏈表。當head.next==head時,循環單鏈表為空。
1.6:雙鏈表結構:雙鏈表的每個結點有兩個鏈域,分別指向它的前驅和後繼結點,
當head.next==null時,雙鏈表為空。
設p指向雙鏈表中非兩端的某個結點,則成立下列關系:p=p.next.prev=p.prev.next。
雙鏈表的插入和刪除:1)插入 2)刪除
q=new DLinkNode(x); p.prev.next = p.next;
q.prev=p.prev;q.next =p; if(p.next=null){
p.prev.next = q;p.prev=q; (p.next).prev = p.prev;}
循環雙鏈表:當head.next==head且head.prev==head時,循環雙鏈表為空。
第三章:棧和隊列
1.1棧:棧是一種特殊的線性表,其中插入和刪除操作只允許在線性表的一端進行。允許操作的一端稱為棧頂,不允許操作的一端稱為棧底。棧有順序棧和鏈式棧。
棧中插入元素的操作稱為入棧,刪除元素的操作稱為出棧。沒有元素的中稱為空棧。
棧的進出棧順序:後進先出,先進後出。(及75頁的思考題)。
1.2:隊列:隊列是一種特殊的線性表,其中插入和刪除操作分別在線性表的兩端進行。
向隊列中插入元素的過程稱為入隊,刪除元素的過程稱為出對,允許入隊的一端稱為隊尾,允許出隊的一端稱為對頭。沒有元素的隊列稱為空隊列。隊列是先進先出。
第四章:串
1.1:串是一種特殊的線性表,其特殊性在於線性表中的每個元素是一個字元。一個串記為: s=「s0s1s2…sn-1」 其中n>=0,s是串名,一對雙引號括起來的字元序列s0s1s2…sn-1是串值,si(i=0,1,2,…n-1)為特定字元集合中的一個字元。一個串中包含的字元個數稱為串的長度。
長度為0的串稱為空串,記作「」,而由一個或多個空格字元構成的字元串稱為空格串。
子串:由串s中任意連續字元組成的一個子序列sub稱為s的子串,s稱為sub的主串。子串的序號是指該子串的第一個字元在主串中的序號。
串比較:兩個串可比較是否相等,也可比較大小。兩個串(子串)相等的充要條件是兩個串(子串)的長度相同,並且各對應位置上的字元也相同。
兩個串的大小由對應位置的第一個不同字元的大小決定,字元比較次序是從頭開始依次向後。當兩個串長度不等而對應位置的字元都相同時,較長的串定義為較「大」。
第五章:數組和廣義表
1.1:數組是一種數據結構,數據元素具有相同的數據類型。一維數組的邏輯結構是線性表,多維數組是線性表的擴展。
1.2:一維數組:一維數組採用順序存儲結構。一個一維數組佔用一組連續的存儲單元。
設數組第一個元素a0的存儲地址為Loc(a0),每個元素佔用c位元組,則數組其他元素ai的存儲地址Loc(ai)為: Loc(ai)= Loc(a0)+i*c
數組通過下標識別元素,元素地址是下標的線性函數。一個下標能夠唯一確定一個元素,所劃給的時間是O(1)。因此數組是隨機存取結構,這是數組最大的優點。
1.3:多維數組的遍歷:有兩種次序:行主序和列主序。
行主序:以行為主序,按行遞增訪問數組元素,訪問完第i行的所有元素之後再訪問第i+1行的元素,同一行上按列遞增訪問數組元素。
a00,a01,…a0(n-1), a10,a11,…a1(n-1),…a(m-1)0,a(m-1)1,…,a(m-1)(n-1)
2)列主序:以列為主序,按列遞增訪問數組元素,訪問完第j列的所有元素之後再訪問第j+1列的元素,同一列上按列遞增訪問數組元素。
多維數組的存儲結構:多維數組也是由多個一維數組組合而成,組合方式有一下兩種。
靜態多維數組的順序存儲結構:可按行主序和列主序進行順序存儲。
按行主序存儲時,元素aij的地址為:Loc(aij)= Loc(a00)+(i*n+j)*c
按列主序存儲時,Loc(aij)= Loc(a00)+(j*m+i)*c
動態多維數組的存儲結構。
二維數組元素地址就是兩個下標的線性函數。無論採用哪種存儲結構,多維數組都是基於一維數組的,因此也只能進行賦值、取值兩種存取操作,不能進行插入,刪除操作。
第六章:
樹是數據元素(結點)之間具有層次關系的非線性結構。在樹結構中,除根以外的結點只有一個直接前驅結點,可以有零至多個直接後繼結點。根沒有前驅結點。
樹是由n(n>=0)個結點組成的有限集合(樹中元素通常稱為結點)。N=0的樹稱為空樹;n>0大的樹T;
@有一個特殊的結點稱為根結點,它只有後繼結點,沒有前驅結點。
@除根結點之外的其他結點分為m(m>=0)個互不相交的集合T0,T1,T3……..,Tm-1,其中每個集合Ti(0<=i<m)本身又是一棵樹,稱為根的子樹。
樹是遞歸定義的。結點是樹大的基本單位,若干個結點組成一棵子樹,若干棵互不相交的子樹組成一棵樹。樹的每個結點都是該樹中某一棵子樹的根。因此,樹是由結點組成的、結點之間具有層次關系大的非線性結構。
結點的前驅結點稱為其父母結點,反之,結點大的後繼結點稱為其孩子結點。一棵樹中,只有根結點沒有父母結點,其他結點有且僅有一個父母結點。
擁有同一個父母結點的多個結點之間稱為兄弟結點。結點的祖先是指從根結點到其父母結點所經過大的所有結點。結點的後代是指該結點的所有孩子結點,以及孩子的孩子等。
結點的度是結點所擁有子樹的棵數。度為0的結點稱為葉子結點,又叫終端結點;樹中除葉子結點之外的其他結點稱為分支結點,又叫非葉子結點或非終端結點。樹的度是指樹中各結點度的最大值。
結點的層次屬性反應結點處於樹中的層次位置。約定根結點的層次為1,其他結點的層次是其父母結點的層次加1。顯然,兄弟結點的層次相同。
樹的高度或深度是樹中結點的最大層次樹。
設樹中x結點是y結點的父母結點,有序對(x,y)稱為連接這兩個結點的分支,也稱為邊。
設(X0,X1,….,Xk-1)是由樹中結點組成的一個序列,且(Xi,Xi+1)(0<=i<k-1)都是樹中的邊,則該序列稱為從X0到Xk-1的一條路徑。路徑長度為路徑上的邊數。
在樹的定義中,結點的子樹T0,T1…..,Tm-1之間沒有次序,可以交換位置,稱為無序樹,簡稱樹。如果結點的子樹T0,T1……,Tm-1從左到右是有次序的,不能交換位置,則 稱該樹為有序樹。
森林是m(m>=0)棵互不相乾的樹的集合。給森林加上一個根結點就變成一棵樹,將樹的根節點刪除就變成森林。
二叉樹的性質1:若根結點的層次為1,則二叉樹第i層最多有2 的i-1次方(i>=1)個結點。
二叉樹的性質2:在高度為k的二叉樹中,最多有2的k次方減一個結點。
二叉樹的性質3:設一棵二叉樹的葉子結點數為n0,2度結點數為n2,則n0=n2+1。
一棵高度為k的滿二叉樹是具有2的k次方減一個結點的二叉樹。滿二叉樹中每一層的結點數目都達到最大值。對滿二叉樹的結點進行連續編號,約定根節點的序號為0,從根節點開始,自上而下,每層自左至右編號。
一棵具有n個結點高度為k的二叉樹,如果他的每個節點都與高度為k的滿二叉樹中序號為0~n-1
的結點一一對應,則這棵二叉樹為為完全二叉樹。
滿二叉樹是完全二叉樹,而完全二叉樹不一定是滿二叉樹。完全二叉樹的第1~k-1層是滿二叉樹第k層不滿,並且該層所有結點必須集中在該層左邊的若干位置上。
二叉樹的性質4:一棵具有n個結點的完全二叉樹,其高度k=log2n的絕對值+1
二叉樹的性質5:一棵具有n個結點的完全二叉樹,對序號為i的結點,有
@若i=0,則i為根節點,無父母結點;若i>0,則i的父母結點的序號為[(i-1)/2]。
@若2i+1<n,則i的左孩子結點序號為2i+1;否則i無左孩子。
@若2i+2<n,則i的右孩子結點的序號為2i+2,否則i無右孩子。
二叉樹的遍歷
二叉樹的遍歷是按照一定規則和次序訪問二叉樹中的所有結點,並且每個結點僅被訪問一次。
二叉樹的三種次序遍歷
1:先根次序;訪問根節點,遍歷左子樹,遍歷右子樹。
2:中根次序;遍歷左子樹,訪問右子樹,遍歷右子樹。
3:後根次序;遍歷左子樹,遍歷右子樹,訪問根節點。
先根次序遍歷時,最先訪問根節點;後根次序遍歷時,最後訪問根節點;中根次序遍歷時,左子樹上的結點在根節點之前訪問,右子樹上的結點在根節點之後訪問。
二叉樹的插入和刪除操作P147
二叉樹的層次遍歷P149
習題P167 6—10,6—19
第七章
圖是由定點集合及頂點間的關系集合組成的一種數據關邊系。頂點之間的關系成為邊。一個圖G記為G=(V,E),V是頂點A的有限集合,E是邊的有限集合。即 V={A|A屬於某個數據元素集合}
E={(A,B)|A,B屬於V}或E={<A,B>|A,B屬於V且Path(A,B)}其中Path(A,B)表示從頂點A到B的一條單向通路,即Path(A,B)是有方向的。
無向圖中的邊事沒有方向,每條邊用兩個頂點的無序對表示。
有向圖中的邊是有方向,每條邊用兩個頂點的有序對表示。
完全圖指圖的邊數達到最大值。n個頂點的完全圖記為Kn。無向完全圖Kn的邊數為n*(n-1)/2,有向完全圖Kn的邊數為n*(n-1)。
子圖:設圖G==(V,E),G』=(V』,E』),若V』包含於V且E』包含於E,則稱圖G』是G的子圖。若G』是G的真子圖。
連通圖:在無向圖G中,若從頂點VI到Vj有路徑,則稱Vi和Vj是聯通的。若圖G中任意一對頂點Vi和Vj(Vi不等於Vj)都是聯通的,則稱G為連通圖。非連通圖的極大聯通子圖稱為該圖的聯通分量。
強連通圖:在有向圖中,若在每一對頂點Vi和Vj(Vi不等於Vj)之間都存在一條從Vi到Vj的路徑,也存在一條從Vi到Vj的路徑,也存在一條從Vi到Vj的路徑,則稱該圖的強連通圖。非強連通圖的極大強連通子圖稱為該圖的強連通圖分量。
圖的遍歷
遍歷圖是指從圖G中任意一個頂點V出發,沿著圖中的邊前行,到達並訪問圖中的所有頂點,且每個頂點僅被訪問一次。遍歷圖要考慮一下三個問題:
@指定遍歷的第一個訪問頂點
@由於一個頂點可能與多個頂點相鄰,因此要在多個鄰接頂點之間約定一種訪問次序。
@由於圖中可能存在迴路,在訪問某個頂點之後,可能沿著某條路徑又回到該頂點。
深度優先搜索
圖的深度優先搜索策略是,訪問某個頂點v,接著尋找v的另一個未被訪問的鄰接頂點w訪問,如此反復執行,走過一條較長路徑到達最遠頂點;若頂點v沒有未被訪問的其他鄰接頂點,則回到前一個被訪問頂點,再尋找其他訪問路徑。
圖的深度優先搜索遍歷演算法P188
聯通的無迴路的無向圖,簡稱樹。樹中的懸掛點又成為樹葉,其他頂點稱為分支點。各連通分量均為樹的圖稱為森林,樹是森林。
由於樹中無迴路,因此樹中必定無自身環也無重邊(否則他有迴路)若去掉樹中的任意一條邊,則變成森林,成為非聯通圖;若給樹加上一條邊,形成圖中的一條迴路,則不是樹。P191
生成樹和生成森林:
一個連通無向圖的生成樹是該圖的一個極小聯通生成子圖,它包含原圖中所有頂點(n個)以及足以構成一棵樹的n-1條邊。
一個非聯通的無向圖,其各連通圖分量的生成圖組成該圖的生成森林。
圖的生成圖或生成森林不是唯一的,從不同頂點開始、採用不同遍歷可以得到不同的生成樹或森林。
在生成樹中,任何樹中,任何兩個頂點之間只有唯一的一條路徑。
第八章
折半查找演算法描述 P206,P207
二叉排序樹及其查找:
二叉排序樹或者是一棵空樹;或者是具有下列性質的二叉樹:
@每個結點都有一個作為查找依據的關鍵字,所有結點的關鍵字互不相同。
@若一個結點的左子樹不空,則左子樹上所有結點的關鍵字均小於這個節點的關鍵字;
@每個結點的左右子樹也分別為二叉排序樹。
在一棵二叉排序樹中,查找值為value的結點,演算法描述如下:
@從根結點開始,設p指向根結點
@將value與p結點的關鍵字進行比較,若兩者相等,則查找成功;若value值較小,則在p的左子樹中繼續查找;若value值較大,則在p的右子樹中繼續查找。
@重復執行上一步,直到查找成功或p為空,若p為空,則查找不成功。
習題 8-6
第九章
直接插入排序演算法描述:p228
冒泡排序演算法的描述:p232
快速排序演算法描述p233
直接選擇排序演算法描述p236
直接選擇排序演算法實現如下:
Public static void selectSort(int[]table){
for(int i=0;i<table.length-1;i++){
int min=I;
for(int j=i+1;j<table.length;j++){
if(table[j]<table[min])
min=j;
if(min!=i){
int temp=table[i];
table[i]==table[min];
table[min]=temp;
}
}
}
}
堆排序是完全二叉樹的應用,是充分利用完全二叉樹特性的一種選擇排序。
堆定義:設n個元素的數據序列{k0,k1,。。。。kn-1},當且僅當滿足下列關系
k1<=k2i+1且ki<=k2i+2 i=0,1,2,3,….,[n/2-1]
或ki>==k2i+1且ki>=2i+2i=0,1,2,3,…..[n/2-1]時,序列{k0,k1…….kn-1}稱為最小堆或最大堆。將最小(大)堆看成是一顆完全二叉樹的層次遍歷序列,則任意一個結點的關鍵字都小於等於(大於等於)它的孩子節點的關鍵字值,由此可知,根結點值最小(大)。根據二叉樹的性質5,完全二叉樹中的第i(0<=i<n)個結點,如果有孩子,則左孩子為第2i+1個結點,右孩子為第2i+2個結點。
希望對你會有所幫助。
② 軟體開發個人職業生涯規劃書
一份優秀的職業生涯規劃書能幫助軟體開發人員排除萬難,向高峰前進,下面是由我分享的軟體開發職業生涯規劃書,希望對你有用。
軟體開發職業生涯規劃書(一)
1. 前言
理想是燈,照亮夜行的路;理想是路,引你走向黎明;其實人生就是追求目標的過程。人生的目標也涉及多個方面,包括學業,家庭,工作等。如今正值青春年華的我們,正事去實現自己目標的好時機。但是,要實現一個偉大的目標需要有一個好的 職業規劃 。
而什麼叫職業規劃呢?簡單來說,生涯即是指一個人的一生從始至終的過程。而職業生涯規劃是指個人發展與組織發展相結合。通過對職業生涯的主客端因素分析, 總結 和測定,確定一個人的奮斗目標,並未實現這一事業職業目標而預先進行生涯系統安排的過程。
通過職業生涯規劃去制定自己的發展路線。努力達成目標,達成生活意義,實現自我價值。
2. 自我認知與定位
2.1我的成長經歷
我出生在貧寒的家庭,父母都是老實的種地人。我是家裡的長
子這對我的性格有很大的影響。
兒時的啟蒙 教育 幾乎都是自己去探索的,和一群同齡的孩子滿
世界亂跑。懷著兒時的好奇心學會了許多東西。而在此期間有些可笑的事情仍記憶猶新。
進入小學後,臘敬茄我迷戀稿猛數學這門課,每次考試數學近乎都名列前
茅,而這也輪察影響了我對自己以後職業的選擇。小時候總是喜歡動手,記得一次我把姐姐的手錶拆開,然後整整一個下午都在那修
理手錶,最後以成功告終。還有就是家裡的小電器壞了,我就回去拆開它,探究他的工作原理。那是如果有人問我想干什麼,我會毫不猶豫地說工程師。也許隨著時間的推移我會改變自己的職業,但是一個信念在我的腦海深處我很喜歡動手,這就是我的優勢。
經過一番淺搏,我進入我們那高中的重點班。我曾一度迷戀網
絡游戲,因為進入新環境不能控制自己,總是沒有自己的主見,別人叫我去網吧我推託一下但最終就回去的。隨著成績的快速下降,我逐漸受到老師的關注。最後經過老師一番督查,我成績慢慢起色。那時我就有一個信念那就是考上大學。進入高三,有一段時間很迷茫,因為有時會想考上大學能幹什麼,經過和許多同學的交流,便又靜下心來。高三是艱苦的,但仍覺得那是一段溫馨美妙的時光,為一個目標去努力奮斗。
高考結束後的志願填報我沒受到其他人的影響,毅然選擇現在
就讀的專業。因為我很喜歡這個專業,而不像其他人選專業是為了就業。
從我的成長經歷可以看出,我是一個善於動手的人,自己有主
見不受其他人的影響。對自己想做的事一定會堅持到底的。
2.2身邊人對我的評價
同學1:樂於助人,動手能力強,為人善解人意,追求完美,智商高與常人。有時做事太沖動,不考慮後果,粗心,太傷感了。
同學2:自信,善於言辨,邏輯非常強,幽默。懶散,喜歡睡懶覺,
時間觀念差,性格緬甸。
父母:有孝心,乖巧,懂事,粗心,做事太沖動,喜歡幫助別人。
2.3我的職業分析
從別人對我的評價以及 自我評價 ,我認為自己是一個動手能力強, 邏輯思維 強,聰明。而軟體工程這個專業正需要這樣的優點。因此我對自己選擇這個專業感到高興。
2.4我的職業興趣
研究型:喜歡用頭腦依自己的 方法 來解決問題並追根問底,喜歡提出新想法和策略,多喜歡從事數理,物化等領域的研究工作。
3.我所選擇的職業軟體工程
3.1行業分析
全球經濟一體化進程加速,中國加入WTO必將進一步帶動國內軟體市場的繁榮,外來資本磨刀霍霍准備拓展中國市場,缺乏軟體系統理念指導的傳統企業將面臨嚴峻的挑戰。他們彌補缺陷的唯一出路就是引進人才,實現自我改造,向管理要效益,也成了目前國內許多大中型企業的共識。
3.2對所需人才的要求
據統計,我國軟體出口規模達到215億元,軟體從業人員達到72萬人,在中國十大IT 職場 人氣職位中,軟體工程師位列第一位,軟體工程人才的就業前景十分樂觀。 畢業 生主要在各大軟體公司、企事業單位、高等院校、各大研究所、國防等重要部門從
事軟體設計、開發、應用與研究工作。有關數據顯示,目前我國對軟體人才的需求已達20萬,並且以每年20%左右的速度增長,而高校計算機畢業生中的軟體工程人才還很缺乏,尤其是高素質的軟體工程人才的極度短缺。我國軟體高級人才的短缺已經成為制約我國軟體產業快速發展的一個瓶頸。
3.3學校環境分析
實話說吧,我所在的大學也就是一所普通的大學,雖說歷史悠久,但是教學質量平平,只是學校所開設的專業涉及面非常廣,在二流 大學排名 里也占那麼一席之地。在學校,教學設備比較落後,動手實踐的機會非常少,這無疑對許多學習學生是一個噩耗。而且,學校所處的城市比較落後,在這信息化的時代肯定是跟不上時代的步伐,脫離社會。使大學沒能與社會更好的接軌,這對以我們這些社會 經驗 不足的學生來說,無疑是缺少很多機會。這對於軟體工程這個專業來說,本來就沒有南方發展得快,再者信息落後,對於我們來說也不是一件好事。但是,我相信我也會在這所大學學到很多的知識。
3.4所學專業軟體工程
本專業培養以計算機應用軟體開發為基本技能,具有較扎實的專業基礎理論和較強的實踐動手能力,受到程序員的系統訓練,熟悉崗位要求,掌握崗位技能,懂理論、會操作的,適應社會信息化需求,適應市場經濟的德、智、體、美全面發展的計算機軟體開發與維護方面的高級專業技術人才。
主修課程:計算機導論,資料庫系統概論,離散數學,高等代
數,數據結構演算法與分析,線性代數,c語言程序設計,java程序設計,概率統計。
3.5軟體工程目前發展狀況
首先,專門從事軟體開發的企業數量增加較快。近幾年,隨著國民經濟發展對信息化建設要求的提高,軟體應用的領域不斷擴大,由此形成了軟體產業規模迅速擴大的趨勢,並且帶動了軟體企業的發展,使得專門從事軟體開發、生產和銷售的企業不斷涌現。同時,為了適應軟體市場發展的需要,一部分硬體製造商和具有一定軟體開發基礎的應用單位也將其中的軟體部門獨立出來,成立專門的軟體企業。這一特點表明中國軟體市場的潛力正在逐步展現,市場需求將帶動中國軟體產業的發展。
第二,在信息技術應用中,特別是伴隨著 網路技術 的發展,給計算機應用帶來了質的變化。因此,在軟體企業中從事系統集成和應用的企業佔了多數,如1999年的“政府上網年”和2000年的“企業上網年”及西部開發等工程項目的啟動,特別是“金字工程”(金關、金卡、金稅、金企、金農、金建、金衛等)等對系統集成市場產生了極大的拉動作用,使專門從事軟體系統集成的企業應運而生。同時,網路化帶動了信息化應用水平的提升,用戶對計算機應用的需求從單機轉向系統,並且涉及了網路互聯方面的需求。這一市場變化對信息產品的供應商提出了更高的要求,使從事系統集成服務的企業得到了發展的空間。
第三,軟體企業的融資活動開始活躍。由於人們看到了軟體產業發展的巨大潛力,因而針對軟體產業的投資、融資活動開始趨熱。其融資方式多種多樣,包括軟體企業間的兼並、硬體製造企業與軟體企業的融合、非IT行業的上市公司收購軟體企業、海外的風險資金流入軟體企業等等。盡管這些融資活動的規模不一,但卻成為軟體產業發展中一些引人注目的亮點。
第四,國內軟體市場在不斷規范的同時,正在迅速成長。近幾年,以連鎖經營為特點的軟體銷售模式迅速發展,一系列軟體連鎖銷售企業相繼成立,軟體流通市場逐步繁榮。由於計算機進入家庭的步伐加快,推動了軟體零售市場的發展,使得全國性的軟體行銷網路的作用更為突出。隨著中國上網人數的迅猛增長,B2C網上商店也相繼出現。但是,在國內軟體市場成長的過程中,至今仍受到盜版軟體的嚴重威脅。
4具體職業規劃設計
4.1總體分析
4.2職業行動計劃
4.2.1 大學期間
要不斷學習,全面發展,學精專業課。具備一定的英語水平。多參加有意義的社團活動來鍛煉自己的交際能力。經常鍛煉身體,為以後動作打下基礎。具體如下:
大二 眼下英語四級考試在即,要好好復習,爭取通過四級考試。第二學期開始選擇輔修其他專業知識充實自己;同時多參加兼職工作, 社會實踐 活動,並通過一系列計劃提高自己的堅持力。
大三時臨近畢業,加強專業知識的學習,靜下心在深入計算機領域,拿到一些有權威的證書。
大四時就為找工作東奔西跑唄。
4.2.2畢業後1-3年
進入大型公司工作,工作的同時,也要通過學習不斷提高自己。若自己沒有進大型公司,找到小公司工作,要找到最好的工作狀態,努力學習,爭取進大公司。
4.2.3畢業後3-10年
此時已經積累了一定的經驗,好好研究該領域。並做好社會資源,社會關系網路的拓展。
4.2.4畢業後10年後
從事行業經驗已至少十年,對該領域個方面有了一定的了解,要自己創業闖一闖不論成敗,旨在體會過程,體驗生活。並做好社會資源,社會關系網路的拓展。
5.評估調整
要定期對自己的努力進行小結,根據小結進行每一階段的評估。根
據評估,適時調整狀態及計劃。從自己的人際網路拓展,對行業的深入度,掌握高端技術,社會資源方面進行評估。
6.結束語
我始終追求完美,但我知道任何事都不可能完美無缺,但是我還是要努力追求。展翅而飛,雖會經歷暴風雨的威脅,但是他會讓你變堅強。如果人生平庸得過一生,那豈不是沒意義。為自己的夢想奮斗的第一步,先要規劃好自己的人生。然而有了想法,制定了計劃固然重要,但重要的是在實踐中取得成效。任何目標計劃無論多接近完美,只要做不到就是一場空。然而,現實是未知多變的,計劃隨時會改變,因此要保持清醒的頭腦。要拿出勇氣,付出努力,拼搏,奮斗。成功不相信眼淚;成功不相信幻想;成功不相信計劃;未來掌握在自己手中。經歷風雨不一定見彩虹,不經歷風雨一定不能見彩虹。放手一搏。 每一個成功都者有一個好的開始。讓我們從做好自己的職業規劃書做起。
軟體開發職業生涯規劃書(二)
一、引言
古人曾說::“人生天地間,若白駒過隙,忽然而已。”而在這短短的幾十年的時間里,我們將怎樣的去規劃自己的人生,從而使我們的人生變得更加的精彩呢?其實很簡單,這就需要我們從現在開始就做好職業生涯的規劃。
還未來到大學時,曾以為大學是一個沒有老師的喋喋不休、沒有學習的壓力、可以自由的支配時間的地方。可是,當我懷揣著夢想和希望來到大學之後,才發現大學並不是想像中的那麼的自由、那麼的輕松。想反,在大學里,我們需要付出更多的努力,才能成為一名合格的當代大學生。在大學里,我們不僅僅要學好專業知識,而且我們還要博覽群書,了解各方面的知識。同時,我們還得鍛煉其他方面的能力,比如交際能力、溝通能力、組織能力等等,只有不斷的完善自己,才能在今後的逐漸增加的就業競爭壓力中生存,才會有一個精彩而又充滿挑戰的人生。而完善自我、追逐夢想的過程卻不是盲目的,這就需要我們有一個好的職業生涯規劃。
二、自我評估
和大多數普通的大學生一樣,我也是一個平凡的大學生,沒有太大的值得一提的特長,也沒有能夠吸引無數眼球的相貌,更沒有讓人佩服驚嘆的驕人成就,我只是一名平凡而又普通的大學生。
可是,我也有著我自己的性格特點。我是一個崇尚和諧善意、情感多樣,熱情、友好、體貼、有著強烈情緒的人。而且,我對周圍的人和事物觀察得相當透徹,能夠洞察現在和將來。,能夠隨時都能發現事物的深層含義和價值,並能看到他人看不到的事物之間的內在聯系。同時,我也是一個有活力、待人寬厚、有同情心、有風度、喜歡讓人高興的人。只要有可能,我就會適應他人的需要和期望。不僅如此,我還是一個富於豐富的 想像力 和靈感的人,也善於創新和尋找新的方法。而且,我也有著強烈的自信和謹慎的態度,善於與人和諧相處,結交各種各樣的人,也善於為他人著想,在團體中有著非常好的人際關系。
但是,我也許多方面的不足。比如說,在公共場合發表講話的時候會感到緊張甚至忘記自己想要說的話,而且我的隨機應變的能力也非常的欠缺,不善於應變突發事件。而且,遇事不夠冷靜,容易沖動,做事缺少毅力,容易半途而廢。
三、環境評估
在當前經濟危機席捲全球的經濟形勢下,各個行業都大幅縮水,裁員的裁員,破產的破產。因此,就業壓力也越來越大。而對於我們機械行業,雖然影響較其他行業較小,但是仍然會影響到我們就業。所以,我想對我們機械行業的就業趨勢做一個簡介:
機械類專業是為各行各業製造並提供機械設備和電氣裝置的部門,被譽為“國民經濟的裝備部”。因為過去幾乎所有的工科院校都設有機械類專業,已經培養了不少專業人才,加上傳統的機械企業這幾年經濟效益普遍不好,對人才的吸納能力和吸引力都有限,所以目前機械行業的就業需求並不旺盛。但經過數年的改革調整,我國的機械企業逐步擺脫了計劃經濟的束縛,確立了現代企業制度,機械行業逐步跟上市場經濟和信息時代的步伐;而且,隨著形勢的發展,中國的製造業將得到較大的發展,有專家預測,21世紀的中國很可能成為全球的製造業和加工工業中心,在這種形勢下,對機械的需求必將有較大的提升。行業得到發展,繼而會對用人提出數量方面和質量方面的要求,因此專家預測,機械類專業人才的就業需求將得到改善,甚至有可能出現“熱銷”局面,高層次的技術人才將成為企業競相爭奪的對象。
在今後10年內,社會對機械行業畢業生總體需求較大,其中機電一體化專業人才為緊缺。目前不少企業的生產設備逐步更新換代,掌握機電一體化技術、懂得數控設備的操作與維護的機械專業人才將大受歡迎。此外機械設計製造與加工專業人才近年供需比也較高。因為這些專業將來的工作條件相對艱苦,需要從事車、鉗、銑、刨等工作,所以報讀這些專業的人不多,因而相關崗位上的人才缺口比較大。現在在不少地方的人才市場上,高級機械技術工人的待遇已直逼高學歷人士。另外工業工程和工業設計專業也有望成為熱門專業,因為我國的工業設計人才相對缺乏,我們20年來所培養的工業設計專業畢業生僅3萬人左右,只相當於目前韓國該專業在校生的數量。不過工業設計專業在當前的就業情形並不好,供大於求,這是因為工業設計的重要性還不能為人、為企業所了解、所看重。
從行業發展看,數控機床、工程機械、發電設備、印刷機械等專業的前景都值得看好。需要說明的是,機械類專業的名稱、內涵過去和今天有所不同,現在經調整、合並,機械類專業有“機械設計製造及其自動化”“材料成型及控制工程”“工業設計”“過程裝備與控制工程”“機械工程及自動化”“車輛工程”“機械電子工程”“汽車服務工程”“製造自動化與測控工程”“微機電系統工程”“製造工程”等專業。
機械類專業是一個是實實在在的專業,大到萬噸巨輪,小到行動電話,高精到太空梭,普通到曲別針的製造,都離不開該類人才。而且,機械類專業還具有通用性的優勢:學建築機械的去搞醫療器械能適應,學石油機械的去造飛機也沒問題。另外,並非只有機械行業才需要機械專業人才,任何行業,無論是生產型企業還是研發性單位,只要使用設備、生產線,就要給機械專業人才用武之地,如制葯、乳品、食品、橡膠等行業都需要他們來安裝和維護生產設備。只要整個社會經濟正常發展,該專業畢業生就不乏就業崗位,他們既可以成長為工程師,也能勝任管理崗位。
所以,機械專業是一個相對就業較易得專業。
四、目標職業要求分析
基本要求,作為一名合格的機械工程師,應積極適應當今世界製造業全球化、信息化、綠色化、服務化的發展趨勢,努力提高自身的綜合素質,成為具有良好職業道德和創新理念,掌握機械製造技術,懂得經濟、 管理知識 以及有關國際通則的新一代機械工程專業技術人員。
大綱所列考試內容,體現了一名合格的機械工程師應具備的各個方面的基本知識、相關知識與技能。要求我們不僅要大學所學的主要基礎與專業知識,更重要的是大學畢業後應擴展的新知識,因此,我必須要有較扎實的大學基礎、畢業後踏實的工作實踐和邊工作邊接受繼續教育的不斷積累!
總結:
通過對就業形勢、目標職業(機械工程師)的分析,我清楚認識到機械工程高級師是一個充滿挑戰與機遇的職業,機械工程師的工作環境與內容也符合自己的興趣;從整體情況和未來趨勢看,我把工業界選定為我發奮目標的方向是任重而道遠的。在今後八年裡,這將是我一直奮斗的目標!
五、目標和規劃
近期目標:(大學生活階段)
大學二年級
1、考取英語四級證書
2、通過國家二級計算機應用基礎考試
3、加大對專業知識的的學習,完成必修課,拿獎學金!
4、博覽群書,涉獵各方面的書籍,了解各方面與專業相關知識,扎實當工程師的基礎!
5、多與它人溝通,要建立起良好的人際關系網,加強口才,能流暢清晰的表達,增加自身競爭力
6、熟練學習好制圖軟體,如CAD,3DMAS等
大學三年級
1、爭取考取英語六級證書
2、通過國家二級C++考試
3、多到圖書館閱讀相關專業知識,並深入研究
4、保持好學習成績,拿一等獎學金
5、暑假期間到工地或公司進行實習,積累經驗
6、繼續加強口才,多與它人溝通
7、考慮去考取研究生
大學四年級
1、鞏固好專業知識,做到讓各門功課融會貫通,形成思維框架
2、保持好成績,做到名列前茅、拿國家獎學金
3、多到圖書館借一些求職的書籍,讓自己對的 面試 技巧有所了解
4、多參加一些招聘會,體驗現場,積累求職經驗
5、多看一些其他書籍,豐富自己的 文化 底蘊,如看人文社科學類的書或名著等
6、深入 學習英語 ,為求職時多添一份自信
7、多向畢業的師兄師姐交流、借鑒求職經驗認真完成畢業設計以及畢業論文,爭取的成績
8、努力加深對理論的學習,完善自我,同時提高自身能力
9、多方面了解用人單位的相關信息
10、多閱讀一些建築行業的書籍,並深入研究。
11、了解社會、認識國情,增長才幹,為今後的工作做鋪墊
12、機械工程師是個責任重大的工作,實行進來是很嚴謹的,不能有半點馬虎。所以要形成一個嚴密而又構架的思維,培養對待工作須一絲不苟的精神。
然後考取研究生
備選方案:
1、先在一家公式任職普通職員
2、期間,在積累工作經驗的同時,了解行規!
3、提高自身的社會閱歷,同時繼續努力學習英語
4、爭取做一名合格的技術人員,多向高級工程師學習,吸取經驗,多了解本行的內情,從事一些簡單設計工作,做好該做的工作
5、繼續學習相關機械工程行業的書籍,豐富自我。
6、為考取注冊機械工程師做准備,一方面要繼續學理論知識,另一方面提高自身能力。
畢業後三、五年
1、通過考取相關證件,爭取提升為工程師助理
2、要熟練工業行業的情況,深入學習建築項目全程設計中各個方面的知識,有機會則參加實戰
3、繼續學習好外語,在日常做到能與外語人士做簡單的交流
4、多閱讀機械工程相關書籍,結合機械工程的理論,分析學習各大型項目的方案,學習項目知識。
5、樹立正確的人生觀、世界觀,培養機械工程職業的道德素質
長期目標:(穩定工作階段)
畢業五年以後
1、成為工程師助理
2、工作鍛煉,書籍豐富知識
3、爭取考取工程師
六、總結
我的青春我做主,我選擇了我的青春為一個機械工程師奮斗,這個選擇是經過各種調查和各方面的對比而作出的,這個是一個適合我的選擇!我也有一套適合我的 實施方案 ,這是一個根據我的實際情況而定製的實施方案,總的分析了家庭的交際圈和想定居的地方的社會行業的分析,在結合自身所喜歡做的事,所以在眾多因素結合起來分析,就一句話——我的規劃,我能行!
③ 求南航計算機應用技術專業考研專業課和參考書
專業課有:
業務課一 --> 301數學一
業務課二 --> 422數據結構與操作系統
專業課加試 --> 543計算機組成原理與編譯原理
§數據結構與操作系統 參考書目:
《數據結構》嚴蔚敏,清華大學出版社;《計算機操作系統》湯子瀛,西安電子科技大學出版社。
--------------------------------------------------------------------------------
§數據結構與操作系統 考試大綱:
數據結構部分一、數據結構基本概念,演算法和簡單的演算法分析二、順序表和鏈表的存儲與基本操作;靜態鏈表;循環鏈表;雙向鏈表;三、棧和隊列的定義及其應用;棧和隊列的順序和鏈式存儲;四、字元串的定義、存儲和操作;字元串的模式匹配;五、數組的順序存儲表示;廣義表的定義和存儲結構,矩陣的壓縮存儲;六、二叉樹的定義、性質和存儲結構;遍歷二叉樹;樹的定義和存儲結構;霍夫曼編碼;七、圖的基本概念及其存儲表示:鄰接矩陣、鄰接表;圖的遍歷與連通性;最小生成樹;拓撲排序;關鍵路徑;最短路徑;八、查找:順序表查找;有序表查找;索引順序表查找;二叉排序樹;B-樹;哈希表的構造和沖突處理方法; 九、插入排序;交換排序;選擇排序;歸並排序;基數排序;外排序的基本過程;操作系統部分一、操作系統的基本概念二、進程管理:進程的引入,進程的定義,進程狀態及其轉換,PCB及其組織,原語,進程式控制制原語,進程同步,經典進程同步問題,進程通信,線程。三、調度的概念,隊列模型,調度演算法及其評價,死鎖的定義、產生的原因、產生的必要條件、處理死鎖的方法四、內存管理:鏈接與裝入,對換,連續內存分配方法,離散內存分配方法,虛擬內存分配方法,內存保護與共享五、設備管理:I/O體系結構,控制方法,I/O分配中的數據結構和分配方法,通道,設備獨立性及其實現方法,緩沖管理,設備處理等六、磁碟與文件系統:磁碟的基本概念、調度、性能改善和容錯,物理文件組織,外存分配方法和文件存儲空間的管理,邏輯文件組織,目錄及其管理,文件共享和保護七、操作系統介面類型,系統調用概念和實現方法
§計算機組成原理與編譯原理 參考書目:
《計算機組成原理》奉遠楨編,電子工業出版社;《編譯原理》陳火旺編,國防工業出版社;《編譯原理》陳火旺編,國防工業出版社。
--------------------------------------------------------------------------------
§計算機組成原理與編譯原理 考試大綱:
計算機組成原理部分第一章 概述 計算機各部件的作用和層次結構第二章 數據的表示 一、數值數據的表示二、非數值數據的表示 1.邏輯數據 2.中西文字元和多媒體信息三、校驗碼第三章 運算器與運算方法 1.算術和邏輯運算的實現 2.標志位 3.運算器結構第四章存儲系統一、存儲器分類、性能指標二、半導體存儲器三、高速緩存和虛擬存儲器四、磁表面和光存儲器第五章 指令系統一、指令格式二、定址方式和堆棧三、指令系統舉例第六章 中央處理機組織 一、CPU的結構與功能二、CPU控制流程和時序三、組合邏輯控制器設計四、微程序控制器設計第七章 輸入輸出組織一、I/O介面二、程序控制傳送和程序中斷三、DMA、通道和I/O處理機 編譯原理部分第一章:了解有關編譯程序的基本概念、結構第二章:掌握語言的定義與文法描述的基本概念、術語與文法改造方法; 第三章:掌握有限自動機、正規式的概念、演算法;正規式與有限自動機、正規文法的相互轉換。 第四章:掌握LL(1)分析方法;算符文法;LR(K)分析方法。第五章:掌握屬性文法的概念;S—屬性文法、L—屬性文法的定義、翻譯模式以及計算繼承屬性、綜合屬性的方法。第六章:掌握賦值語句與布爾表達式的翻譯;控制語句的翻譯;過程調用與類型檢查。第七章:運行存儲組織;靜態與動態存儲管理與實現。第八章:掌握優化概念與局部優化、數據流方程與循環優化方法。
參見:http://www.graate.nuaa.e.cn/zsjz/zydetail.asp?zydm=081203計算機應用技術&yxdm=004信息科學與技術學院
④ 跪求哈夫曼編碼壓縮與其它壓縮演算法的比較(復雜性和壓縮效果)
(1)所形成的Huffman編碼的碼字是不是唯一的,但是可以被指定為唯一的編碼效率為「1」大,小的是「0」時,兩個最小概率符號賦值。反之也可以。如果兩個符號的發生的概率是相等的,排列無論前面是可能的,所以霍夫曼碼字的結構不是唯一的,對於相同的信息源,不管如何在上述的順序安排的,它的平均碼字長度是不改變,因此,編碼效率是獨一無二的。
(2)只有當不均勻時,每個符號的信息源的發生的概率,霍夫曼編碼的效果是唯一明顯的。
(3)霍夫曼編碼必須是精確的原始文件中的各符號的發生頻率的統計數據,並且如果沒有準確的統計數據,壓縮將低於預期。 Huffman編碼通常必須經過兩道,第一遍統計的第二次產生編碼,編碼速度是比較慢的。電路的復雜性的另一種實現的各種長度的編碼,解碼處理是相對復雜的,因此,解壓縮處理是相對緩慢。
(4)Huffman編碼只能使用整數來表示一個符號,而不是使用小數,這在很大程度上限制了壓縮效果。
(5)霍夫曼是所有的位,如果改變其中一個可以使數據看起來完全不同
⑤ 一文帶你認識30個重要的數據結構和演算法
數組是最簡單也是最常見的數據結構。它們的特點是可以通過索引(位置)輕松訪問元素。
它們是做什麼用的?
想像一下有一排劇院椅。每把椅子都分配了一個位置(從左到右),因此每個觀眾都會從他將要坐的椅子上分配一個號碼。這是一個數組。將問題擴展到整個劇院(椅子的行和列),您將擁有一個二維數組(矩陣)。
特性
鏈表是線性數據結構,就像數組一樣。鏈表和數組的主要區別在於鏈表的元素不存儲在連續的內存位置。它由節點組成——實體存儲當前元素的值和下一個元素的地址引用。這樣,元素通過指針鏈接。
它們是做什麼用的?
鏈表的一個相關應用是瀏覽器的上一頁和下一頁的實現。雙鏈表是存儲用戶搜索顯示的頁面的完美數據結構。
特性
堆棧是一種抽象數據類型,它形式化了受限訪問集合的概念。該限制遵循 LIFO(後進先出)規則。因此,添加到堆棧中的最後一個元素是您從中刪除的第一個元素。
堆棧可以使用數組或鏈表來實現。
它們是做什麼用的?
現實生活中最常見的例子是在食堂中將盤子疊放在一起。位於頂部的板首先被移除。放置在最底部的盤子是在堆棧中保留時間最長的盤子。
堆棧最有用的一種情況是您需要獲取給定元素的相反順序。只需將它們全部推入堆棧,然後彈出它們。
另一個有趣的應用是有效括弧問題。給定一串括弧,您可以使用堆棧檢查它們是否匹配。
特性
隊列是受限訪問集合中的另一種數據類型,就像前面討論的堆棧一樣。主要區別在於隊列是按照FIFO(先進先出)模型組織的:隊列中第一個插入的元素是第一個被移除的元素。隊列可以使用固定長度的數組、循環數組或鏈表來實現。
它們是做什麼用的?
這種抽象數據類型 (ADT) 的最佳用途當然是模擬現實生活中的隊列。例如,在呼叫中心應用程序中,隊列用於保存等待從顧問那裡獲得幫助的客戶——這些客戶應該按照他們呼叫的順序獲得幫助。
一種特殊且非常重要的隊列類型是優先順序隊列。元素根據與它們關聯的「優先順序」被引入隊列:具有最高優先順序的元素首先被引入隊列。這個 ADT 在許多圖演算法(Dijkstra 演算法、BFS、Prim 演算法、霍夫曼編碼 )中是必不可少的。它是使用堆實現的。
另一種特殊類型的隊列是deque 隊列(雙關語它的發音是「deck」)。可以從隊列的兩端插入/刪除元素。
特性
Maps (dictionaries)是包含鍵集合和值集合的抽象數據類型。每個鍵都有一個與之關聯的值。
哈希表是一種特殊類型的映射。它使用散列函數生成一個散列碼,放入一個桶或槽數組:鍵被散列,結果散列指示值的存儲位置。
最常見的散列函數(在眾多散列函數中)是模常數函數。例如,如果常量是 6,則鍵 x 的值是x%6。
理想情況下,散列函數會將每個鍵分配給一個唯一的桶,但他們的大多數設計都採用了不完善的函數,這可能會導致具有相同生成值的鍵之間發生沖突。這種碰撞總是以某種方式適應的。
它們是做什麼用的?
Maps 最著名的應用是語言詞典。語言中的每個詞都為其指定了定義。它是使用有序映射實現的(其鍵按字母順序排列)。
通訊錄也是一張Map。每個名字都有一個分配給它的電話號碼。
另一個有用的應用是值的標准化。假設我們要為一天中的每一分鍾(24 小時 = 1440 分鍾)分配一個從 0 到 1439 的索引。哈希函數將為h(x) = x.小時*60+x.分鍾。
特性
術語:
因為maps 是使用自平衡紅黑樹實現的(文章後面會解釋),所以所有操作都在 O(log n) 內完成;所有哈希表操作都是常量。
圖是表示一對兩個集合的非線性數據結構:G={V, E},其中 V 是頂點(節點)的集合,而 E 是邊(箭頭)的集合。節點是由邊互連的值 - 描述兩個節點之間的依賴關系(有時與成本/距離相關聯)的線。
圖有兩種主要類型:有向圖和無向圖。在無向圖中,邊(x, y)在兩個方向上都可用:(x, y)和(y, x)。在有向圖中,邊(x, y)稱為箭頭,方向由其名稱中頂點的順序給出:箭頭(x, y)與箭頭(y, x) 不同。
它們是做什麼用的?
特性
圖論是一個廣闊的領域,但我們將重點介紹一些最知名的概念:
一棵樹是一個無向圖,在連通性方面最小(如果我們消除一條邊,圖將不再連接)和在無環方面最大(如果我們添加一條邊,圖將不再是無環的)。所以任何無環連通無向圖都是一棵樹,但為了簡單起見,我們將有根樹稱為樹。
根是一個固定節點,它確定樹中邊的方向,所以這就是一切「開始」的地方。葉子是樹的終端節點——這就是一切「結束」的地方。
一個頂點的孩子是它下面的事件頂點。一個頂點可以有多個子節點。一個頂點的父節點是它上面的事件頂點——它是唯一的。
它們是做什麼用的?
我們在任何需要描繪層次結構的時候都使用樹。我們自己的家譜樹就是一個完美的例子。你最古老的祖先是樹的根。最年輕的一代代表葉子的集合。
樹也可以代表你工作的公司中的上下級關系。這樣您就可以找出誰是您的上級以及您應該管理誰。
特性
二叉樹是一種特殊類型的樹:每個頂點最多可以有兩個子節點。在嚴格二叉樹中,除了葉子之外,每個節點都有兩個孩子。具有 n 層的完整二叉樹具有所有2ⁿ-1 個可能的節點。
二叉搜索樹是一棵二叉樹,其中節點的值屬於一個完全有序的集合——任何任意選擇的節點的值都大於左子樹中的所有值,而小於右子樹中的所有值。
它們是做什麼用的?
BT 的一項重要應用是邏輯表達式的表示和評估。每個表達式都可以分解為變數/常量和運算符。這種表達式書寫方法稱為逆波蘭表示法 (RPN)。這樣,它們就可以形成一個二叉樹,其中內部節點是運算符,葉子是變數/常量——它被稱為抽象語法樹(AST)。
BST 經常使用,因為它們可以快速搜索鍵屬性。AVL 樹、紅黑樹、有序集和映射是使用 BST 實現的。
特性
BST 有三種類型的 DFS 遍歷:
所有這些類型的樹都是自平衡二叉搜索樹。不同之處在於它們以對數時間平衡高度的方式。
AVL 樹在每次插入/刪除後都是自平衡的,因為節點的左子樹和右子樹的高度之間的模塊差異最大為 1。 AVL 以其發明者的名字命名:Adelson-Velsky 和 Landis。
在紅黑樹中,每個節點存儲一個額外的代表顏色的位,用於確保每次插入/刪除操作後的平衡。
在 Splay 樹中,最近訪問的節點可以快速再次訪問,因此任何操作的攤銷時間復雜度仍然是 O(log n)。
它們是做什麼用的?
AVL 似乎是資料庫理論中最好的數據結構。
RBT(紅黑樹) 用於組織可比較的數據片段,例如文本片段或數字。在 Java 8 版本中,HashMap 是使用 RBT 實現的。計算幾何和函數式編程中的數據結構也是用 RBT 構建的。
在 Windows NT 中(在虛擬內存、網路和文件系統代碼中),Splay 樹用於緩存、內存分配器、垃圾收集器、數據壓縮、繩索(替換用於長文本字元串的字元串)。
特性
最小堆是一棵二叉樹,其中每個節點的值都大於或等於其父節點的值:val[par[x]]