2012-04-10 5 views
13

こんにちは、私はStringクラスの「でReplaceAll」機能の時間複雑であるかを知りたいが、私はそれ上の任意の情報を見つけることができません。Javaが含まれるようにするために(http://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlJavaにjavadocの各関数の時間/空間の複雑さが含まれていないのはなぜですか?

が、それは良いことではないだろうJavadocの複雑さ?誰かが知ることは非常に重要なことだと私は信じています。

答えて

9

ほとんどの関数は、かなり単純な順方向複雑度を持っています。 AFAIK、replaceAllはO(n)

IMHOです。これは自分自身を経験的にテストするものに勝るものはありません。プロファイラを使用すると、使用するメソッドの99%がアプリケーションのパフォーマンスにほとんど影響を及ぼさない可能性が高いためです。 Java APIの

3

保証があれば、複雑さが文書化されることがあります。たとえば、コレクションクラスの中には複雑さの保証があるものがあります。例えば、HashMapから:

この実装は、基本的な操作(getおよびput)に一定時間のパフォーマンスを提供しています...

しかし、時には複雑さがある:

  • 保証されておらず、実装の変更によって自由に変更できます。
  • 明らかにO(1)。
1

のjavadocは、ないどのようそれぞれの方法で行われなければならないの汎用規約を指定します。 APIの各実装者(たとえば、OpenJDK、OracleのJDKなど)は、各契約の実装方法に一定の自由を持ちます。自由には、パフォーマンスの犠牲を払っても最適化を行うことがあります。したがって、javadocsは、メソッドが特定のパフォーマンス要件を満たすことが絶対に必要でない限り、一般的に関数の時間/複雑さなどの詳細を指定しません。

0

基本的な操作の空間/時間の複雑さを使用して設計上の決定を下すのであれば、それは間違っていることをほぼ確実にしています。

まず、適切なアプリケーションを作成してプロファイルします。プロファイリングプロセスが明らかにしているものをボトルネックとして最適化します。

0

一般的な答えは、複雑さは、通常、分析するのが難しい要因に依存するということです。これは確かに有効な複雑さがregex文字列に致命的に依存するString.replaceAllに当てはまります。 (あまり設計されていない正規表現は、一致するveerryyyを遅くすることができます)

関連する問題