0

プロセス全体で文字列のリストを運ぶ動的プログラミング関数を実行しています。

時間が経つにつれて、このリストの最後に新しい文字列を追加し、場合によっては最後の要素を削除することがあります。現在、私は現在、変更可能な ListBuffer を使用して+=、追加と.trimEnd(1)削除を行っています。

動的プログラミング手順が完了したら、そのリスト/シーケンス/などの各要素に効率的にアクセスできるようにする必要があります (挿入した最初の項目が最初にアクセスされ、最後に挿入した項目が最後にアクセスされます) )。

ArrayBuffers も試しましたが、どちらも遅すぎるようです。私はこのプロセスを高速化しようとしていますが、必要なものに対して O(1) 回の操作を行うものがある場合に、O(n) 操作を行うデータ構造を使用しているかどうか疑問に思っています。

4

1 に答える 1

2

単純な単一リンクリストは、記述した内容の追加/破棄部分に O(1) を提供します。最悪の場合、処理の前に最後にリストを逆にする必要がある場合、それは一度支払われる O(n) 操作になります。

この道をたどると、蓄積段階で「最初」と「最後」が逆になることに注意してください(リストの末尾を取得することで、アイテムを先頭に追加し、最初のアイテムを削除します)。

于 2015-06-17T17:22:21.783 に答える