1.
p问题,可以在多项式时间内解决的问题,polynomial problem。
np 问题,可以在多项式的时间里验证一个解的问题,non-deterministic polynomial
npc问题,如果所有np问题都能在多项式时间内转化为某np问题,则称该np问题为npc问题,np complete
2.
3. 凸壳
凸壳指包含一个平面点集的最小凸区域。
凸区域指要求区域内任意两点的连线仍在该区域内。
设S是平面上n个点的集合,则S的凸壳是一个凸多边形,它包含所有n点且面积最小。事实上求点集S的凸壳就是要在S中选出壳上的点并排出围成凸多边形的次序。
Graham扫描算法
处理的思路是设想有一 内点O并且不妨设想O就是坐标原点,这时点集S中所有各点相对轴OX有一个 倾角。所有各点按倾角 递增排序后,如果某一点不是壳上顶点,则它必然在两个壳顶点与点O形成的三角形内部。
Graham扫描的实质是围绕已经按"倾角"排序的各顶点进行一次扫描,在扫描过程中消去在凸壳内部的点,留下以希望次序排列的壳顶点。
4.函数的参数在被调用过程中收到的是参数的 副本,当对 象被传递的时候,传递的是对象的指针,而对象的各个域则不拷贝;
5.布尔运算" and ","or"具有短路功能----即第一个元素可以确定整个表达式的值后,后面的表达式是不操作的。
6.RAM模型用来讨论计算机算法效率问题:
算数指令:加,减,乘,除,取余,向上向下求整,
数据移动指令:装入,存储,复制
控制指令:条件和非条件转移,子程序调用,返回
其中每一条指令的执行时间都是常量时间。
7.一般来讲,堆排序算法使用的是大根堆,构造优先队列的时候使用小根堆。当某一性质既适合大根堆有适合小根堆;
优先级队列在作业调度中有应用;
8.快速排序c语言:
9.
2.
凸壳可以看作是点集合的边界,其精确定义如下:
设集合S是n维空间的k个点组成的集合,即S={x1,x2,...xk},xi是n维向量。定义S的凸壳Conv(S)为:
Conv(S)={x=λ1*x1+λ2*x2+...+λk*xk | λ1+λ2+ . . .+λk=1}
3. 凸壳
凸壳指包含一个平面点集的最小凸区域。
凸区域指要求区域内任意两点的连线仍在该区域内。
设S是平面上n个点的集合,则S的凸壳是一个凸多边形,它包含所有n点且面积最小。事实上求点集S的凸壳就是要在S中选出壳上的点并排出围成凸多边形的次序。
Graham扫描算法
处理的思路是设想有一 内点O并且不妨设想O就是坐标原点,这时点集S中所有各点相对轴OX有一个 倾角。所有各点按倾角 递增排序后,如果某一点不是壳上顶点,则它必然在两个壳顶点与点O形成的三角形内部。
Graham扫描的实质是围绕已经按"倾角"排序的各顶点进行一次扫描,在扫描过程中消去在凸壳内部的点,留下以希望次序排列的壳顶点。
4.函数的参数在被调用过程中收到的是参数的 副本,当对 象被传递的时候,传递的是对象的指针,而对象的各个域则不拷贝;
5.布尔运算" and ","or"具有短路功能----即第一个元素可以确定整个表达式的值后,后面的表达式是不操作的。
6.RAM模型用来讨论计算机算法效率问题:
算数指令:加,减,乘,除,取余,向上向下求整,
数据移动指令:装入,存储,复制
控制指令:条件和非条件转移,子程序调用,返回
其中每一条指令的执行时间都是常量时间。
7.一般来讲,堆排序算法使用的是大根堆,构造优先队列的时候使用小根堆。当某一性质既适合大根堆有适合小根堆;
优先级队列在作业调度中有应用;
8.快速排序c语言:
void
QuickSort(
int
a[],
int
numsize)
/*a是整形数组,numsize是元素个数*/
{
int
i=0,j=numsize-1;
int
val=a[0];
/*指定参考值val大小*/
if
(numsize>1)
/*确保数组长度至少为2,否则无需排序*/
{
while
(i<j)
/*循环结束条件*/
{
/*从后向前搜索比val小的元素,找到后填到a[i]中并跳出循环*/
for
(;j>i;j--)
if
(a[j]<val)
{
a[i++]=a[j];
break
;
}
/*从前往后搜索比val大的元素,找到后填到a[j]中并跳出循环*/
for
(;i<j;i++)
if
(a[i]>val)
{
a[j--]=a[i];
break
;
}
}
a[i]=val;
/*将保存在val中的数放到a[i]中*/
QuickSort(a,i);
/*递归,对前i个数排序*/
QuickSort(a+i+1,numsize-i-1);
/*对i+2到numsize这numsize-1-i个数排序*/
}
}