【发布时间】:2019-10-02 11:22:32
【问题描述】:
我最近被问到一个关于测试数独板有效性的面试问题。基本答案涉及for 循环。本质上:
for(int x = 0; x != 9; ++x)
for(int y = 0; y != 9; ++y)
// ...
执行这个嵌套的for 循环来检查行。再次执行以检查列。为子方块再做一个,但那个更时髦,因为我们将 suoku 板划分为子板,所以我们最终会得到两个以上的嵌套循环,可能是三个或四个。
后来有人问我这段代码的复杂性。坦率地说,就我而言,董事会的所有单元都被访问了三遍,所以O(3n)。对我来说,我们有嵌套循环这一事实并不意味着这段代码自动成为O(n^2) 或even O(n^highest-nesting-level-of-loops)。但我怀疑这就是面试官所期望的答案......
换个说法,这两段代码的复杂度是多少:
for(int i = 0; i != n; ++i)
// ...
和:
for(int i = 0; i != sqrt(n); ++i)
for(int j = 0; j != sqrt(n); ++j)
// ...
【问题讨论】:
标签: time-complexity