私はアルゴリズムの速度を向上させようとしています。どの操作が呼び出されているのかを見て、遅くなっているものを正確に固定するのが難しいです。私はPythonのdeepcopy()がおそらく犯人になる可能性があるのか、それとも私自身のコードを少し詳しく見なければならないのだろうかと思います。Pythonのdeepcopy()の実行時の複雑さは何ですか?
答えて
(例えば辞書のキーと値、オブジェクトのメンバ変数、...)彼らのためにとし二つのこと:
- それは既に第二つO単純なオブジェクト(1)でない
場合、オブジェクトのIDインデックスmemo
辞書
最高で平均してdeepcopy
は線形です。 memo
で使用されるキーはid()
の値、すなわちメモリの場所なので、キースペース(上記の「平均」部分)にランダムには分散されず、悪化する可能性があります(最大でO(n^2)) 。私は実際の使用でいくつかの性能低下を観察しましたが、大部分は線形として動作しました。
これは複雑な部分ですが、定数が大きく、deepcopy
is anything but cheapという大きな問題が発生する可能性があります。唯一の知るべき唯一の方法は、プロファイラを使用することです。 FWIW、私は現在、実行時間の98%を費やす非常に遅いコードをdeepcopy
に書き直しています。
deepcopy()
の複雑さは、コピーされているオブジェクトのサイズ(要素数/子)によって異なります。
アルゴリズムの入力がコピーされるオブジェクトのサイズに影響しない場合は、各呼び出しの実行時間が比較的静的なため、複雑さを判断するためにdeeopcopy()
への呼び出しをO(1)
と考える必要があります。
(自分のアルゴリズムの入力はコピーされているオブジェクト(複数可)の大きさに影響を持っている場合は、その後、アルゴリズムの複雑さを評価できる方法を詳しく説明する必要があります。)
理論上の複雑さを判断するのではなく、実用的な性能評価をお探しの場合は、コードを投稿する必要があります。 – cheeken
それはちょうどナンセンスです、申し訳ありません。 'deepcopy'の本質は、深くコピーされるオブジェクトの参照グラフ内の全ての(サブ)オブジェクトの数に少なくとも*線形の複雑さがなければならないことを痛感することです。 –
をしている何あなたのためにdeepcopy
を使用していますか?名前からわかるように、deepcopy
はオブジェクトとすべてのサブオブジェクトを再帰的にコピーするので、コピーしているオブジェクトのサイズに比例した時間がかかります。
すべてをコピーする場合は、すべてをコピーする必要があります。スピードアップする方法はありません。
質問すると、すべてをコピーする必要がありますか、または構造の一部をコピーするだけですか? (あなたもすることができます)、それが参照されるオブジェクトのツリー内のすべてのオブジェクトを通過するコードを見てみると
- 1. このコードの実行時の複雑さは何ですか?
- 2. Pythonでのdict.keys()の時間の複雑さは何ですか?
- 3. この関数の実行時の複雑さは何ですか?
- 4. 実行時間の複雑さ
- 5. アルゴリズムの複雑さと実行時間
- 6. 連続実行時の複雑さ
- 7. 私のコードの時間の複雑さは何ですか?
- 8. 次のプログラムの時間の複雑さは何ですか?
- 9. 私のコードの時間の複雑さは何ですか
- 10. このアルゴリズムの時間の複雑さは何ですか
- 11. C:qsort関数の時間の複雑さは何ですか?
- 12. HTML DOMルックアップの時間の複雑さは何ですか
- 13. int( '1010'、2)の時間の複雑さは何ですか?
- 14. list.index(obj)メソッドの時間の複雑さは何ですか?
- 15. 時間の複雑さは、Python
- 16. このアルゴリズムの実行時の複雑さは?
- 17. パスカル・トライアングル・アルゴリズムの時間複雑さは何ですか?
- 18. Linq OrderBy()の時間複雑さは何ですか?ThenBy()メソッドシーケンス?
- 19. dist()の複雑さは何ですか?
- 20. 配列[:: - 1]の複雑さと空間の複雑さは何ですか
- 21. このコードの実行時間と空間の複雑さ
- 22. 以下のアルゴリズムの実行時の複雑さ
- 23. フロイドのサイクル検出の実行時の複雑さ
- 24. ループ内の再帰の実行時の複雑さ
- 25. 再帰アルゴリズムの実行時の複雑さ
- 26. 時間の複雑さは
- 27. Pythonでzip()の時間の複雑さはどのくらいですか?
- 28. スキーム内の 'assoc'関数の時間の複雑さは何ですか?
- 29. heapqライブラリの関数の時間の複雑さは何ですか
- 30. Pythonのdictから要素をポップする時間の複雑さは何ですか?
'deepcopy'の複雑さは、おそらくその名前からわかるように、引数から到達可能な値の総量に比例します。それは病理学的なケースの大部分であるかもしれません。 –
@BasileStarynkevitch:回答を回答として投稿してください。 –