首页 > 编程语言 >什么是算法

什么是算法

时间:2023-01-12 22:34:46浏览次数:29  
标签:复杂度 代码 算法 时间 数组 情况 什么

  • 算法是解决特定问题的步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
  • 算法有助于理解数据结构,且程序设计 = 数据结构 + 算法
  • 算法的特性:输入、输出、有穷性、确定性和可行性。
    • 输入、输出:
      • 算法具有零个或多个输入
      • 算法至少有一个或多个输出
    • 有穷性:指算法在执行有限的步骤后可以自动结束,而不会出现无限循环。并且每一个步骤都在可接受的时间内完成。
    • 确定性:算法的每一步都有具体、确定的含义,不会出现二义性。
    • 可行性:算法的每一步都能够通过执行有限的次数完成。可转换为程序上机运行,并得到正确的结果。
  • 算法的设计要求:正确性、可读性、健壮性和高效性。
    • 正确性:指算法应该至少具有输入、输出、无歧义的处理过程,能正确地反映需求,得到问题的正确答案。具体的:
      • 1.程序没有语法错误。
      • 2.对合法输入能产生满足要求的输出。
      • 3.对非法输入能产生对应说明的结果。
      • 4.对于极端测试数据能产生满足要求的输出。
      • 以上难度逐级递增,一般情况下将层次3作为判断一个算法是否正确的标准。
    • 可读性:便于阅读、理解和交流。
    • 健壮性:输入非法时,算法能做出相关处理,而不是产生异常或者直接崩掉。
    • 高效性:时间效率高、存储量低。
  • 算法效率的度量方法:
    • 事后统计法:针对设计好的测试程序或数据,通过计算机运行对比耗时,从而确定算法效率高低。有很大缺陷:
      • 1.必须依据算法事先写好程序。
      • 2.依赖硬件、软件等环境。
      • 3.测试数据设计困难。测试数据规模大小有可能影响算法的表现。
    • 事前分析估算方法:在编写程序前,依据统计方法对算法进行估算。
      • 明确:分析程序的运行时间时不关心程序由什么语言编写,不关心跑在什么硬件上,只关心实现它的算法。
      • 依据算法时间复杂度估算算法时间效率:
        • 影响程序运行消耗时间因素一般为:
          • 1.算法采用的策略及代码质量。
          • 2.编译后的代码质量。
          • 3.输入数据的规模。
          • 4.计算机执行速度。
          • 其中2、4分别为软件、硬件影响。抛开软硬件因素,一般关注算法的好坏和输入的规模。
        • 函数的渐近增长:
          • 定义:规定,在输入规模n没有限制的情况下,如果存在一个整数N,使得对于所有的n>N,函数f(n)总比函数g(n)大,则我们说f(n)的增长渐近快于g(n)。
          • 判断一个算法的效率时,函数中除最高阶项外,其他次要项常常可被忽略。由上图也可看出,判断算法的好坏,只通过少量数据是无法做出准确判断的。
        • 算法时间复杂度(算法的时间度量)
          • 定义:在进行算法分析时,语句的总执行次数T(n)是关于问题规模n的函数,通过分析T(n)随n的变化情况可确定T(n)的数量级,记作:T(n)=O(f(n))。它表示随着问题规模n的增大,算法执行时间的增长率和问题相关函数f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。该记法:O(f(n))称为大O记法。
          • 推导大O阶方法应遵循:
            • 1.用常数1取代运行时间为常数的结果。即若执行次数的大小与n值变化无关,执行时间恒定,我们称之为具有O(1)的时间复杂度,又叫常数阶。
            • 2.只保留最高阶项。
            • 3.最高阶项系数若不为1,按1处理。
          • 常见复杂度:
            • 常数阶 O(1):一般就是大于等于一条独立语句或单纯的分支结构。
            • 线性阶 O(n):一般为循环结构。
            • 对数阶 O(logn)、O(nlogn):一般为循环结构。
              • 如下图,count的取值就是个等比数列:2⁰ 2¹ 2² … 2^x = n;则x的结果即是该行代码执行的次数,就有:2^x = n

                标签:复杂度,代码,算法,时间,数组,情况,什么
                From: https://www.cnblogs.com/GanSinba/p/17048123.html

相关文章

  • 【算法|习题总结】算法分析与计算复杂性在线测试Ⅰ
    目录​​前言​​​​题目一​​​​内容​​​​参考Demo​​​​题目二​​​​内容​​​​参考Demo​​​​题目三​​​​内容​​​​参考Demo​​​​题目四​​​​......
  • 什么是数据结构
    数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。什么是数据数据是描述客观事物的符号,是计算机中可以操作的对象,......
  • 【MATLAB优化算法】遗传算法理论部分
    遗传算法引言遗传算法(GeneticAlgorithm,GA)是模拟生物在自然境中的遗传和进化的过程而形成的自适应全局优化的搜索算法。它借用了生物遗传学的观点,通过自然选择、遗传和变......
  • Pytorch的cross_entropy为什么等于log_softmax加nll_loss
    首先我们要知道nll_loss是怎么算的,看下面的代码label1=torch.tensor([0,3])pred1=torch.tensor([[0.2,0.7,0.8,0.1],[0.1,0.3,0.5,0.7]])lo......
  • 代码随想录算法训练营第15天
    今日刷题3道:层序遍历, 226.翻转二叉树,101.对称二叉树2● 层序遍历10题目链接/文章讲解/视频讲解:https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A......
  • m基于OFDM系统,对比SC算法,Minn算法,PARK算法同步性能matlab仿真分析
    1.算法描述        OFDM系统下对比SC算法,Minn算法,PARK算法同步性能matlab仿真分析。OFDM系统中的定时估计和频率频率算法——时频联合估计的SC算法,由Schmidl和Cox......
  • m基于OFDM系统,对比SC算法,Minn算法,PARK算法同步性能matlab仿真分析
    1.算法描述OFDM系统下对比SC算法,Minn算法,PARK算法同步性能matlab仿真分析。OFDM系统中的定时估计和频率频率算法——时频联合估计的SC算法,由Schmidl和Cox提出,是一种基于训......
  • 为什么我放弃Java,选择Kotlin(靠特灵)?
    今天查了一下,竟然发现Oracle的JDK听说是收费了。也就是说,你要用于生产环境的话,Oracle一旦查到你,你就要交钱的。我本身是个穷光蛋,哪还有钱交给Oracle。为了避免繁琐的法律制......
  • 为什么使用消息队列?
    理解:但是比较核心的有3个:解耦、异步、削峰解耦:A把数据放到MQ中,BCD需要就取,不需要就不取。A不用管BCD的需求异步:BCD会把数据存入对应的MQ,A可以直接取,可达到异步缩减时......
  • Linux内核为什么会发生soft lockup?【转】
    转自:https://blog.csdn.net/21cnbao/article/details/108250786提到softlockup,大家都不会陌生:BUG: soft lockup - CPU#3 stuck for 23s! [kworker/3:0:32]......