库存算法运行时的大O表示法

时间:2015-12-14 23:33:14

标签: algorithm big-o

为了安全起见,我可能无法发布任何文件的代码,但我可以描述正在发生的事情。基本上,我们有独立的项目和其他由较小的部分组成的项目。我们现有的现有系统就是这样的。假设我们每个套件都有n个项目和m个零件,其中m不是常数,在所有情况下都小于n。

for(all items){
    if(standalone){
        process item, record available quantity and associated costs
        write to database
    }
    if(kit){
        process item, get number of pre-assembled kits
        for(each part){
            determine how many are used to produce one kit
            divide total number of this specific part by number required, keep track of smallest result
            add cost of this item to total production cost of item
        }
        use smallest resulting number to determine total available quantity for this kit
        write record to database
    }
}

起初,我想说,为此花费的总时间是O(n ^ 2),但我不相信这是正确的,因为所有项目的n / 3都是套件,m通常在3到3之间8个部分。这会是什么?我已经测试了几次,感觉它没有经过优化。

1 个答案:

答案 0 :(得分:0)

从您发布的伪代码中可以很容易地计算出成本。你有一个循环超过n项(因此这是O(n)),并在这个循环内有另一个循环的O(m)。当您计算出嵌套循环意味着订单成倍增加:如果它们都是订单n那么这将给出O(n ^ 2);相反,它是O(mn)。

这假定您提到的处理在恒定时间内运行(即与输入的大小无关)。如果这些描述隐藏了一些其他处理时间,则此分析将是不正确的。