私は次の問題の時間の複雑さを考えていました。正しい解決策はそれがO(logN)だと言います。私はこのループが終了する場合、これを理解しています。しかし私たちは半分しかないので、理論的には私は本当に0に近づくことができますが、決して終わらないでしょうか?ループエンドは、無限大がゼロに近づくと終了しますか?
0
A
答えて
1
はい、ループは実際に終了します。 i
はint
なので、i
を半分にすると、整数除算が実行されます。この除算の結果は、最も近い整数に切り下げられます。
int i=3;
int j= i/2;
// j really is 1.5, but we're performing integer division
// so the result will be j =1
私たちはN=5
のためのあなたのプログラムの実行を考えると、私たちは持っている:
最初の反復:
i=5;
i = i/2 = 5/2 = 2.5 = 2; //Round 2.5 down
2回目の反復:
i=2
i = i/2 = 2/2 = 1;
サード例えば 繰り返し:
1
浮動小数点値ではなく、int
を除算していることに留意することが重要です。したがって、分数コンポーネントはありません。代わりに、残りの部分は単に破棄されます。したがって、1になると0.5になり、整数の部分だけを取るので、0になります。したがって、これは最終的に終了します。例えば
、あなたは10
を開始した場合:
10/2
は1
-remainderの残りの部分と5
5/2
ある2
あるi
が2
2/2
されているdiscarded-ある1
1/2
あなたは整数演算を使用しているdiscarded- i
が0
1
ですので1
-remainderの残りの部分で0
ですが、私はここでpicoc
$ picoc -i
starting picoc v2.1
picoc> #include <stdio.h>
#include <stdio.h>
picoc> int a=0, i=10;
int a=0, i=10;
picoc> a += i; i /= 2; printf("a=%d i=%d\n",a,i);
a += i; i /= 2; printf("a=%d i=%d\n",a,i);
a=10 i=5
picoc> a += i; i /= 2; printf("a=%d i=%d\n",a,i);
a += i; i /= 2; printf("a=%d i=%d\n",a,i);
a=15 i=2
picoc> a += i; i /= 2; printf("a=%d i=%d\n",a,i);
a += i; i /= 2; printf("a=%d i=%d\n",a,i);
a=17 i=1
picoc> a += i; i /= 2; printf("a=%d i=%d\n",a,i);
a += i; i /= 2; printf("a=%d i=%d\n",a,i);
a=18 i=0
あなたのループを使用してインタラクティブな例です0 に行くんこの時点で終了しました。
関連する問題
- 1. カスタムフィールドを更新すると無限ループが終了します
- 2. Pythonメモリの制限?限界に近づくとGCがクリアされますか?
- 3. 無限ループ:プロセスが正しく終了しない
- 4. whileループはゼロで終了します
- 5. アプリケーションを終了して無限ループを終了
- 6. ProcessException:org.gradle.process.internal.ExecException:ゼロ以外の終了値1で終了しました。
- 7. トラブルが終わりに近づくと、実行時エラー9
- 8. 無限のwhileループを終了する
- 9. RxJava - 無限ストリームを終了する
- 10. 無限のスクロールが終了するまで待機する - Javascript
- 11. matlab fminuncが終了しない(無期限に実行中)
- 12. 処理コマンドgitがゼロ以外の終了値で終了しました128
- 13. ProcessException:aaptがゼロ以外の終了値2で終了しました
- 14. Android Studio 2.3.3がゼロ以外の終了値で終了しました
- 15. ndkがゼロ以外の終了値で終了しました69
- 16. Gradle - java.exeがゼロ以外の終了値1で終了しました
- 17. パッカースクリプトがゼロ以外の終了ステータスで終了しました:127
- 18. パイゲームの無限ループを終了するときに問題があります
- 19. 「ゼロ以外の終了値1で終了しました」とは何ですか?
- 20. このメソッドは再帰を終了し、最大限に達することができますか?
- 21. java.exeはゼロ以外の終了値で終了しました。1 android studio
- 22. はで終了し、ゼロ以外
- 23. 無限ループ問題(Python)の終了
- 24. mysqlのルート上で(近くに)開始して終了する
- 25. イオニック3無限スクロール終了多くのデータが見つからない場合
- 26. javascriptを避けるゼロで割りると無限大
- 27. ユーザーが終了するとNSTimerを無効にして無効にします。
- 28. Tensorflowのexpは無限大ではなくmaxに制限されますか?
- 29. アプリケーションが終了すると、DB接続はすぐに終了しますか?
- 30. Javaデーモンスレッドは、親が終了すると自動的に終了しますか?