人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

[Java]メソッドの計算量を表示してくれるeclipseプラグインがあれば教えてください。
たとえば、String.equals()よりString.equalsIgnoreCase()の方が計算が複雑なように思えます(※)。
この場合、equals()にマウスをフォーカスしたら「計算量:5」とか、equalsIgnoreCase()にマウスをフォーカスしたら「計算量:20」とかツールチップで表示してくれるようなプラグイン。
マウスフォーカス&ツールチップという表示形式でなくてもいいです。

(※)この私の思い込みはひょっとしたら完全に間違いかもしれませんが、単なる説明のための例示なので、間違っていないものとして読んでください。
(※2)ここで「計算量」という言葉は正確ではないかもしれません。その場合、「重さ」とか何とか、フィーリングで読み替えてください。

なお、この質問が全くの的外れなものである場合、なぜ・どのように的外れで、質問者(私)はどのように勘違いをしているかアドバイスをお願いします。

●質問者: arukichigai
●カテゴリ:コンピュータ インターネット
✍キーワード:eclipse Java String いもの いるか
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● くない / あしけ
●60ポイント

作ろうとしているプログラムによりますが、基本的にはこの質問は的外れだと思います。

理由は、「計算量」の違いは些細なものだからです。

それに従うと、この例のString.equals()とString.equalsIgnoreCase()は同じ、O(n)という計算量です。

もちろん計算する時間に多少の違いはありますが、それは些細です。なぜなら、どちらにせよ、n(ここでは文字列の長さ)が100倍になれば、時間は100倍だからです。

計算量が違うというのは、例えば、nが100倍なら時間が10000倍つまりO(n^2)だとか、nが5ふえただけなのに時間が30倍つまりO(2^n)だとか、そういうもののことをいいます。

たとえば、equalsとequalsIgnoreCaseがあったとして、equalsIgnoreCaseのほうが時間がかかるからといって自分でIgnoreCaseを実装するのは無駄だと思います。

より近い機能のものを選択するのがよいのではないでしょうか。

無理して高速化しようとして、コードに無駄がでて開発しづらくなるようでは、元も子もないと思います。

特に注意が必要だとすれば、主にコレクション(データの集合)の扱いでしょう。

ここは目的によって効率のよいデータ構造がよく考えられているので、正しい選択をしないと計算量が大きく変化するかもしれません。

また、何度も同じ計算をさせるのは確かに非効率で、メモ化とか動的計画法という方法で高速化するケースはあります。ただし、メソッドの実行時間とは関係ないですね。

例として、フィボナッチ数列の計算が有名です。我田引水ですが、http://d.hatena.ne.jp/qnighy/20090120/1232446370 などを参照してください。

また、Javaでかかれたものなら、この記事などがあります。http://programamemo2.blogspot.com/2006/05/java.html

些細な計算を変更するより、ネットワークやファイルなどのI/Oを見直したほうがいい、ということは多いでしょう。

単純なプログラムならいいのですが、事前の計算だけで高速化しようとするのは無駄だと思います。

プロファイラとよばれるツールを使えば、どこに最も処理が集中しているかわかります。それを使って、最も問題のある箇所からつぶしていくのがよいでしょう。

どの方法が高速かというのも、状況によって異なるでしょうから、実際に実行して比較するのがよいでしょう。

プログラムのうち20%が、実行時間の80%を占めているとは、よく言われますしね。

以上より、この質問は的外れだと思います。

◎質問者からの返答

丁寧なご回答ありがとうございます。

とても勉強になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