范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

图解算法数据结构时间复杂度定义

  算法复杂度旨在计算在输入数据量 N 的情况下,算法的「时间使用」和「空间使用」情况;体现算法运行使用的时间和空间随「数据大小 N 」而增大的速度。算法复杂度主要可从时间 、空间 两个角度评价:
  时间: 假设各操作的运行时间为固定常数,统计算法运行的「计算操作的数量」 ,以代表算法运行所需时间;
  空间: 统计在最差情况下,算法运行所需使用的「最大空间」;
  「输入数据大小 N 」指算法处理的输入数据量;根据不同算法,具有不同的定义,例如:
  时间复杂度指输入数据大小为 N 时,算法运行所需花费的时间。需要注意:
  统计的是算法的「计算操作数量」,而不是「运行的绝对时间」。计算操作数量和运行绝对时间呈正相关关系,并不相等。算法运行时间受到「编程语言 、计算机处理器速度、运行环境」等多种因素影响。例如,同样的算法使用 Python 或 C++ 实现、使用 CPU 或 GPU 、使用本地 IDE 或LeetCode平台提交,运行时间都不同。
  体现的是计算操作随数据大小 N 变化时的变化情况。假设算法运行总共需要「 1 次操作」、「 100 次操作」,此两情况的时间复杂度都为常数级 O(1) ;需要「 N 次操作」、「 100N 次操作」的时间复杂度都为 O(N) 。符号表示
  根据输入数据的特点,时间复杂度具有「最差」、「平均」、「最佳」三种情况,分别使用 O , Θ , Ω 三种符号表示。以下借助一个查找算法的示例题目帮助理解。题目: 输入长度为 N 的整数数组 nums ,判断此数组中是否有数字 7,若有则返回 true ,否则返回 false 。
  解题算法: 线性查找,即遍历整个数组,遇到 7 则返回 true 。
  代码:Pythondef find_seven(nums):     for num in nums:         if num == 7:             return True     return False
  最佳情况Ω(1) : nums = [7, a, b, c, ...] ,即当数组首个数字为 7 时,无论 nums 有多少元素,线性查找的循环次数都为 1 次;
  最差情况 O(N) : nums = [a, b, c, ...] 且 nums 中所有数字都不为 7 ,此时线性查找会遍历整个数组,循环 N 次;
  平均情况 Θ : 需要考虑输入数据的分布情况,计算所有数据情况下的平均时间复杂度;例如本题目,需要考虑数组长度、数组元素的取值范围等;
  大 O 是最常使用的时间复杂度评价渐进符号,下文示例题目解析皆使用 O 。常见种类
  根据从小到大排列,常见的算法时间复杂度主要有:
  O(1) < O(log N) < O(N) < O(Nlog N) < O(N^2) < O(2^N) < O(N!)
  示例解析
  对于以下所有示例,设输入数据大小为 N ,计算操作数量为 count。图中每个「蓝色方块」代表一个单元计算操作。
  常数 O(1) :运行次数与 N 大小呈常数关系,即不随输入数据大小 N 的变化而变化。def algorithm(N):     a = 1     b = 2     x = a * b + N     return 1
  对于以下代码,无论  a  取多大,都与输入数据大小 N   无关,因此时间复杂度仍为 O(1) 。 def algorithm(N):     count = 0     a = 10000     for i in range(a):         count += 1     return count
  线性O(N):循环运行次数与 N   大小呈线性关系,时间复杂度为 O(N)。 def algorithm(N):     count = 0     for i in range(N):         count += 1     return count
  对于以下代码,虽然是两层循环,但第二层与 N大小无关,因此整体仍与 N 呈线性关系。# Python def algorithm(N):     count = 0     a = 10000     for i in range(N):         for j in range(a):             count += 1     return count
  平方 O(N^2):两层循环相互独立,都与 N 呈现线性关系,因此总体与 N 呈平方关系,时间复杂度为 O(N^2)def algorithm(N):     count = 0     for i in range(N):         for j in range(N):             count += 1     return count
  以「冒泡排序」为例,其包含两层独立循环:
  第一层复杂度为 O(N);
  第二层平均循环次数为N/2,复杂度为 O(N) ,推导过程如下:
  因此,冒泡排序的总体时间复杂度为 O(N^2) ,代码如下所示。 def bubble_sort(nums):     N = len(nums)     for i in range(N - 1):         for j in range(N - 1 - i):             if nums[j] > nums[j + 1]:                 nums[j], nums[j + 1] = nums[j + 1], nums[j]     return nums
  指数 O(2^N) :生物学科中的 "细胞分裂" 即是指数级增长。初始状态为 1个细胞,分裂一轮后为 2 个,分裂两轮后为 4 个,……,分裂 N 轮后有 2^N 个细胞。
  算法中,指数阶常出现于递归,算法原理图与代码如下所示。def algorithm(N):     if N <= 0: return 1     count_1 = algorithm(N - 1)     count_2 = algorithm(N - 1)     return count_1 + count_2
  指数 O(2^N)
  阶乘 O(N!):阶乘阶对应数学上常见的 "全排列" 。即给定 NN 个互不重复的元素,求其所有可能的排列方案,则方案数量为:
  N (N 1) (N 2) 2 1=N!
  如下图与代码所示,阶乘常使用递归实现,算法原理:第一层分裂出 N 个,第二层分裂出 N - 1个,…… ,直至到第 N 层时终止并回溯。def algorithm(N):     if N <= 0: return 1     count = 0     for _ in range(N):         count += algorithm(N - 1)     return count
  对数 O(log N):对数阶与指数阶相反,指数阶为 "每轮分裂出两倍的情况" ,而对数阶是 "每轮排除一半的情况" 。对数阶常出现于「二分法」、「分治」等算法中,体现着 "一分为二" 或 "一分为多" 的算法思想。
  设循环次数为 m,则输入数据大小 N 与 2 ^ m 呈线性关系,两边同时取 log2对数,则得到循环次数 m 与 log2N 呈线性关系,即时间复杂度为 O(logN) 。def algorithm(N):     count = 0     i = N     while i > 1:         i = i / 2         count += 1     return count
  如以下代码所示,对于不同 aa 的取值,循环次数 mm 与 loga N 呈线性关系 ,时间复杂度为O(loga N) 。而无论底数 a 取值,时间复杂度都可记作O(logN) ,根据对数换底公式的推导如下:
  def algorithm(N):     count = 0     i = N     a = 3     while i > 1:         i = i / a         count += 1     return count
  如下图所示,为二分查找的时间复杂度示意图,每次二分将搜索区间缩小一半。
  线性对数 O(Nlog N):两层循环相互独立,第一层和第二层时间复杂度分别为 O(logN) 和 O(N) ,则总体时间复杂度为O(NlogN) ;def algorithm(N):     count = 0     i = N     while i > 1:         i = i / 2         for j in range(N):             count += 1
  线性对数阶常出现于排序算法,例如「快速排序」、「归并排序」、「堆排序」等,其时间复杂度原理如下图所示。
  线性对数 O(Nlog N)

