mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-12 07:26:07 +00:00
Remove incomplete zig code from docs. (#1837)
This commit is contained in:
@@ -316,12 +316,6 @@
|
||||
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
|
||||
```zig title=""
|
||||
|
||||
```
|
||||
|
||||
## 計算方法
|
||||
|
||||
空間計算量を計算する方法は時間計算量とほぼ同様で、統計対象を「操作数」から「使用空間のサイズ」に変更するだけです。
|
||||
@@ -468,12 +462,6 @@
|
||||
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
|
||||
```zig title=""
|
||||
|
||||
```
|
||||
|
||||
**再帰関数では、スタックフレーム空間を考慮に入れる必要があります**。以下のコードを考えてみましょう:
|
||||
|
||||
=== "Python"
|
||||
@@ -712,12 +700,6 @@
|
||||
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
|
||||
```zig title=""
|
||||
|
||||
```
|
||||
|
||||
`loop()`関数と`recur()`関数の時間計算量は両方とも$O(n)$ですが、それらの空間計算量は異なります。
|
||||
|
||||
- `loop()`関数はループ内で`function()`を$n$回呼び出し、各反復の`function()`は返ってそのスタックフレーム空間を解放するため、空間計算量は$O(1)$のままです。
|
||||
|
||||
@@ -177,21 +177,6 @@
|
||||
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
|
||||
```zig title=""
|
||||
// 特定の操作プラットフォーム下で
|
||||
fn algorithm(n: usize) void {
|
||||
var a: i32 = 2; // 1 ns
|
||||
a += 1; // 1 ns
|
||||
a *= 2; // 10 ns
|
||||
// n回ループ
|
||||
for (0..n) |_| { // 1 ns
|
||||
std.debug.print("{}\n", .{0}); // 5 ns
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
上記の方法を使用すると、アルゴリズムの実行時間は$(6n + 12)$ nsとして計算できます:
|
||||
|
||||
$$
|
||||
@@ -441,29 +426,6 @@ $$
|
||||
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
|
||||
```zig title=""
|
||||
// アルゴリズムAの時間計算量:定数オーダー
|
||||
fn algorithm_A(n: usize) void {
|
||||
_ = n;
|
||||
std.debug.print("{}\n", .{0});
|
||||
}
|
||||
// アルゴリズムBの時間計算量:線形オーダー
|
||||
fn algorithm_B(n: i32) void {
|
||||
for (0..n) |_| {
|
||||
std.debug.print("{}\n", .{0});
|
||||
}
|
||||
}
|
||||
// アルゴリズムCの時間計算量:定数オーダー
|
||||
fn algorithm_C(n: i32) void {
|
||||
_ = n;
|
||||
for (0..1000000) |_| {
|
||||
std.debug.print("{}\n", .{0});
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
下図はこれら3つのアルゴリズムの時間計算量を示しています。
|
||||
|
||||
- アルゴリズム`A`には1つの印刷操作のみがあり、その実行時間は$n$とともに増加しません。その時間計算量は「定数オーダー」と考えられます。
|
||||
@@ -641,20 +603,6 @@ $$
|
||||
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
|
||||
```zig title=""
|
||||
fn algorithm(n: usize) void {
|
||||
var a: i32 = 1; // +1
|
||||
a += 1; // +1
|
||||
a *= 2; // +1
|
||||
// n回ループ
|
||||
for (0..n) |_| { // +1 (毎回i++が実行される)
|
||||
std.debug.print("{}\n", .{0}); // +1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
アルゴリズムの操作数を入力サイズ$n$の関数として表す関数を$T(n)$とすると、以下の例を考えてみましょう:
|
||||
|
||||
$$
|
||||
@@ -902,27 +850,6 @@ $f(n)$が決まれば、時間計算量$O(f(n))$が得られます。しかし
|
||||
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
|
||||
```zig title=""
|
||||
fn algorithm(n: usize) void {
|
||||
var a: i32 = 1; // +0 (技法1)
|
||||
a = a + @as(i32, @intCast(n)); // +0 (技法1)
|
||||
|
||||
// +n (技法2)
|
||||
for(0..(5 * n + 1)) |_| {
|
||||
std.debug.print("{}\n", .{0});
|
||||
}
|
||||
|
||||
// +n*n (技法3)
|
||||
for(0..(2 * n)) |_| {
|
||||
for(0..(n + 1)) |_| {
|
||||
std.debug.print("{}\n", .{0});
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
以下の式は、簡略化前後のカウント結果を示しており、どちらも$O(n^2)$の時間計算量に導きます:
|
||||
|
||||
$$
|
||||
|
||||
Reference in New Issue
Block a user