2

宿題のために考えなければならなかったアルゴリズムのBigO表記を書き留める必要があります。

以下のコードはですO(n^2)。なぜなら、すべてのxについて、すべてのyを通過する必要があり、世界が大きくなるにつれて遅くなるからです。

int[][] world = new world[20][20];
for (int x = 0; x < 20; x++)
{
    for (int y = 0; y < 20; y++)
    {
        ..
    }
}

しかし、別の質問については、世界の下半分を通過する必要があるため、yループが半分になります。

int[][] world = new world[20][20];
for (int x = 0; x < 20; x++)
{
    for (int y = 10; y < 20; y++)
    {
        ..
    }
}

上記のループにどのBigO表記が適切かはよくわかりませんが、それでもO(n^2)、世界が大きくなるほど遅くなるためですか?それともO(log n)、yが半分になっているからですか?

4

3 に答える 3

10

O(n*n/2)=O(n^2)大きなOでは定数が考慮されていないため、簡単に言えば.

于 2012-09-10T11:15:05.463 に答える
4

両方のアルゴリズムは実際にはO(n)です(nが入力のビット数であると仮定すると、これは一般的な定義です)。最初のものは、ワールド配列の各「ピクセル」に1回触れるので、O(n)であることが簡単にわかります。2つ目はピクセルの半分に接触しますが、O(n / 2)= O(n)であるため、O(n)のままです。どちらの場合も、ワールド配列のサイズを2倍にすると、実行時間がほぼ2倍になります。これは、O(n)アルゴリズムで一般的です。

于 2012-09-10T11:28:49.457 に答える
4

O(n^2)y はまだ n の関数であるため、 ie is O(n^2/2)stillO(n^2)です。

于 2012-09-10T11:16:08.287 に答える