算法设计与分析——习题一

习题1

1.1. 用于计算gcd(m,n)的欧几里得算法

1.1.1. 算法描述

 辗转相除法,又名欧几里得算法(Euclidean algorithm),是求最大公约数(greater common divisor)的一种,通常做法是:用较小的数去除较大的数,用第二余数再去除第一余数,最终我们可以得到最终的余数为0以及最大公约数。

1.1.2.伪代码

Euclid(m,n)

//使用Euclid计算gcd(m,n)

//输入:两个不全为0的非负整数m,n

//输出:m,n的最大公约数

while n≠0 do

  r ← m mod n

  m← n

  n ← r

return m

1.1.3.算法实现

int Euclid(int m,int n){

    int r;

    while(n!=0){

        r=m%n;

        m=n;

        n=r;

    }

    return m;

}

1.2. 用于计算gcd(m,n)的枚举算法

 

1.2.1.算法描述

枚举算法,是求最大公约数的一种,通常做法是:从1到自己本身进行遍历,如果说能够被整除,那么将这个数进行返回。

1.2.2.伪代码

 enumeration(m,n)

//使用 enumeration计算gcd(m,n)

//输入:两个不全为0的非负整数m,n

//输出:m,n的最大公约数

for i 1 to n by incr 1 do

  if ((n mod i == 0) and (m mod i == 0) ) then

ans = n

     end if

return ans

1.2.3.算法实现

int  enumeration(int m,int n){

    int res=1;

    for(int i=1;i<=n;i++)

        if(m%i==0&&n%i==0) res=i;

    return res;

}

1.3. 实现Eratosthenes筛选法

 

1.3.1.算法描述

埃拉托色尼筛选法(sieve of Eratosthenes) ,是用来筛选素数(Prime)的一种方法,通常做法是:新建一个布尔类型的数组,从1到该数字的平方根(root)进行遍历,将自己本身的倍数变为1,那么,剩余为0的数字将是素数

1.3.2.伪代码

Eratos(n)

//使用sieve of Eratosthenes打印素数表

//输入:给定数字的最大区间

//输出:小于该数字的自然数的所有素数(从小到大)

np[n+1]

for i 1 to n+1 incr 1 do

while i*j<=n do

Np[i*j]=1

for i 2 to n+1 incr 1 do

if np[i]==0 then

print i

end if

1.3.3.算法实现

void Eratos(int n){

    int np[n+1]={0};

    for(int i=2;i*i<=n;i++)

        for(int j=2;j*i<=n;j++)

            np[j*i]=1;

    for(int i=2;i<n+1;i++)

        if(np[i]==0) cout<<i<<" ";

}

1.4. 试验小结


算法


时间复杂度


空间复杂度


欧几里得算法


O(logn)


O(1)


枚举算法


O(n)


O(1)


埃拉托色尼筛选法


O(nlogn)


O(1)

表1-1

关于三种算法,时间空间复杂度分析如上表1-1,算法课第一节课我们学习了欧几里得和枚举两种可计算gcd的算法,然而,我们欧几里得算法仍然可以简化代码,简化为递归进行求解gcd,这样实现,时间复杂度并不会提高,而空间复杂度会提高。埃氏筛法和传统素数求解不一样,传统素数求解需要O(n^2)的时间复杂度,这种筛法大大提高了求解素数的效率。

原文地址:https://www.cnblogs.com/littlepage/p/11450795.html

时间: 2024-11-13 08:01:52

算法设计与分析——习题一的相关文章

算法设计与分析基础(第3版)读书笔记(及几处翻译上的错误~~)

算法设计与分析基础(第3版) p16 in-place翻译为'在位'?'就地'更合适点 p38 amortized应翻译为'均摊','摊销'这个词简直莫名其妙(可能因为翻译是做算法交易导致的?) p64 迭代优于递归(迭代始终是增量式的,而递归就没办法增量了,除非能够dump整个运行时栈) p73 通过算法可视化得到一个更好的非递归算法(人的图像认知直觉思维?) p79 验证一个拓扑是环.星.还是团?(这个地方有点意思,因为我想到了动态的Verify) p87 凸包问题:从数据结构上讲,Set<

