首页 > 编程语言 >数据结构与算法复习--(2)

数据结构与算法复习--(2)

时间:2023-04-30 21:35:00浏览次数:39  
标签:执行 复习 -- 一个 算法 时间 数据结构 效率 流程图

算法和算法分析

  • 算法的定义
    • 对特定问题求解方法和步骤的一种描述,它是指令的有限序列。其中每个指令表示一个或多个操作。
  • 算法的描述
    • 自然语言:英语、中文
    • 流程图:传统流程图、NS流程图
    • 伪代码:类语言:类C语言
    • 程序代码:C语言程序、Java语言程序
  • 算法与程序
    • 算法是解决问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以电多种算法
    • 程序是用某种程序设计语言对算法的具体实现。
  • 算法特性:一个算法必须具备以下五个重要特性
    • 有穷性 一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
    • 确定性 算法中的每一条指令必须有确切的含义,没有二义性,在任何条件下,只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出。
    • 可行性 算法是可执行的,算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
    • 输入 一个算法有零个或多个输入。
    • 输出 一个算法有一个或多个输出。
  • 算法设计的要求
    • 正确性(Correctness)
    • 可读性(Readability)
    • 健壮性(Robustness)
    • 高效性(Efficiency)

一个好的算法在满足设计要求的前提下,主要考虑算法的效率,通过算法的效率高低来评判不同算法的优劣程度

  • 算法效率一下两个方面来考虑:
    1.时间效率:指的是算法所耗费的时间
    2.空间效率:指的是算法执行过程中所耗费的存储空间

    • 时间效率和空间效率有时候是矛盾的
  • 算法时间效率的度量

    • 算法时间效率可以用依据该算法编制的程序在计算机上执行所消耗的时间来度量
    • 两种度量方法
      • 事后统计
        • 将算法实现,测算其时间和空间开销
      • 事前分析
        • 对算法所消耗资源的一种估算方法
        • 一个算法的运行时间是指一个算法在计算机上运行所耗费的时间大致可以等于计算机执行一种简单的操作(如赋值、比较、移动等)所需的时间与算法中进行的简单操作次数乘积
          算法运行时间=一个简单操作所需的时间*简单操作次数
        • 也即算法中每条语句的执行时间之和
          算法运行时间=Σ每条语句的执行次数*该语句执行一次所需的时间
  • 为了便于比较不同算法的时间效率,我们仅比较它们的数量级
    例如:两个不同的算法,时间消耗分别是:
    T1(n)=10n^2 与 T2(n)=5n^3

  • 若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号),简称时间复杂度
    例:T(n)=2n3+3n2+2n+1
    n➡∞时,T(n)/n3➡2,这表示n充分大时,T(n)与n3是同阶或同数量,引入“O”记号,则T(n)可记作:
    T(n)=O(n^3)

标签:执行,复习,--,一个,算法,时间,数据结构,效率,流程图
From: https://www.cnblogs.com/laocaigoul/p/17365806.html

相关文章

  • 6344. 字典序最小的美丽字符串-343
    字典序最小的美丽字符串如果一个字符串满足以下条件,则称其为美丽字符串:它由英语小写字母表的前k个字母组成。它不包含任何长度为2或更长的回文子字符串。给你一个长度为n的美丽字符串s和一个正整数k。请你找出并返回一个长度为n的美丽字符串,该字符串还满足:在字......
  • Linux 进程调度之schdule主调度器
    考虑到文章篇幅,在这里我只讨论普通进程,其调度算法采用的是CFS(完全公平)调度算法。至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行一、调度单位简介1.1task_struct结构体简介对于Linux内核来说,调度的基本单位是任务,用structtask......
  • 如何修改linux中HTTP默认目录
    在Linux中,HTTP服务器的默认目录通常是/var/www/html。要修改它,可以按照以下步骤进行操作:打开Apache配置文件httpd.conf。该文件通常位于/etc/httpd/conf/或/etc/apache2/目录下。找到DocumentRoot指令,并将其值更改为您想要的目录路径。例如,如果您想将默认目录更改为/home/user/......
  • Windows11 安装OpenSSH服务器
    windows系统在可选功能中添加OpenSSH服务器,但是一直报错就不知道如何解决,在网上也没有查到有效的解决办法。最好的办法是手动安装OpenSSH服务,方法如下:1.下载OpenSSHGitHub地址:https://github.com/PowerShell/Win32-OpenSSH/releases下载OpenSSH-Win64.zip2.安装OpenSSH-......
  • 基于ChatGPT用AI实现自然对话
    1.概述ChatGPT是当前自然语言处理领域的重要进展之一,通过预训练和微调的方式,ChatGPT可以生成高质量的文本,可应用于多种场景,如智能客服、聊天机器人、语音助手等。本文将详细介绍ChatGPT的原理、实战演练和流程图,帮助读者更好地理解ChatGPT技术的应用和优势。2.内容在当今快速发......
  • codeforces div1A
    A.CircularLocalMiniMax题目翻译:给我们一个数组(循环的也就是1和n是相邻的),我们可以对数组进行任意调序,对于每个数b[i]要求满足b[i]<b[i-1]&&b[i]<b[i+1]或者满足b[i]>b[i-1]&&b[i]>b[i+1]。如果存在就输出yes并且输出构造的序列,否则输出no。思路:我们考虑......
  • Dockers下php容器中安装redis扩展
    首先进入php容器dockerexec-it容器ID或名称查看php安装位置  whichphp查看php已安装扩展  php-m1、下载redis扩展包   redis扩展下载地址【https://pecl.php.net/package/redis 】下载相应版本的扩展2、解压扩展包   tar-zxvfredis-5.1.1.tg......
  • 链表
    手写双链表:#include<iostream>//链表节点结构体structListNode{intvalue;ListNode*prev;ListNode*next;ListNode(intv,ListNode*p=nullptr,ListNode*n=nullptr):value(v),prev(p),next(n){}};classLinkedList{public:Li......
  • qbxt day2
    DFS生成树对于任意一棵DFS生成树,其必定只有返祖边,没有横叉边,在求割点和强联通分量上方便很多。最小生成树求法:https://www.cnblogs.com/yifan0305/p/17363255.html严格次小生成树、非严格次小生成树。最短路问题Floyd求最短路、最小环,传递闭包。链接:在写着,会补得。......
  • 斜率优化
    斜率优化dp回顾对于所有的方程都需要枚举\(j=[l,i-1]\)\(dp[i]=max/min(dp[j]+a[i])\)维护出前缀的最值即可\(dp[i]=max/min(dp[j]+a[j])\)维护出前缀的最值即可\(dp[i]=max/min(dp[j]+a[j]+a[i])\)维护出前缀的最值即可\(dp[i]=max/min(dp[j]+......