算法

第1章:(大题:推导题)

1、母函数:相关类型题请看课本11页的

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1、Huffman树:(课本29页)

算法设计:

Huffman树的构造:已知n个字符的权为Pi 其中i=1,2,3……n

Step1:构造n个带权为Pi 的只有根节点的二元树集。L={T1,T2……Tn}

Step2:在L中选择权最小的两棵二元树为左右子树组成一棵新的二元树,其权为左右子树的权之和;

Step3:在L中删除两棵子树,将新树加入树集L;

Step4:重复Step2、Step3直至L中只含一棵二元树。

时间复杂性分析:时间复杂度为 T=O(n^2)

空间复杂性:其空间复杂度为T=O(n+1)。

2、二分查找(课本33页)

算法设计:

READ A(1:n), x

K←1, m←n

While k≤ m do

j←INT[(K+M)/2]

IF x=A[j] THEN

EXIT

IF x<a[j] THEN

m←j-1

ELSE

K←j+1

END

IF k>m THEN

j←0

OUTPUT j

时间复杂度分析:最好的情况下为一次查找到查找数据,即x=A[n/2].

最坏的情况下,设n=2L,则要查找L+1次,即log2n+1次。

所以,可以得到时间复杂度为:O(log2n)

空间复杂度分析:由于在查找中,n个元素占用空间为n,故其空间复杂度为O(n)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.矩阵的链乘:

算法设计

READ n, r(1:n+1)

mij ← 0

S←0

for m = n-1 to 1 do

{ for i = 1 to m do

{ for j = S+1 to n do

{ for k = i to j-1 do

{ x(k) = m(i,k)+m(k+1,j)+r(i)r(k+1)r(j+1)

}

}

m(i,j) = min(x(k))

}

S←S+1

}

If m(i,j)!=0

{then output i,j}

时间复杂性分析:因为算法中使用了4个FOR循环,而真正执行时间却是最内层的一个循环,其数量级只有n3 ,所以时间复杂度为 T=O(n3

空间复杂性:因为所需要用到的空间只是存储m(i,j),所以其空间复杂度为T=O(n2)。

1、二分插入排序法:(课本224):可能性大

void binSort(SortObject * pvector)

{
int i, j, left, mid, right;
RecordNode temp;
for( i = 1; i < pvector->n; i++ )
{
temp = pvector- >record[i];
left = 0; right = i – 1;    
     while (left <= right)
    {
     mid = (left+right)/2;

if (temp.key < vector->record[mid].key)
     right = mid-1;

else

         left = mid+1;

}//while

for(j=i-1; j>=left; j--)

pvector->record[j+1] =

pvector->record[j];     if(left != i)

pvector->record[left] = temp;

}// for

} // binSort

算法思想描述:在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们
中间的那个元素比,如果小,则对前半再进行折半,否则对后半
进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间
的所有元素后移,再把第i个元素放在目标位置上。

时间复杂性分析:

算法的移动次数:

  1. 最坏的情况为n2/2
  2. 最好的情况为n
  3. 平均移动次数为O(n2)

所以二分法插入排序算法的平均时间复杂度为T(n)= O(n2)

空间复杂度分析:由于在查找中,n个元素占用空间为n,故其空间复杂度为O(n)

2、下溢排序法:(课本226):可能性小

S1. k←n。

S2. j←l,lab←0。

S3. 若x(j)>x(j+1),则转S4,否则,转S5。

S4. r←x(j),x(j) ←x(j+1),x(j+1) ←r,lab←l。

S5. j←j+1。

S6. 若j<k,则转S3,否则,转S7。

S7. 若lab=1,则作【k←k-1,转S2】,否则,结束

时间复杂性分析:

下溢排序最好时间复杂度是O(n),下溢排序最坏时间复杂度为O(n2),

下溢排序平均时间复杂度为O(n2)

空间复杂度分析:由于在查找中,n个元素占用空间为n,故其空间复杂度为O(n)

你可能感兴趣的:(算法)