#14天阅读挑战赛#

14天阅读挑战赛

CSDN近期举办14天阅读打卡活动

目录

一、算法复杂性

◼ 一棋盘粮有多少

◼ 神奇的兔子数列


一、算法复杂性

如果我们想要求这样一个序列的每个元素之和:

你打算怎么求这个序列之和?我们一般首先的想法就是遍历一遍,第一个是-1,第二个是1,那么这样依次for遍历,进行求和。

我们还可以发现第一个是-1,第二个是1,那么每两个元素之和正好是0。我们可以根据序列的这个性质来进行快捷求和。

def sum(n):sum = 0if n%2 == 0:sum = 0 else:sum = -1print(sum)if __name__ == '__main__':sum(99)

那么这个例子当中,我们实现对序列求和的方法,也可以称之为一个算法。

一个算法应该具有以下五个重要的特征:

1、有穷性(Finiteness),算法必须能在执行有限个步骤之后终止;

2、确切性(Definiteness),算法的每一步骤必须有确切的定义;

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

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

5、可行性(Effectiveness),每个计算步骤都可以在有限时间内完成。算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成。

那我们怎么知道一个算法好不好呢?应该从哪些方面对算法进行评估呢?

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

1、时间复杂度:它定量描述了该算法的运行时间,即计算程序运行的时间,空间复杂度, 就是所占的内存空间。

2、空间复杂度:是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。

3、稳定性:不会因为输入的不同而导致不稳定的情况发生;

4、算法思路是否简单:越简单越容易实现越好;

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

一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。

同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。

◼ 一棋盘粮有多少

传说西塔发明了国际象棋而使国王十分高兴,他决定要重赏西塔,西塔说:“我不要你的重赏 ,陛下,只要你在我的棋盘上赏一些麦子就行了.在棋盘的第1个格子里放1粒,在第2个格子里放2粒,在第3个格子里放4粒,在第4个格子里放8粒,依此类推,以后每一个格子里放的麦粒数都是前一个格子里放的麦粒数的2倍,直到放满第64个格子就行了”.区区小数,几粒麦子,这有何难,“来人”,国王令人如数付给西塔。
计数麦粒的工作开始了,第一格内放1粒,第二格内放2粒第三格内放2’粒,…还没有到第二十格,一袋麦子已经空了.一袋又一袋的麦子被扛到国王面前来.但是,麦粒数一格接一格飞快增长着,国王很快就看出,即便拿出全国的粮食,也兑现不了他对西塔的诺言。
原来,所需麦粒总数为:2的64次方减1 =18446744073709551615
这些麦子究竟有多少?打个比方,如果造一个仓库来放这些麦子,仓库高4公尺,宽10公尺,那么仓库的长度就等于地球到太阳的距离的两倍.而要生产这么多的麦子,全世界要两千年.尽管国家非常富有,但要这样多的麦子他是怎么也拿不出来的.这么一来,国王就欠了西塔好大一笔债。

那么我们可以用那些方法得到所需麦粒总数呢?

(1)把棋盘上的64个格子需要放的麦粒数量加起来为S,那么,

(2)等式两边同时乘以2,

(3)用等式2减去等式1,我们就可以得到所需麦粒总数为:2的64次方减1

由指数函数图象来看,简直可以说是直线增长的,比爆炸的威力还要大。我们称这样的函数为爆炸增量函数。指数函数又叫爆炸函数,指数爆炸,时间复杂度是指数阶,是指指数函数在符合一定的条件时,将出现“爆炸性”增长。

我们经常见到有些算法在调试的时候是没报错的,运行一段时间也没问题,但是在关键时刻计算机会宕机。因此,在程序设计中我们应该避免这样的复杂度。

宕机:宕机,就是我们大家日常见到的电脑死机。在计算机中,我们用dowm来表示把机器停止,转换成汉字就是宕机,服务器不能正常工作了,其中也包括一切服务器出现死机的原因。

最常见的五种时间复杂度

  • O(1):常数复杂度, 最快的算法。

    • 例如取数组第1000000个元素,字典和集合的存取都是O(1), 数组的存取是O(1)O(logN)
  • O(logN):对数复杂度。假设有一个有序数组, 以二分法查找,时间复杂度为O(logN)。
  • O(n):线性复杂度。假设有一个数组, 以遍历的方式在其中查找元素。
  • O(nlogn):求两个数组的交集, 其中一个是有序数组。 A数组每一个元素都要在B数组中进行查找操作,每次查找如果使用二分法则复杂度是 logN。
  • O(n2):平方复杂度。求两个无序数组的交集。

◼ 神奇的兔子数列

意大利中世纪数学家斐波那契以兔子繁殖为例子引入一个数列,称为“兔子数列”。

假设兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?

我们拿新出生的一对小兔子分析一下:

第一个月小兔子没有繁殖能力,所以还是一对。两个月后,生下一对小兔对数共有两对。三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对。

