Scheme/Racketの実行時間set!
と実行時間を知っている人はいますか?begin
一定だと思いますset!
が、よくわかりません。
このset!
操作は、値をシンボルに関連付ける(「バインドする」)だけO(1)
です。これは、自尊心のあるプログラミング言語の場合です。バインディングを探すことは必ずしもO(1)
実装の詳細に依存するわけではありませんが、それはまったく別の問題です(Racketの詳細はわかりません)。
に関してbegin
は、それはシーケンス形式であり、それを適用すること自体にコストはなく、その内容(内部に保持されている式)のみが時間計算量を決定します。についても同じですが、割り当てset!
の値の部分の評価には時間がかかる場合がありますが、set!
操作自体はO(1)
設定!O(1) です。この点に関しては、Scheme と他の言語に違いはありません。
1 つの注意点: 設定してください! と begin の両方に部分式があります。どちらかで時間がかかる場合は、セットの評価を!(または開始)も同様です。
のパフォーマンスが気になる場合はset!
、ミューテーションを回避する方が高速になる可能性があることに注意してください。ラケット ガイド: 突然変異とパフォーマンスを参照してください。