集合(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 循环等,所花费的代价更大。