javascript - 金字塔算法的大 O 成本
问题描述
我正在努力理解大 O 表示法,我想知道:金字塔算法的大 O 成本是多少?
pyramid(2)
结果是:
#
###
我知道解决它的一种方法是使用嵌套for
循环,例如:
function pyramid(n) {
const totalLengthOfRow = n * 2 - 1
for (let row = 0; row < n; row++) {
var line = ''
var middleCol = Math.floor(totalLengthOfRow / 2)
for (let col = 0; col < totalLengthOfRow; col++) {
if (col >= middleCol - row && col <= middleCol + row) {
line += '#'
} else {
line += ' '
}
}
console.log(line)
}
}
那应该是O(n2)
对的吧?由于两个for
循环都随着增长而n
增长。但是如果我使用string.repeat
并摆脱内for
循环呢?
就像是:
const numberOfHashes = 1 + row * 2
const numberOfSpaces = n * 2 - 1 - numberOfHashes
var line = ' '.repeat(numberOfSpaces / 2) + '#'.repeat(numberOfHashes) + ' '.repeat(numberOfSpaces / 2)
repeat
就像一个for
循环,因为它也根据 ? 的大小重复n
。
解决方案
假设第二种算法更聪明一些,因为在每一步你都不需要检查(使用条件语句)你必须打印哪个字符。
尽管如此,JSrepeat
函数只不过是循环的语法糖。因此,这两种算法(不仅在语义上,而且在渐近上)是等价的,特别是两者都是O(n^2)
。
推荐阅读
- c# - 解析器必应浏览器
- ibm-integration-bus - 消息流 - 在代理停止时结束
- swift - 弹出视图控制器后 Tableview 未加载数据
- c - 在不使用opencv的情况下将图像转换为灰度
- python - 熊猫百分比差异计算
- stata - 如何使用 esttab 在均值表中创建包含 N 个观测值的列的差异?
- c++ - 统一初始化以调用初始化列表以外的构造函数
- python - 错误引发 ValueError("unknown url type: %r" % self.full_url)
- python - PyQT5如何实现QTimer而不是time.sleep
- python - Python Pandas:将 DD.MM.YYYY 转换为日期时间