三行代码  ›  专栏  ›  技术社区  ›  HelloWorld1337

O(n)复杂度使用循环或递归的伪代码结构

  •  0
  • HelloWorld1337  · 技术社区  · 1 周前

    千牛 乘以(k是一个整数)。这种模式还在继续。然而,O(ná)的所有有限整数k都可以手工构造,你可以简单地将循环嵌套在另一个循环中,但是对于O(n)呢,其中n是一个接近无穷大的任意值?

    我在想一个while循环可以在这里工作,但是我们如何设置一个中断条件呢。此外,我相信O(n)复杂性可以使用递归实现,但这看起来如何呢?

    如何构造一个只使用循环或递归在O(n)中运行的算法?

    1 回复  |  直到 1 周前
        1
  •  2
  •   templatetypedef    1 周前

    一个非常简单的迭代解是计算n N 然后数一数:

    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))