algorithm - 一个涵盖所有时间复杂性的问题
问题描述
这里有大学老师。我试图找到一个有意义的(实用的)代码示例,以 ELi5 的方式为初学者说明不同的时间复杂度。代码应该以恒定的复杂性开始,然后通过添加一小段代码逐渐增加复杂性:.., logn, n, nlogn, n^2, 2^n, ..
我想我可以通过一个具有较小增量更改的示例来更好地解释它,而不是将上下文从搜索切换到排序到蛮力算法。
解决方案
任何例子都是人为的。但这是一个做得相当好的。
让vec
是一个排序的数字数组、i
一个整数和x
另一个数字。依次回答下列问题。
O(1)
的价值是vec[i]
多少?O(n)
是否在线性搜索x
范围内?vec
O(log(n))
是否在二进制搜索x
范围内?vec
O(n^2)
x
范围内的两个元素的和vec
是双循环吗?O(n log(n))
是x
两个元素的总和,vec
第一个是线性搜索,第二个是二分搜索。(简化技巧,对第二个较小的二进制文件进行线性搜索。然后重用您的代码 3。)O(2^n)
是递归x
的任何元素子集的总和吗?vec
- (伪多项式)记忆前面的解。讨论内存与速度的权衡。
推荐阅读
- java - 我无法在 ExoPlayer 中关闭音频播放!空指针异常
- rabbitmq - Rabbitmq:集群中的节点重新启动后,未连接 SAC 队列的消费者
- spring - 用于 Spring Boot 2.4.3 的 Infinispan 版本
- java - 在 Android Studio 如何对 imageview 进行验证?
- reactjs - React SVG包括渐变不会显示
- extjs - extjs 6 中的谷歌街景
- excel - 如果特定单元格包含特定输入,则 Vba 标记复选框
- html - div背景没有正确浮动
- docker - Docker for windows,不好用
- c - 在向量中搜索最大值和索引