精华内容
下载资源
问答
  • 1.2 官方定义算法穷性:在有限的操作步骤内完成,否则计算机会一直执行到资源耗尽后死机。算法的确定性:每步骤明确,步骤的结果确定。算法执行的过程是与计算机交互的过程,每一步必须明...

    fe023931ea56fa0dbb8dacb586803610.png

    1. 什么是算法

    1.1 直观理解

    算法就是告诉计算机怎么做,计算机是不会独立思考的,我们必须提供详尽的指令,使用它们能够理解的语言将步骤提供给他们。算法详尽描述了如何完成某项任务,就像菜谱那样详细描述了如何做出一道菜。

    1.2 官方定义

    算法的有穷性:

    在有限的操作步骤内完成,否则计算机会一直执行到资源耗尽后死机。

    算法的确定性:

    每个步骤明确,步骤的结果确定。算法执行的过程是与计算机交互的过程,每一步必须明确而且具有符合语言规则,否则计算机无法执行,会报错。

    算法的可行性:

    每个步骤有效执行,得到确定的结果。每一个具体步骤中通过计算机实现时应能够使计算机完成,如果这一步骤计算机无法实现,也就达不到预期的目的,那么这一步骤是不完善和不明确的,是不可行的。

    零个或多个输入:

    从外界获取信息,可以没有输入,也可以有多种类型的多个输入,需要根据具体问题具体分析。

    一个或者多个输出:

    算法得到的结果就是算法的输出。算法的目的是为了解决一个具体问题,一旦问题解决了,就说明采取的算法书正确的,而结果的输出正是验证这一目的的最好方式。

    2. 如何选择算法

    当多个算法都可以解决同一个问题的时候,我们应该如何选择呢?在算法的评判上,考量的标准也各不相同,一个算法的质量优劣将影响到程序的效率。时间和空间都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少。

    比如,简单的算法对人来说易于理解,也容易被编写成程序,而在运行的时候不需要耗费太多空间资源的算法,就十分适合内存小的计算机。

    不过,一般来说,最为重视的是算法的运行时间,即从输入到输出这个过程所花费的时间。

    3. 算法的复杂度

    算法的复杂度分为时间复杂度和空间复杂度。时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。

    3.1 时间复杂度

    一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n);

    n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。记为O(…),也称为大O表示法;

    3.2 空间复杂度

    一个程序的空间复杂度是指运行完一个程序所需要的内存大小。利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。程序执行时所需存储空间包括以下两部分。

    • 固定部分:这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
    • 可变空间:这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。

    4. 如何计算时间复杂度

    4.1 遵循如下规则

    • 用常数1来取代运行时间中所有加法常数;
    • 只要高阶项,不要低阶项;
    • 不要高阶项系数;

    4.2 常见的时间复杂度

    • O(1)—常数阶:运算次数是常数
    temp

    根据规则1:用常数1来取代运行时间中所有加法常数;

    上面语句共三条操作,单条操作的频度为1,即使他有成千上万条操作,也只是个较大常数,这一类的时间复杂度为O(1);

    • O(N)—线性阶
    sum=0;                 
    for(i=0;i<n;i++)       
        sum++;

    根据规则:只要高阶项,不要低阶项目,常数项置为1,去除高阶项的系数:

    所以时间复杂度O(n)。这一类算法中操作次数和n正比线性增长。

    • O(log2N)—对数阶
        private static void 对数阶() {
            int number = 1;//执行1次
            int n = 100;//执行1次
    
            while (number < n) {
                number = number * 2; // 执行n/2次
                System.out.println("哈哈");//执行1次
            }
    
        }

    n为100,number是1,小于100退出循环。

    第1次循环,number = 2,2^1。

    第2次循环,number = 4, 2^2。

    第3次循环,number = 8, 2^3。

    第x次循环,number = 2^x

    也就是2^x=n得出x=log₂n。因此它的复杂度为O(logn)。

    • O(nlogn)—线性对数阶

    线性对数阶就是在LogN的基础上多了一个线性阶;

    比如这么一个算法流程:数组a和b,a的规模为n,遍历的同时对b进行二分查找,如下代码:

    for(int i =0;i<n;i++)
        binary_search(b);
    }
    • O(n^2)—平方阶

    平方阶就是嵌套循环

        private static void 普通平方阶(){
            int n = 100;
            for (int i = 0; i < n; i++) {//执行n次
                for (int j = 0; j < n; j++) {//执行n次
                    System.out.println("哈哈");
                }
            }
        }

    4.3 粗略计算时间复杂度的三部曲

    1.去掉运行时间中的所有加法常数。

    没有加法常数,不考虑。

    2.只保留最高阶项。

    最高阶参考上面列出的按增长量级递增排列,于是只需要保留result = (n^2)/2

    3.如果最高阶项存在且不是1,去掉与这个最高阶相乘的常数得到时间复杂度

    除以2相当于是乘以二分之一,去掉它,就得到,result = n^2, 所以这个算法的时间复杂度为O(n^2)。

    4.4 时间复杂度优劣对比

    常见的数量级大小:越小表示算法的执行时间频度越短,则越优;

    O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
    展开全文
  • 很多开发者都知道“程序=数据结构+算法”这个著名的公式,并不真正明白算法的定义或概念。究竟什么是算法呢?...输 入:一个算法应该又相应的输入条件,用来刻画运算对象的初始情况。输 出:一个算法应该...

    很多开发者都知道“程序=数据结构+算法”这个著名的公式,并不真正明白算法的定义或概念。究竟什么是算法呢?从字面意义上理解,算法即用于计算的方法,通过这种方法可以达到预期的计算结果。

    5f774ef9a524411320530c4e465f605c.png

    1.算法的特征

    有穷性:算法的指令或步骤的执行次数是有限的,执行时间也是有限的。确切性:算法的每一个指令或步骤都必须又明确的定义和描述。输 入:一个算法应该又相应的输入条件,用来刻画运算对象的初始情况。输 出:一个算法应该又明确的结果输出。这是容易理解的,因为没有得到结果的算法毫无意义。可行性:算法的执行步骤必须是可行的,且可以在有限时间内完成。

    2.算法分类

    1、按照应用来分类

    按照算法的应用领域,即解决的问题,算法可以分为基本算法、数据结构相关的算法、几何算法、图论算法、规划算法、数值算法、数值分析算法、加密/解密算法、排序算法、查找算法、并行算法和数论算法等。

    2、按照确定性来分类

    按照算法结果的确定性来分类,算法可以分为确定性算法和非确定性算法。

    • 确定性算法:这类算法在有限的时间内完成计算,得到的结果是唯一的,且经常取决于输入值。
    • 非确定性算法:这类算法在有限的时间内完成计算,单是得到的结果往往不是唯一的,即存在多值性。

    3、按照算法的思路来分类

    按照算法的思路来分类,算法可以分为递推算法、递归算法、穷举算法、贪婪算法、分治算法、动态规划算法和迭代算法等多种算法。

    3.算法与数据结构的关系

    数据结构是数据的组织形式,可以用来表征特定的对象数据。在计算机程序设置中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,如数组、结构体、联合、指针和链表等。因为不同的数据结构所采用的处理方法不同,计算的复杂度也不同,因材算法往往依赖于某种数据结构。也就是说,数据结构的算法实现的基础。(程序=数据结构+算法)

    4.算法的性能评价

    一个算法的优劣往往通过算法复杂度来衡量,算法复杂度包括时间复杂度和空间复杂度两个方面。

    1、时间复杂度

    时间复杂度即通常所说的算法执行所需要耗费的时间,时间越短,算法越好。一个算法执行的时间往往无法精确估计,通常需要在实际的计算机中运行才能够知道。但是,也可以对算法的代码进行估计,而得到算法的时间复杂度。

    2、空间复杂度

    空间复杂度是指算法程序在计算机中执行所消耗的存储空间。空间复杂度可以分为如下两个方面。

    1)程序保存所需要的存储空间,即程序大小。

    2) 程序在执行中所需要小号的存储空间资源,如程序在执行过程中的中间变量等。

    一般来说,程序的大小越小,执行过程中消耗的资源越少,这对程序就越好。

    展开全文
  • 但是如果是数组的某项,那就必须&了!否者程序会死在那里直到自动退出。 这是很基本很基本的操作,但是大意失荆州啊! 一道例题 题目描述 设若干人员的数据,其中包含学生和教师。学生的数据中....

     

    明确一点,用scanf进行输入,一定要明确输入到哪里,也就是告诉scanf地址的位置,所以就需要有取地址符&。而对于数组名而言,数组名本身就是地址,所以不需要&。但是如果是数组的某一项,那就必须要有&了!否者程序会死在那里直到自动退出。

    这是很基本很基本的操作,但是大意失荆州啊!

    一道例题

    
    题目描述
    
    设有若干个人员的数据,其中包含学生和教师。学生的数据中包括:号码、姓名、性别、职业、班级。教师的数据包括:号码、姓名、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。现在要求把这些数据放在同一个表格中储存,使用结构体中的共用体实现。结构体定义如下:
    struct {
        int num;
        char name[10];
        char sex;
        char job;
        union {
            int class;
            char position[10];
        }category;
    };
    在以上的结构体中,如果job项为s(学生),则第5项为class(班级);如果job项是t(教师),则第5项为position(职务)。
    输入几个人员的数据,将其保存在以上包含共用体的结构体数组中,并输出。
    
    输入
    
    第一行有一个整数n,表示以下n行分别表示n个人员的数据。保证n不超过100。
    之后的n行,每行有5项用空格隔开的内容。前4项分别为人员的号码(整数)、姓名(长度不超过9的无空格字符串)、性别(字符,m或f)和职业(字符,s或t)。如果第4项是s,则第5项为一个整数,表示班级;如果第4项是t,则第5项为一个长度不超过9的无空格字符串,表示职务。
    
    输出
    
    共有n行,与输入格式相同,输出读入的所有内容。
    请注意行尾输出换行。
    
    样例输入
    
    2 101 Li f s 501 102 Wang m t prof 
    
    样例输出
    
    101 Li f s 501 102 Wang m t prof
    

     

    #include <cstdio>
    struct school{
        int num;
        char name[10];
        char sex;
        char job;
        union{
            int classnum;
            char position[10];
        }category;
    };
    
    int main()
    {
        int n;
        scanf("%d", &n);
        //getchar();
        school person[n];
        for(int i = 0; i < n; i++){
            scanf("%d %s %c %c", &person[i].num, &person[i].name, &person[i].sex, &person[i].job);
            char temp = person[i].job;
            if(temp == 's'){
                scanf("%d", &person[i].category.classnum);
            }
            if(temp == 't'){
                scanf("%s", &person[i].category.position);
            }
        }
        for(int i = 0; i < n; i++){
            printf("%d %s %c %c ", person[i].num, person[i].name, person[i].sex, person[i].job);
            if(person[i].job == 's'){
                printf("%d\n", person[i].category.classnum);
            }
            if(person[i].job == 't'){
                printf("%s\n", person[i].category.position);
            }
        }
        return 0;
    }
    

     

    一定要留心空格是否正确,标点符号是否正确,还有输入输出的格式是否匹配!!!
    都是很简单但很容易大意的问题!

     

    展开全文
  • 如题1、有穷性: 一个算法必须保证执行有限步之后结束;2、确切性: 算法的每一步骤必须有确切的定义;3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;4、输出...

    算法的五个特征是?如题

    1、有穷性: 一个算法必须保证执行有限步之后结束;

    2、确切性: 算法的每一步骤必须有确切的定义;

    3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;

    4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果.没有输出的算法是毫无意义的;

    5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成

    c语言算法中的五个特性是什么?

    1、有穷性: 一个算法必须保证执行有限步之后结束;

    2、确切性: 算法的每一步骤必须有确切的定义;

    3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;

    4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;

    5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成

    计算机算法必须具备5个特性?

    有穷、可行、确定、输入和输出

    算法的五大特性是什么

    1.又穷性,算法是执行时候运行的有穷性,程序只是一段实现算法的代码

    2.确定性,算法对于特定的输入有特定的输出,程序提供了确定算法结果的平台

    3.可行性,算法需要考虑设计的可能,程序则具体是实现算法上的设计

    4.输入,算法有输入揣算法的输入依靠程序的平台提供

    5.输出,算法的输出也靠代码的支持

    什么是算法,它的五大特性是什么,算法和程序的关系是什么

    1.又穷性,算法是执行时候运行的有穷性,程序只是一段实现算法的代码

    2.确定性,算法对于特定的输入有特定的输出,程序提供了确定算法结果的平台

    3.可行性,算法需要考虑设计的可能,程序则具体是实现算法上的设计

    4.输入,算法有输入,算法的输入依靠程序的平台提供

    5.输出,算法的输出也靠代码的支持

    算法和程序的关系:

    1.算法是执行时候运行的有穷性,程序只是一段实现算法的代码

    2.算法对于特定的输入有特定的输出,程序提供了确定算法结果的平台

    3.算法需要考虑设计的可能,程序则具体是实现算法上的设计

    4.算法有输入,算法的输入依靠程序的平台提供

    5.同上,算法的输出也靠代码的支持

    VB算法具有 什么 5个重要特征

    (1)确定性:指算法的每个步骤都应确切无误,没有歧义.

    (2)可行性:指算法的每个步骤必须是计算机能够有效执行、可以实现的,并可得到确定的结果.

    (3)有穷性:指一个算法应该在有限的时间和步骤内可以执行完毕的.

    (4)输入性:指一个算法可以有0或多个输入数据.

    (5)输出性:指一个算法必须有一个或多个输出结果.

    在算法的五大特性上,请问算法与程序有什么区别?

    1.算法是执行时候运行的有穷性,程序只是一段实现算法的代码

    2.算法对于特定的输入有特定的输出,程序提供了确定算法结果的平台

    3.算法需要考虑设计的可能,程序场具体是实现算法上的设计

    4.算法有输入,算法的输入依靠程序的平台提供

    5.同上,算法的输出也靠代码的支持

    算法有五个方面的重要特征,包括输入,确定性,输出,能行性还有?

    算法应该是有7个特性的,如下

    、有穷性(Finiteness)  算法的鸡穷性是指算法必须能在执行有限个步骤之后终止2、确切性(Definiteness)  算法的每一步骤必须有确切的定义;3、输入项(Input)  一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;4、输出项(Output)  一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;5、可行性(Effectiveness)  算法中执行的任何计算步都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成;(也称之为有效性)   6、 高效性(High efficiency)   执行速度快,占用资源少;   7、 健壮性(Robustness)   对数据响应正确。

    一个算法应该具有“确定性”等5个特性,下面对另外四个特性描述正确的是

    c

    算法优劣的五个标准是什么

    时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数。

    渐近时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。

    评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度。

    算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。

    时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n^2)、立方阶O(n^3)、……k次方阶O(n^k)、指数阶O(2^n)。

    空间复杂度:是某个算法的空间耗费,它是该算法所求解问题规模n的函数。

    算法的时间复杂度和空间复杂度合称算法复杂度。

    展开全文
  • !... 如上UML活动图左图,作业既并行执行,又顺序执行。 比如: 1->3->5 和2->4这两段任务可以并行执行,6必须在4,5都完成之后开始做。 1->3->5 2->4 两段任务的绝对顺序不变,但两...请问什么经典的调度算法吗?
  • 其实可以不必这么担心, * 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 该校验的过程:1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。2、从卡号最后一位数字开始,...
  • 在机器学习领域,种说法叫做“世上没有免费的午餐”,简而言之,它是指没有任何算法能在每问题上都能最好的效果,这理论在监督学习方面体现得尤为重要。举例子来说,你不能说神经网络永远比决策树好,...
  • 一个数可以用多少种连续素数之和表示! 文章目录1. 题目描述2. 算法实现 1. 题目描述 可以由一个或多个连续质数(素数)表示一些正整数。 一个给定的正整数多少这类陈述?例如,整数53两种表示方法5+7+11+13+...
  • 算法

    2020-04-30 20:03:55
    有穷性:一个算法必须保证执行有限步之后结束。 确定性:算法的每一步骤必须有明确的定义,对于相同的输入只能得出相应的输出。 输入:一个算法有零个或多个输入,取自某个特定的对象的集合。 输出:一个算法有一个...
  • ⑶ 有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。 ⑷ 确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。 ⑸ 可行性:算法描述的操作可以通过已经...
  • 一、什么是算法?  算法(Algorithm):一个计算过程,解决问题的方法 ...一个算法应该具有以下七个重要的特征: ...③输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输 ...
  • 算法(algorithm)是对特定问题求解步骤的一种描述,它是指令...一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。 2) 确定性 算法中每一条指令必须有确切的含义,读者...
  • 一个算法必须有0个或多个输入。它们是算法开始运算前给予算法的量。这些输入取自于特定的对象的集合。它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。② 有输出。一个算法应有一个或多个输出,...
  • 在排序数组中查找元素的第一个和最后一个位置》详解注释,简单明了。 原题内容 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度...
  • ①有穷性: 一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成。 ②确定性:算法中的每条指令必须有确切的含义,不会产生二义性,并且对于相同的输入只能得出相同的输出。 ③可行性:算法中的操作...
  • 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 ...
  • 讲-常用算法.ppt

    2020-07-21 00:17:17
    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则 算法是在有限步骤内求解某一问题所使用的一组定义明确的规则 算法的特征 有穷性 一个算法必须保证执行有限步之后结束 确切性 算法的每一步骤必须有确切的...
  • 算法算法评价

    万次阅读 多人点赞 2019-07-05 20:42:11
    1.有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成 2.确定性:算法中每条指令必须有确切的含义,不会产生二义性,对于相同的输入只能得出相同的输出。 3.可行性:一个算法是可行的,...
  • 算法的几特征

    2019-03-19 19:03:49
    一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件 4.输出项: 一个算法有一个或多个输出,以反映对输入数据加工后的结果,没有输出的算法是毫无意义的 5.可行性: 算法中...
  • * 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 该校验的过程: 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 2、从卡号最后一位数字开始,逆向将偶数位数字,先...
  • 算法1.0 算法

    2020-09-13 22:33:04
    算法是什么 算法(algorithm)就是任何 良定义 的计算过程,该过程取某个值或值的集合作为输入并产 生某个值或值的集合作为输出,即是把输入换成...输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,897
精华内容 758
关键字:

一个算法必须有输入