集合(Set)算法
由一些肯定的、彼此不一樣的成員(Member)或者元素(Element)構成的一個總體。成員取自一個更大的範圍,稱爲基類型(Base Type)。集合中成員的個數稱爲集合的基數(Cardinality)。數據結構
例如,集合 R 由整數 三、 四、 5 組成,寫成 R={3, 4, 5}。數據結構和算法
此時R的成員是 三、四、 5, R 的基類型是整型,R的基數是3。函數
依賴於集合的基類型,它的成員常常有一個線性順序。編碼
集合的成員叫作該集合的子集(Subset),子集中的每一個成員都屬於該集合。對象
沒有元素的集合稱爲空集(Empty Set,又稱爲 Null Set), 記做Φ。遞歸
如上例中, 3 是R 的成員,記爲: 3∈R, 6不是R的成員,記爲: 6∉R。 {3, 4}是 R 的子集。數學
集合的表示法it
1) 窮舉法: S={2, 4, 6, 8, 10};io
2) 描述法: S={x|x 是偶數,且 0≤x≤10}。
三、 集合的特性
1) 肯定性:任何一個對象都能被確切地判斷是集合中的元素或不是;
2) 互異性:集合中的元素不能重複;
3) 無序性:集合中元素與順序無關。
計量單位(Unit): 按照IEEE規定的表示法標準,字節縮寫爲「 B」,位縮寫爲「 b」,兆字節(220字節)縮寫爲縮寫爲「 MB」,千字節(210字節)縮寫爲「 KB」。
階乘函數Factorial Function
階乘函數 n!是指從 1 到 n 之間全部整數的連乘,其中 n 爲大於 0 的整數。所以, 5!=1*2*3*4*5=120。特別地, 0!=1。
取下整和取上整(Floor and Ceiling):
實數 x 的取下整函數(Floor)記爲⌊x⌋,返回不超過 x 的最大整數。例如, ⌊3.4⌋=3,與⌊3.0⌋的結果相同。
實數 x 的取上整函數(Ceiling)記爲⌈x⌉,返回不小於 x 的最小整數。例如, ⌈3.4⌉=4,與⌈4.0⌉的結果相同。
取模操做符( Modulus):
取模函數返回整除後的餘數,有時稱爲求餘。在 C#語言中取模操做符的表示爲 n%m。從餘數的定義可知, n%m 獲得一個整數,知足 n=qm+r,其中 q 爲一個整數,且 0≤r<m。
對數:
若是a(a>0,a≠1)的b次冪等於N,就是ab=N,那麼數b叫作以a爲底N的對數(Logarithm),記做logaN=b,其中a叫作對數的底數,N叫作真數。
從定義可知,負數和零沒有對數。事實上,由於 a>0,因此不論 b 是什麼實數,都有 ab>0,這就是說不論 b 是什麼數,N 永遠是正數,所以負數和零沒有對數。
在一個線性表中查找指定值所使用的折半查找算法:首先與中間元素進行比較,以肯定下一步是在上半部分進行查找仍是在下半部分進行查找。而後繼續將適當的子表分半,直到找到指定的值。一個長度爲n的線性表被促逐次分半,直到最後的子表中只有一個元素,一共須要進行多少次呢?答案是log2n次。
本書中用到的對數幾乎都以 2 爲底,這是由於數據結構和算法老是把事情一分爲二,或者用二進制位來存儲編碼。
遞歸:
一個算法調用本身來完成它的部分工做,在解決某些問題時,一個算法須要調用自身。若是一個算法直接調用本身或間接地調用本身,就稱這個算法是遞歸的(Recursive)。根據調用方式的不一樣,它分爲直接遞歸(Direct Recursion)和間接遞歸(Indirect Recursion)。
有不少數學函數是以遞歸來定義的。
如你們熟悉的階乘函數,咱們能夠對n!做以下定義:
階乘函數的C#語言實現以下。
public static long fact(int n)
{
if(n <= 1)
return 1;
else
return n * fact(n-1);
}
遞歸算法一般不是解決問題最有效的計算機程序,由於遞歸包含函數調用,函數調用須要時空開銷。因此,遞歸比其餘替代選擇諸如while 循環等,所花費的代價更大。