您的位置:首页 > 其它

第2章 算法分析:课后习题

2014-07-20 22:46 302 查看

1:Eratosthenes筛选法

算法描述O(NloglogN):   时间复杂度的推断》》Knuth,Volume 2,page 394

Eratosthenes筛是一种用于计算小于N的所有素数的方法。我们从制作整数2到N的表开始。我们找出最小的未被删除的整数i,打印i,然后删除i,2i,3i,......。当i>√N时,算法终止。

算法代码:

void Eratosthenes(int n)
{
for (int i = 2; i < n+1; i++)
a[i]=1;
for (int i = 2; i <= sqrt(n); i++)
{
if(a[i]==1)
{
int j=2;
while(i*j <= n)
{
a[i*j]=0;
j++;
}
}

}
for (int i = 2; i <= n; i++)
if(a[i]==1)
cout<<i<<" ";
}

程序演示:



2:求解主要元素

算法描述:

大小为N的数组A,其主要元素是一个出现次数超过N/2的元素(从而这样的元素最多有一个)。例如数组  3,3,4,2,4,4,2,4,4 有一个主要元素4,
而数组3,3,4,2,4,4,2,4没有主要元素。如果没有主要元素,那么你的程序应该指出来。

算法代码:

int majority(int a[], int b[], int n)
{
if (n==0)
return tmp;
if (n==1)
return a[0];
if(n%2==1)
{
tmp=a[n-1];
n--;
}
int i=0,j=0;
for (i = 0, j = 0; i < n; i+=2)
if(a[i] == a[i+1])
b[j++]=a[i];
majority(b, a, j);
}


算法演示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息