算法设计与分析第一章2022222232计硕2贾佳

ehair 2022-10-15 23:45:45

一·知识点与总结

          知识点:

                 1·算法与程序:

                                       (1)算法:若干指令组成的有穷序列。

                                                           四大性质:零个或多个输入、

                                                                             至少一个输出、

                                                                            确定性以及可行性(无歧义,可执行)、

                                                                            有限性(执行次数有限,执行时间有限)。

                                       (2)程序:算法在某种具体程序语言下的具体表现,可以不满足算法的有限性性质(无限循环执行)。

                                          总结:算法是程序的内在,程序是算法在结合程序设计语言下的问题解决的方案,程序在有限性上有别于算法。

                 2·算法的复杂性:

                                       (1)算法复杂性的高低体现在运行该算法所需要的计算机资源上,所需资源量越多,该算法的复杂性越高;反之该算法的复杂性越低。            

                                       (2)时间复杂性,空间复杂性(其中N表示问题规模,I表示算法输入)。

                                              

                                        

                                            

                                       (3)关于符号O的运算规则:

                                        

                                                 符号O用来评估算法的复杂性时,得到的是问题规模充分大时的一个上界,这个上界的阶位越低,则评估越准确。

                                        (4)关于符号Ω:Ω评估算法复杂性时,得到的是问题规模充分大时的一个下界,这个下界的阶位越高,则评估越准确。

                                        (5)关于符号 :用来表示同阶。

                                        (6)关于符号o:当有 时,称f(N)的阶位比g(N)低。

               3·NP完全性理论

                                        (1)来源:如何区分一个问题的难易。

                                        (2)区分:将多项式时间可以求解的问题称为易问题,超多项式时间求解的问题称为难问题。

                                        (3)定义:1·确定性算法:设A是求解问题Ⅱ的一个算法,如果在算法的整个执行过程中,每一步只有一个确定选择,则称算法A是确定性                                                                                       算法。

                                                            2·p类问题:对于某个判定问题Ⅱ,存在一个非负整数k,对于输入规模为n的实例,能够以 的时间运行一个确定性算法,                                                                                    得到肯定或否定答案,则该判定问题Ⅱ是一个p类问题。

                                                            3·非确定性算法:非确定性算法将问题分为猜测和验证两个阶段。算法的猜测阶段是非确定性的,给出问题解的一个猜测。算                                                                                      法的验证阶段是确定性的,验证猜测阶段给出的解的正确性。

                                                           4·NP类问题:对于某个判定问题Ⅱ,存在一个非负整数k,对于输入规模为n的实例,能够以的时间运行一个非确定性算                                                                                        法,得到一个是yes或者no的答案,则判定问题Ⅱ是一个NP类问题。( TIPS:验证阶段存在一个确定性算法,能                                                                                    够以多项式时间来检查和验证猜测阶段所产生的答案。)

                                        (4)p问题与NP问题的差别:p类问题可以用多项式时间的确定性算法来判定求解。NP类问题用多项式时间的非确定性算法判定求解

                                        (5)p问题与NP问题的关系:

                                        (6)常见的NP类问题:合取范式的可满足性问题CNF-SAT、三元合取范式的可满足性问题3-SAT、团问题CLIQUE、顶点覆盖问题                                                                                              VERTEX-COVER、子集和问题SUBSET-SUM、哈密顿回路问题HAM-CYCLE、旅行售货问题TSP。

       总结:(1)区分程序与算法的概念,明白算法的四大性质,了解程序有别于算法的一点:程序可以不满足有限性。

                  (2)掌握算法在最坏情况下,最好情况和平均情况下的计算复杂性概念。时间与空间资源不可能兼顾,常常要面对牺牲空间换取时间,或者相反的情况。

                  (3)算法复杂性与渐进性态的数学表述。当问题规模n到达一定的复杂程度,那么在时间T->∞时用复杂性O()来表述不同算法在阶位上的差别,此时以不                               同的阶位量级来区分不同算法的时间复杂度。

                  (4)了解NP问题的基本概念:p是一个判定问题类,这些问题可以用一个确定性算法在多项式时间内判定或解出。NP类问题并不要求给出一个算法来求                             解问题本身,只要求给出一个确定性算法在多项式时间内验证它的解。

二·习题(1-1~1-5)

                     1-1:思路:将函数化为最简形式,取其中的最高阶,即为其渐进表达式。

                     1-2:思路:由知识点2可知O()用来区分算法的不同阶位的复杂度。故O(1)与O(2)相差常数因子,二者在时间复杂度上阶位相同。

                     1-3:思路:按照渐进阶位排序即可

                     1-4:(1)设新机器用同一算法在t秒内能解决输入规模为n1的问题。则解得n1=n+6(由此可知运行速度的成倍提高反应在相同算法上                                           解决同一问题时,问题的规模并非也是同倍提高。) 

                              (2)n1=8n(由此可知,相比于硬件的提高,算法的改进或许能带来更大的提升。) 

                              (3)T(n)=常数,故可以解决任意规模的问题(本体意在表明:算法的极致提高可以带来问题解决能力的极致增长)

                     1-5:(计算复杂性越高,单纯的硬件处理速度提升所带来的问题规模解决能力的收益越                                     小)

