O(nⁿ) 使用循环或递归的复杂伪代码结构
O(nⁿ) complexity pseuodocode structure using loops or recursion
O(n) 时间只是一个循环,O(n²) 是一个循环内的循环,其中两个循环 运行 在 kn 次(k 是一个整数)。这种模式还在继续。但是,O(nᵏ) 的所有有限整数 k 都可以手动构造,您可以简单地将循环嵌套在另一个循环中,但是 O(nⁿ) 呢,其中 n 是接近无穷大的任意值?
我在想 while 循环在这里可以工作,但我们如何设置中断条件。此外,我相信 O(nⁿ) 的复杂性可以使用递归来实现,但从伪代码的角度来看,它看起来如何?
如何仅使用循环或递归构建 运行 复杂度为 O(nⁿ) 的算法?
一个非常简单的迭代解决方案是计算 nn 然后数到它:
total = 1
for i in range(n):
total *= n
for i in range(total):
# Do something that does O(1) work
这可以很容易地递归重写:
def calc_nn(n, k):
if k == 0:
return 1
return n * calc_nn(n, k - 1)
def count_to(k):
if k != 0:
count_to(k - 1)
def recursive_version(n):
count_to(calc_nn(n, n))
O(n) 时间只是一个循环,O(n²) 是一个循环内的循环,其中两个循环 运行 在 kn 次(k 是一个整数)。这种模式还在继续。但是,O(nᵏ) 的所有有限整数 k 都可以手动构造,您可以简单地将循环嵌套在另一个循环中,但是 O(nⁿ) 呢,其中 n 是接近无穷大的任意值?
我在想 while 循环在这里可以工作,但我们如何设置中断条件。此外,我相信 O(nⁿ) 的复杂性可以使用递归来实现,但从伪代码的角度来看,它看起来如何?
如何仅使用循环或递归构建 运行 复杂度为 O(nⁿ) 的算法?
一个非常简单的迭代解决方案是计算 nn 然后数到它:
total = 1
for i in range(n):
total *= n
for i in range(total):
# Do something that does O(1) work
这可以很容易地递归重写:
def calc_nn(n, k):
if k == 0:
return 1
return n * calc_nn(n, k - 1)
def count_to(k):
if k != 0:
count_to(k - 1)
def recursive_version(n):
count_to(calc_nn(n, n))