算法设计与分析(屈婉玲)pdf

下载地址:网盘下载 算法设计与分析本教材为计算机科学技术专业核心课程"算法设计与分析"教材.<算法设计与分析>以算法设计技术和分析方法为主线来组织各知识单元,主要内容包括基础知识.分治策略.动态规划.贪心法.回溯与分支限界.算法分析与问题的计算复杂度.NP完全性.近似算法.随机算法.处理难解问题的策略等.书中突出对问题本身的分析和求解方法的阐述,从问题建模.算法设计与分析.改进措施等方面给出适当的建议,同时也简要介绍了计算复杂性理论的核心内容和处理难解问题的一些新技术. &

(转)常用的算法设计与分析-一夜星辰的博客

算法设计与分析 分治法 思想 1. 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同.递归地解这些子问题,然后将各子问题的解合并得到原问题的解. 2. divide-and-conquer(P) { if(|P| <= n0)adhoc(P); divide P into samller subinstances P1,P2...,Pk; for(int i = 1;i < k;i++) { yi = divide-and-conquer(Pi); } retu

算法设计与分析 ------最近对问题与8枚硬币问题

利用减治法实现8枚硬币问题: 参考资料:http://blog.csdn.net/wwj_748/article/details/8863503    算法设计--八枚硬币问题 1 #include "stdafx.h" 2 #include <iostream> 3 #include <stdio.h> 4 using namespace std; 5 6 7 void eightcoin(int arr[]); 8 void compare(int a,in

《计算机算法设计与分析》v4 第1章 算法概述 算法实现题答案

博主今年刚上大三,正好开算法这门课.由于博主本人比较喜欢算法但又比较懒,啃不动算法导论,所以决定拿这本书下手. 这本书是王晓东的第四版<计算机算法设计与分析>.初步打算将每章后面的算法题都用代码实现. 有些题跟某个ACM题目很像,我会把该ACM题的链接贴上.有的题没OJ交所以可能是错的.如有发现,还望指出. 1-1 统计数字问题 http://poj.org/problem?id=2282 这个题要按位分解,一位一位的来处理. #include<iostream> #include

【通知】《算法设计与分析》实验课、理论课补课、考试时间、加分等安排 及 个人目标设定

Logistic回归为概率型非线性回归模型,是研究二分类观察结果与一些影响因素之间关系的一种多 变量分析方法.通常的问题是,研究某些因素条件下某个结果是否发生,比如医学中根据病人的一些症状来判断它是 否患有某种病. 在讲解Logistic回归理论之前,我们先从LR分类器说起.LR分类器,即Logistic Regression Classifier. 在分类情形下,经过学习后的LR分类器是一组权值,当测试样本的数据输入时,这组权值与测试数据按 照线性加和得到 这里是每个样本的个特征. 之后按照s

算法设计与分析——回溯法算法模板

以深度优先方式系统搜索问题解的算法称为回溯法.在回溯法中,解空间树主要分为了四种子集树.排列树.n叉树和不确定树. 在<算法设计与分析课本>中介绍了11个回溯法的问题样例,这里根据解空间树的类型做一个分类. 子集树 装载问题 符号三角形问题 0-1背包问题 最大团问题 算法模板: void backtrack(int t) { if(搜索到叶子结点) { return; } for(i=0; i<=1; i++) //01二叉树 { if(满足约束函数和限界函数)//剪枝 { backt

算法设计与分析-Week12

题目描述 You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the c

算法设计与分析课程复习笔记(1)

一.计算模型 1.1 定义: 我们在思考和处理算法的时候是机器无关.实现语言无关的.所有的算法运行在一种"抽象的机器"之上,这就是计算模型. 1.2 种类 图灵机是最有名的计算模型,本课使用更简单更合适的RAM计算模型. 1.3 RAM(Random Access Machine)模型 RAM模型的基本构成如下: RAM计算模型有如下特点: 一个简单操作花费一步:键值比较.加减.内存访问 没有操作可以被分解:循环.子程序 内存:访存是一个简单操作.无限制的内存 二.算法设计 2.1 算