三·算法实现

                     1一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。数字计数问题要求对给定书的总页码n(<=200000),计算出书的全部页码中分别用到多少次数字0,1,2,…,9

  1. #include<stdio.h>
    #include<stdlib.h>
    int main(){
        int N;
        int array[10]={0};
        scanf("%d",&N);
        for(int i=0;i<=N;i++){
            int x=i;
            while(x){
                array[x%10]++;
                x=x/10;
                
            }
        }
        for(int i=0;i<10;i++){
            printf("数字%d出现了%d次\n",i,array[i]);
    
        }

    时间复杂度,外侧for循环(0~n)内嵌while循环(0~n),则时间复杂度为O(n^2).

  2. 四·图灵停机问题

               判断任意一个程序是否能在有限的时间之内结束运行的问题。该问题等价于如下的判定问题:是否存在一个程序P,对于任意输入的程序w,能够判断w会在有限时间内结束或者死循环。艾伦·图灵在1936年用对角论证法证明了,不存在解决停机问题的通用算法。

五·N鸡问题

             N鸡问题:用N元钱买N只鸡,公鸡每只5元,母鸡每只3元,小鸡1元3只,N元钱必须刚好买N只鸡,鸡必须整只买,有几种买法呢?

        

#include<stdlib.h>
#include<stdio.h>
int main()
{
    int n;
    int m=0;
    scanf("%d",&n);

    int i,j,k;
    for(k=0;k<=n;k+=3)
    {
    	i=(4*k)/3-n;
    	j=2*n-(7*k)/3;
    	if(5*i+3*j+k/3==n&&i>=0&&j>=0){ 
        printf("公鸡%d母鸡%d小鸡%d\n",i,j,k);
    	m++;
        }
	}
    printf("%d",m);
}

 

 

 

 

                    

 

 

                                                         

 

 

 

 

 

                                         

 

 

 

 

 

 

 

 

 

 

 

 

 

...全文
39 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
ASP与SQL_Server网站架设 ASP与SQL_Server网站架设 前言:随着Internet的兴起和以网页为载体的网络信息的广泛传播,网页制作中对于内容的动态显示与更新需求量越来越大。编写一个令人满意的动态网页已成为许多网页设计人员的目标。在众多的编写环境中,Microsoft Active Server Pages(ASP)以其强大的技术力量背景及容易掌握的语言环境迅速占领了大片市场、获得了众多网页设计人员的青睐。为了使更多的人掌握ASP应用程序的编写,本书以丰富的事例、简单的语言较全面的介绍了ASP应用程序的设计方法与技巧,并详细的介绍了Microsoft SQL Server在ASP应用程序中的应用。全书共分十三章。前三章讲述什么是ASP,怎样开发ASP应用程序,ASP的内置对象及内置组件的详细使用方法。第4章讲述Microsoft SQL Server及结构化查询语言。第5章全面讲解数据访问对象ADO及其使用方法。第6章用一个留言簿的应用例子演示了上面介绍的内容。第7章介绍如何调试ASP的应用程序及如何注意ASP应用程序的效率。第8章用一个简单的例子介绍如何在ASP中自建组件。第9至13章用丰富实用的例子演示了ASP的各种功能。本书由贾佳和郝洪明主编,参加编写的还有:张强、刘小汕、赵欣、胡泽阳、石友华、谢娜、姜明、陈煜;黎攻,刘源平校审了全书。限于作者水平,书中内容难免有疏漏和不妥之处,敬请广大读者不吝指正。
ASP与SQL_Server网站架设 前言:随着Internet的兴起和以网页为载体的网络信息的广泛传播,网页制作中对于内容的动态显示与更新需求量越来越大。编写一个令人满意的动态网页已成为许多网页设计人员的目标。在众多的编写环境中,Microsoft Active Server Pages(ASP)以其强大的技术力量背景及容易掌握的语言环境迅速占领了大片市场、获得了众多网页设计人员的青睐。为了使更多的人掌握ASP应用程序的编写,本书以丰富的事例、简单的语言较全面的介绍了ASP应用程序的设计方法与技巧,并详细的介绍了Microsoft SQL Server在ASP应用程序中的应用。全书共分十三章。前三章讲述什么是ASP,怎样开发ASP应用程序,ASP的内置对象及内置组件的详细使用方法。第4章讲述Microsoft SQL Server及结构化查询语言。第5章全面讲解数据访问对象ADO及其使用方法。第6章用一个留言簿的应用例子演示了上面介绍的内容。第7章介绍如何调试ASP的应用程序及如何注意ASP应用程序的效率。第8章用一个简单的例子介绍如何在ASP中自建组件。第9至13章用丰富实用的例子演示了ASP的各种功能。本书由贾佳和郝洪明主编,参加编写的还有:张强、刘小汕、赵欣、胡泽阳、石友华、谢娜、姜明、陈煜;黎攻,刘源平校审了全书。限于作者水平,书中内容难免有疏漏和不妥之处,敬请广大读者不吝指正。

144

社区成员

发帖
与我相关
我的任务
社区描述
高校教学社区
软件工程 高校
社区管理员
  • dainwnu
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