algorithm - 找出这个最小硬币贪婪算法的大 O
问题描述
static void coin(int[] d, int amount) {
int num_coin;
for (int i = d.length - 1; i >= 0; i--) {
num_coin = amount / d[i];
System.out.println("You should give " + num_coin + " coins of denomination " + d[i]);
amount = amount % d[i];
}
}
取决于我发送这个算法的内容,这会改变它的大 O 吗?意思是,如果我发送一个总量为 1 的 1,它将运行 O(1) 时间,对吧?如果我发送总共 5 个的 {1},那是 O(5) 还是 O(n)?
如果我发送 {1,4,16,64} 寻找总共 55 个,那仍然是 O(n) 吗?n 是数组中的总数
解决方案
算术运算 (+, -, /, *) 有一个 O(1)
您正在循环 int 数组d
,这会产生 O(items in loop) 的复杂性
假设 n 是 int 数组 d 中的项目数,那么这个算法的最终 Big O 可以写成,O( N + 1 + 1) = O(n)
为了解决您的问题,您不会根据数量的值影响该算法的复杂性,重要的是循环运行的次数,在这种情况下它不是固定的(即不是恒定的)
推荐阅读
- python - 如何让我的精灵在 python 的模块中正常行走:pygame?
- angular - 从哪里我可以在 ionic 4 /Angular 8 中导入布尔值
- javascript - 为什么只有一些数组方法会创建新实例?
- java - 如何从 JPanel 中的操作交换 JPanel
- excel - 出现 Excel VBA 错误 - 好像 VBA 看不到对象并且无法选择单元格
- python - 使用python的列表中未解决的参考消息
- javascript - 如何更改 [innerHTML] 的 svg 填充颜色
- service-worker - 无论如何可以从通知水龙头打开 TWA 吗?(client.focus() 对于 TWA 失败,但适用于 chrome 选项卡或已安装的 PWA)
- r - 只有在我连接到我的工作 VPN 后,R Studio 才会非常慢?
- sql - 需要将我的 SQL 查询转换为不相关实体的休眠条件查询