依次类推可以列出下表:

可以看出总体对数构成了一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,……


a = b =1
第一个月    1对  莫名其妙得到的												

【算法】妙不可言---算法复杂性相关推荐

  1. 递归算法 流程图_什么是算法?如何学习算法?算法入门

    转自:http://www.cnblogs.com/jiangwz/p/7765694.html 算法 什么是算法? 有一个很著名的公式 "程序=数据结构+算法". 曾经跟朋友吃饭 ...

  2. 递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径

    什么是算法? 有一个很著名的公式 "程序=数据结构+算法". 曾经跟朋友吃饭的时候我问他什么是算法,他说算法嘛,就是一套方法,需要的时候拿过来,套用就可以,我吐槽他,他说的是小学数 ...

  3. python实现五大基本算法_算法基础:五大排序算法Python实战教程

    排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...

  4. 【算法】算法设计技术

    算法设计技巧 文章目录 算法设计技巧 贪心算法(贪婪算法) 多处理器情况 活动选择问题 活动选择问题(加权) 递归解 独立集问题 树上的独立集问题 装箱问题 联机和脱机 近似在线装箱算法 脱机算法 分 ...

  5. 20世纪最好的十大算法、算法笔记(2008-11-15 22:16:57、2011-04-21 19:29:05)

    Algorithm(算法)一词与9世纪的阿拉伯学者al-Khwarizmi有关,他写的书<al-jabr w'al muqabalah>(代数学)演变成为现在中学的代数教科书.Ad-Khw ...

  6. 【算法】 算法和数据结构绪论

    算法和算法分析 先说点无关紧要的.初中的时候,知道有CS这门专门的学科存在的时候最开始的概念中CS就是等同于算法.这有可能是因为当时的前桌是后来一代CS传奇WJMZBMR..因为当时看起来十分高端,再 ...

  7. 算法总结---最常用的五大算法(算法题思路)

    算法总结---最常用的五大算法(算法题思路) 一.总结 一句话总结: [明确所求:dijkstra是求点到点的距离,辅助数组就是源点到目标点的数组] [最简实例分析:比如思考dijkstra:假设先只 ...

  8. 生成树的概念,最小生成树Prim算法 Kruskal算法

    求解最小生成树可以用Prim算法 Kruskal算法

  9. 期望最大化算法(Expectation-Maximum,简称EM)算法+EM算法+EM的应用

    期望最大化算法(Expectation-Maximum,简称EM)算法+EM算法+EM的应用 EM的应用 EM算法有很多的应用,最广泛的就是GMM混合高斯模型.聚类.HMM等等.具体可以参考Jerry ...

  10. 数据结构与算法:算法简介

    数据结构与算法:算法简介 雪柯 大工生物信息 提笔为写给奋进之人 已关注 你说呢 . shenwei356 等 70 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国 ...

最新文章

  1. 从AVL树的定义出发,一步步推导出旋转的方案。
  2. 再谈编程范式-程序语言背后的思想
  3. 信息系统项目管理师论文范文-干系人管理
  4. 【Leetcode】大神总结的链表常见面试问题
  5. C#修改系统环境变量,调用批处理bat
  6. 伺服电机停的时候会冲一下_造成伺服电机抖动的原因竟然是它!内附解决方法...
  7. 桂电计算机实训报告总结,桂林电子科技大学信息科技学院
  8. Codeforces 86C Genetic engineering (AC自己主动机+dp)
  9. Android通过命令连接wifi(解决usb不能用+无屏幕情况)
  10. html 收藏网站 功能实现,网站常用的收藏网站实现代码
  11. WeX5和BeX5的区别
  12. Android低功耗蓝牙通讯
  13. android viewpager实现画廊效果,ViewPager实现2D、3D画廊效果
  14. 浅谈数据挖掘与机器学习
  15. 使用Python和docTR提取车辆识别号
  16. 【Python处理EXCEL】--pandas导入Excel文件
  17. ASEMI代理AD8606ACBZ-REEL7原装ADI车规级AD8606ACBZ-REEL7
  18. 区块链技术培训—从技术小白到年薪百万区块链工程师的进阶之路
  19. 基于javaweb+SSM农产品水果店销售管理系统
  20. 绝地求生组装电脑配置推荐2021 适合玩吃鸡游戏电脑清单

热门文章

  1. 今天去元征科技,被SB面试了
  2. 安装IPA文件提示:(安装失败!应用缺少必要的描述文件)
  3. 百度关键词排名查询源码_百度推广优化技巧,百度搜索关键词排名优化
  4. Task 02 re(2.3)
  5. [corctf 2022] 部分
  6. Oracle Exadata一体机与云计算应用(四)
  7. ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)
  8. 打造“财务中台”,浪潮云ERP助推企业业财融合、强化管控
  9. 冠军专访:是情侣,更是夺冠道路上的最佳伙伴
  10. Java 反编译工具的使用与对比分析