當爲解決某一個問題而且選擇數據結構時候,應當執行以下幾個步驟:
(1) 分析問題,確定算法遇到的資源限制(內外存空間限制和執行時間的限制)
(2) 確定必須支持的基本運算,度量每個運算所都到的資源限制.基本運算包括向數據結構插入一個新數據項,從數據結構中刪除一個數據項和搜索指定的數據項.
(3) 選擇最接近這些資源開銷的數據結構(分析不同數據結構的比較和算法分析)
◆ 思考在算法的時候先假設條件已經具備,在這樣的條件上會有什麼情況出現,然後再慢慢補全信息,最後在實現假設的條件
◆ 散列:一個數*奇數有利於均勻分佈
◆ 定位最快的方法是散列,樹可以轉化爲散列
◆ 離散型的變量相互間的有無關係可以用並集操作,對於數據量比較大的:線性數組<錶鏈<樹<矩陣<散列
算法的定義:
(1) 有輸入
(2) 有輸出
(3) 確定性
(4) 有窮性
(5) 能行性
算法效率時間測定
#include<time.h>
Long start,stop;
Time(&start);
程序段
Time(&stop)
Runtime=stop-start;
數據的存儲結構有以下4種
(1) 順序存儲方法(Sequential storage) 定義:物理和邏輯上的元素都相鄰—exp-數組
(2) 索引存儲方法(Indexed storage) 除了元素信息還有索引表,索引項的一般形式:(關鍵碼,地址).有稠密和稀疏索引.
(3) 鏈接存儲方法(Linked storage) 定義:元素之間的邏輯關係用附加的指針指示.
(4) 散列存儲方法(Hashing storage) 定義:關鍵碼通過一個函數計算直接得到該結點的地址
數據類型分爲原子類型(不可分)和結構類型
Assert.h庫 的斷言機制
程序插入assert(x>0) 如果滿足x>0就可繼續執行後續語句,否則調用stdlib.h中的abort()打印出錯的行號和列號並終止執行.
抽象數據類型的特徵是使用與實現分離,實行封裝和信息隱蔽,把類型的聲明實現分離開來
面向對象=對象+類+繼承+消息通信
基類又稱父類,超類或泛化類.派生類又稱爲子類或特化類.
建立對象的結構和爲解決問題需要執行的時間序列(場景),據此建立類的繼承層次結構.
Union有構造函數和析構函數,所有數據成員共享相同的存儲空間(struct的閹割版)
靜態聲明的變量只有main結束才釋放
Endl輸出一個換行符並清空流
Printf的效率是cout的2倍
Open()文件操作函數返回文件開始地址
引用傳遞聲明fun(T&);使用引用的的參數只能是對象或者變量
常值引用格式fun(constT& a);函數中不能修改常值函數,const成員函數不能調用非const成員函數
Int sum(int a[],int n)
{
If(n>0)returna[n-1]+sum(a,n-1);
Else return 0;
}
如果傳遞的是對象要注意構造函數中用new分配了的空間,如果不手工定義複製構造函數,那麼當函數結束將會撤銷空間, 造成調用者的對象已被撤銷(引用傳遞不存在這種錯誤)
多態性(polymorphism)是指允許同一個函數(或操作符)有不同的版本,.對於不同的對象執行不同的版本.C++支持以下兩種多態性:
(1) 編譯時的多態性,表現爲函數名(或操作符)的重載exp:C++的 abs(T)
(2) 運行時的多態性,通過派生類和虛函數來實現.
一個類至少有一個純虛函數,那麼該類就是抽象類(abstract class) 不能有實例,派生類必須要實現基類沒有實現的所有函數
通常以下3種情況要用到遞歸
1. 定義是遞歸的:數列,階乘等
2. 數據結構是遞歸的exp:
LinkNode *FindRear(LinkNode *f)
{
If(f==NULL)returnNULL;
Else if(f->link==NULL)return f;
Else return FindRear(f->link);
}
3.問題的解法是遞歸的:漢諾塔
遞歸和遞推是不同的概念(遞推問題可以用遞歸方法求解,也可以用迭代的方法求解)
求得問題規模爲i-1的解後,能從以求得的規模爲1,2,…,i-1的一系列的解,構造出問題規模爲i的解
尾遞歸可以直接用迭代直接寫出(不用棧保存,因爲後面的語句程序直接結束不用保存數據)
一般從遞歸過程改爲非遞歸過程的方法是先根據遞歸算法畫出程序流程圖,然後建立起循環結構
二叉樹有序是指有分左右孩子,跟度爲2的樹不同就在此
Rmq問題的標準解法是O(nlogn)的預處理,O(1)的查詢
線段樹可以實現O(nlogn)的預處理,O(logn)的查詢
左偏樹:對於每個內部節點都有shortest(lc(x))>shortest(rc(x));
(a) 最右邊從根到外部節點路徑是從根到外部結點路徑中最短的,其長度就是shortest(x)
(b) N>2^shortest(x) -1(也是至少的內部結點);左偏樹的前shortest(x)層不存在外部結點;
多文件中運用全局變量,其中一個文件直接int 其他文件全部用extern int
19<c++沉思錄>