algorithm - 计算递推方程输入大小的策略?
问题描述
我正在努力寻找一种精确的方法来了解我们的尺寸n
应该如何定义。证明我的意思;以二进制搜索为例。的输入大小定义n
为。我真的不明白我们怎么能T(n)
high - low + 1
- 仅从算法中找出答案,而无需进行“有根据的猜测”
- 确认我们没有浪费时间用错误导出的输入大小证明递归方程
我真的很感激一些建议,在此先感谢。
解决方案
实际上,输入大小通常不是任意的。有必要正确确定那是什么。
那么我们该怎么做呢?
首先,您必须了解该算法 - 它的作用以及您为什么要使用它。通常你可以很容易地暴力破解任何问题,但你仍然决定使用更好的东西。为什么?回答这个问题应该让一切都清楚。
让我们看一下您的二进制搜索示例。你想通过调用一个单调函数来找到一个特定的值,这个函数会告诉你你的选择是太低还是太高。例如,您可能希望在数组中找到小于特定数字的最大值。
什么是蛮力方法?好吧,您可以要求所有可能的值。什么影响复杂性?您可以选择的值的数量。那是您的输入大小。为了降低复杂性,您可能希望使用二分搜索,它可以让您执行更少的查询。输入大小保持不变。
让我们看看其他一些算法:
- GCD的欧几里得算法 - 蛮力?搜索小于或等于输入最小值的每个数字。什么影响复杂性?您要检查的值的数量,即您要为其查找 GCD 的数字。
- BFS/DFS(图遍历)——你想访问每个节点一次。对于每个节点,您必须另外检查每条边。总而言之:输入大小是节点和边的数量。
- KMP/Karp-Rabin/任何其他模式查找算法 - 您想查找文本中出现的模式,输入大小显然是文本大小,也是模式大小。
一旦你理解了算法解决的问题,就可以考虑一种蛮力方法。确定影响速度的因素,可以改进的因素。这很可能是您的输入大小。在更复杂的情况下,输入大小在算法的描述中说明。
推荐阅读
- javascript - 从文本框中获取值不会给出单行字符串?
- php - 连接错误 08001:[unixODBC][Teradata][ODBC] (10380) 无法与数据源建立连接。缺少设置:PHP 中的 {[DBCName]}
- redis - RedisInsight:redis 实例不支持“MEMORY”命令
- python - 如何在基于 Django 类的视图中限制用户组的访问?
- delphi - 代码取一个值并随机/“不相等”地划分它。我怎样才能让它适用于实数/十进制值?
- javascript - Angular子组件重新加载放置在ngif div中的所有内容
- python - 检查交易组之间的值是否发生变化
- java - 验证对象不接受数据类型的 SPRING 函数
- angular - 未定义 fetchCompletion 中的错误 - Angular 10 Visual Studio 代码
- ios - 将按钮添加到显示另一个模态视图控制器的自定义单元格