本次笔记内容:
1.2.1 算法的定义
1.2.2 什么是好的算法
1.2.3 复杂度的渐进表示

文章目录

  • 算法
    • 例:选择排序算法的伪码描述
  • 算法的优劣
    • 例:打印N个整数递归
    • 例:求多项式的值
    • 什么是好的算法?
  • 复杂度的渐进表示法

算法

算法是一个有限的指令集,一定在有限步骤之后终止,产生输出。

  • 每一条指令必须有充分明确的目标,不可以有歧义;
  • 计算机能处理的范围之内;
  • 描述应不依赖于任何一种计算机语言以及具体的实现手段。

例:选择排序算法的伪码描述

算法的优劣

  • 空间复杂度S(n),占用存储单元的长度
  • 时间复杂度T(n),耗费时间的长度

例:打印N个整数递归

在调用PrintN(99999)前,PrintN(100000)由于还没有返回,其变量N=100000被存在内存中。以此类推。其空间复杂度与N呈线性关系。

例:求多项式的值

什么是好的算法?

在分析一般算法的效率时,经常只关注下面两种复杂度:

  • 最坏情况复杂度Tworst(n)T_{worst}(n)Tworst​(n)
  • 平均复杂度Tavg(n)T_{avg}(n)Tavg​(n)
  • 通畅分析最坏情况复杂度

复杂度的渐进表示法

  • T(n)=O(f(n))T(n)=O(f(n))T(n)=O(f(n))表示存在常数C>0C>0C>0,n0>0n_0>0n0​>0使得当n≥n0n \ge n_0n≥n0​时有T(n)≤C⋅f(n)T(n) \le C \cdot f(n)T(n)≤C⋅f(n)
  • T(n)=Ω(f(n))T(n)=\Omega (f(n))T(n)=Ω(f(n))表示存在常数C>0C>0C>0,n0>0n_0>0n0​>0使得当n≥n0n \ge n_0n≥n0​时有T(n)≥C⋅f(n)T(n) \ge C \cdot f(n)T(n)≥C⋅f(n)
  • T(n)=Θ(f(n))T(n)=\Theta (f(n))T(n)=Θ(f(n))表示存在常数C>0C>0C>0,n0>0n_0>0n0​>0使得当n=n0n = n_0n=n0​时有T(n)=C⋅f(n)T(n) = C \cdot f(n)T(n)=C⋅f(n)

【数据结构笔记02】什么是算法相关推荐

  1. 【数据结构笔记32】排序算法概述、简单排序(冒泡排序、插入排序)、逆序对

    本次笔记内容: 9.1.1 概述 9.1.2 冒泡排序 9.1.3 插入排序 9.1.4 时间复杂度下界 文章目录 排序算法前提条件 冒泡排序 插入排序 时间复杂度下界 逆序对(inversion) ...

  2. 【数据结构笔记31】Dijkstra算法例题:旅游规划(双权重),以及其他推广

    本次笔记内容: 图习题1 核心算法 图习题2 其他推广 文章目录 旅游规划问题 核心算法 Dijkstra算法推广问题 要求数最短路径有多少条 要求边数最少的最短路 旅游规划问题 如上图,优先看权重1 ...

  3. 【数据结构----笔记5】插入排序算法之【希尔排序算法】

    /*__________________________________________________________________________________________________ ...

  4. 【数据结构----笔记4】插入排序算法之【折半插入排序算法】

    /*__________________________________________________________________________________________________ ...

  5. 【数据结构----笔记3】插入排序算法之【直接插入排序】

    /*__________________________________________________________________________________________________ ...

  6. 【数据结构----笔记2】查找算法之【哈希查找或散列查找】

    /*__________________________________________________________________________________________________ ...

  7. 【数据结构----笔记1】查找算法之【顺序查找和折半查找】

    #include<iostream> #include<Windows.h> using namespace std;typedef int ElemType; /*_____ ...

  8. 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记

    复习梗概 画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的 合并两个有序数组的merge函数写法 时间复杂度的分析方法!!! 其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法 ...

  9. 二、考研数据结构笔记——绪论(理解数据结构,算法,时间复杂度计算做题技巧)

    一.数据结构基本概念 1.数据:数据是信息的载体.客观事物的一种表现形式.万事万物都能用数据表示出来. 2.数据元素:数据元素是数据的基本单位,一个数据元素有若干个数据项组成 3.数据项:构成数据元素 ...

最新文章

  1. log4j WARN 的解决办法
  2. 内容激活码jsp发送email
  3. python 遍历目录_Python遍历目录的4种方法实例介绍
  4. HDU-1069-Monkey and Banana
  5. ios遍历模块的方式
  6. LabelImg 批量生成标注图片文件夹序号(起始值+终值)
  7. 公司c语言面试题目,c语言面试最必考的十道试题,求职必看!!!
  8. ssm执行linux 指令,Linux逻辑卷快照及ssm的使用
  9. div.2/C. They Are Everywheretwo pointer
  10. windows下安装HTK3.4
  11. turbo c 2.0 官方下载_随剪app下载-随剪2.0安卓官方版下载v2.0
  12. 【机器学习系列】MCMC第二讲:Markov Chain Monte Carlo基本概念和核心思想
  13. 解决办法:My Endnote Library.enl constrains an incorrect path
  14. 这应该是史上最强的物理学科普(雄文)
  15. Microsoft Word For Mac 分节符
  16. 云队友丨两年还债4个亿!罗永浩,你可真行
  17. Matlab如何调整背景颜色
  18. 前端期末大作业 HTML+CSS 动漫主题网页作业 (1)
  19. Android ContextMenu
  20. Java基于JSP的网络音乐KTV点歌电台网站

热门文章

  1. 【Oracle】数据迁移工具(1):SQL Loader
  2. 解决 ModuleNotFoundError: No module named ‘requests‘ 问题
  3. Win10微软帐户切换不回Administrator本地帐户的解决方法【亲测】
  4. [Git]解决Permission denied, please try again问题
  5. MySQL命令行查询乱码解决方法:
  6. JavaScript console.log导致错误:“不赞成在主线程上使用同步XMLHttpRequest…”
  7. JavaScript截断/切片/修剪掉字符串中的最后一个字符
  8. python课程的中期报告_寒假中期学习报告
  9. (转)MTK 消息分发及窗口管理
  10. php rewrite重写,yaf 自定义重写路由rewrite