怀念锤子科技小米MIX4发布了,但还有人记着锤子科技吗?应该没有人记得吧,而我却始终记得那个在锤子发布会上讲着李姐万岁的罗老师,还有那一个锤子科技。谁还曾经不是一个讲着下次一定买的锤粉呢?锤子被捧上神坛的阿里,我们是时候该降降温了最近阿里女员工被性侵事件,在全网引发关注,热度持续居高不下,很多人纷纷说,如今的阿里究竟是怎么了?后马云时代,阿里这艘大船又该如何远航?阿里的破冰文化真的是毫无下限和尺度吗?可以说新款比亚迪唐EV续航里程达700公里还有啥里程焦虑?日前,我们从新能源汽车推广应用推荐车型目录(2021年第7批)获悉,新款比亚迪唐EV续航里程大幅提升,其NEDC续航分别达到700公里和615公里,与现款车型最高565公里的NED为什么只有特斯拉能一直降价,其它家都不行?特斯拉又降价了。但是,这次我们并不关心特斯拉又降了多少,因为只要特斯拉的基本理念不变,降价是必然的过程。我们关心的,是特斯拉每一次降价,都是离它的生态闭环,又进了一步。表面上,这是阿里不再是阿里文孟永辉继阿里女员工实名举报上司强制要求出差,并被灌酒,并且被男商户猥亵的事件爆出之后,阿里再一次站在了风口浪尖之上。对于阿里来讲,这个周末或许是最难熬的。或许,比蒋凡事件还要恶劣字节终止招聘阿里涉事男员工选人,要选对人一回顾阿里807事件八月第一个周末,阿里女员工被高管侵犯一事持续发酵,引起社会各界高度关注。直到8月9日凌晨,阿里巴巴董事会主席兼CEO张勇在阿里内网公布了女员工被侵犯的阶段性内部后野蛮增长时代,快手电商的品牌之战任何一个下沉市场渗透率高的平台,都必将面对品牌升级这一关。文姚胤米时娴高洪浩编辑宋玮一代人如何赚钱,又如何花钱,体现了一个时代的特质。这是一个消费选择和消费方式都被数据化了的时代。小米MIX4正式发布,全新陶瓷配色,4999起,满身黑科技就在刚刚,雷总发布了最新的旗舰手机MIX4,最低配4999元起,全新配色影青灰正式亮相。根据雷总展示,最新青色陶瓷非常漂亮,晶莹剔透,带有一丝釉的美感!根据发布会介绍,本次全新MI美妆行业开店如何用大数据科学选址美妆行业开店如何用大数据科学选址大数据(bigdata),IT行业术语,是指无法在一定时间范围内用常规软件工具进行捕捉管理和处理的数据集合,是需要新处理模式才能具有更强的决策力洞察支持光追安兔兔评测Windows版上线四大测试项目等你体验继AndroidiOS,以及Linux版后,安兔兔评测Windows版今天正式上线。与其它版本一样,安兔兔评测Windows版共提供了四大测试项目,分别为CPUGPUMEM和UX。内蒙古最后一个比特币矿工停电每天至少造成数千万损失在内蒙古鄂尔多斯以北100公里处,有一个叫达拉特的小镇。这个名字在地理意义上很常见,但在比特币世界里,它是一个风云密布的地方达拉特曾因收集大型比特币矿藏而闻名于业界。在过去的几年里
天灾导致房屋损毁,房贷还需要继续偿还吗?工作人员告知真相由于房产是高价值的商品,如果按照现在每平方一万的均价,一百平就是一百万,而且这个价格还不是在北上广浙江苏州这些地方,一万一平价格的房子在这些地方根本看不到。对于普通家庭来说,一次性简简单单的红点设计大奖,让iQOO7设计团队付出怎样的努力最近机圈可谓是打的火热,先是一加9系列的发布,紧接着又迎来了小米11Pro的发布,而且这两款机型的定价都还在旗鼓相当的位置,很多网友表示,这安卓机皇之争看来大家都是拼尽了全力的啊!有了这个网红无线电动拖地机,孩子也能轻松完成拖地工作自从用了智能扫地机后,家里地板上的灰尘碎物少了,再也不必每天都拖着吸尘器去打扫。享受(偷懒)惯了后,我们又尝试用两台扫拖一体的扫地机来完成拖地工作。可看过扫地机的拖地效果后,我们只你的老板真的没你强很多人都觉得能当老板的一定很厉害,但事实上还真不一定!很多老板能挣到第一桶金真的就只是运气好,跟能力毫无关系。大家都懂你以为老板他就比你聪明比你厉害么?在你的专业领域他搞不好不如一效仿亚马逊?AI监测打工人摸鱼,老板裁员百人,美团腾讯笑了文海燕我们称赞阿里巴巴百度华为美团滴滴等企业勇于承担社会责任,大手一挥,捐出几千万的善款。然而,最近北大姚洋尖锐地提出,想承担社会责任,与其捐款,不如不要搞996并且给外卖骑手们缴iQOONeo5超强配置强势来袭,你喜欢的它都有近日刚发布的iQOONeo5可以说是吸引了一大票年轻用户的喜爱,无论是从2499元的起售价,还是配置方面都对消费者有着超强吸引力。这款手机在当代年轻人喜欢的游戏方面重点下功夫,不仅体验过iQOONeo5之后,才发现夏天玩游戏,手机也是可以不烫手的最近正值暑假期间,很多同学会选择这个时间段给自己换一款心仪的机型,但是什么样的机型更适合同学们入手呢?我想颜值与实力并存的次旗舰会是更好的选择。而在众多次旗舰手机中,iQOONeo喜欢大屏又嫌荣耀Note10贵?又大又便宜的荣耀8XMax要来了7月份上市的荣耀Note10口碑爆棚,水桶旗舰机名副其实。可是对于部分喜欢大屏的人来说,还是觉得荣耀Note10的2799元起步的价格还是贵了些。目前市场上大屏的手机不少,可超大屏没有主流三摄的魅族16s你还会喜欢吗小米9的相摄相机在DxO的评测中获得了高分,用户的评价中也可以看出口碑不错。今年三摄已经是旗舰手机的主流配置,长焦和超广角的配置在特定场景里使用还是很不错的。不过,有一款即将推出的我颜控,我很喜欢男朋友,但是他太丑了怎么办?如果一个真心实意对待你的,就不要嫌弃了,相处一段时间,自然会发现外貌并不重要了这还用问吗?继续喜欢呗!他那么丑的一个人,都能让有颜控的你喜欢上。可想而知,他在别的方面,是多么的魅力ROG游戏手机5上手颜值很亮眼,游戏体验更惊艳ROG作为端有的游戏硬件大厂,在进入游戏手机领域也称得上顺风顺水,不但持续和腾讯保持合作,而且每年的新品都来不少的惊喜。如今,ROG游戏手机5在不久前正式发售,我也第一时间拿到其中