2009-03-11 23 views
2

ListBox.FindString(string)の最悪の実行時間とは何ですか? MSDNはAPIドキュメントでこれを述べていません。ListBox.FindString最悪の場合のランタイムは何ですか? O(n)、O(n log n)、O(1)?

私はソートされたリストとO(ログn)またはO(1)が良いだろうという強い疑いがあります、実行時にFindStringアルゴリズムを使用するソートアルゴリズムを変更する方法はありますか?

答えて

1

ListBoxにFindString()がどのように機能するかを示す十分な文字列がある場合は、文字列を格納する別の方法を検討する必要があります。

+0

さて、質問に答えるのはどうですか? – Alan

+0

ListBox.FindSTring()の実行時間はほとんど無関係です。UIテキストボックスは少数の文字列を保持するように設計されているため、線形検索は受け入れられます。ほとんどのアルゴリズムは、小さなNの方が高速です。Nが非常に大きい場合は、データストアとしてListBoxを使用すべきではありません。 – Michael

+0

私は知っている、それは最高のO(1)ルックアップのためのすべてのHashTableに格納しようとしていたが、> 100000 "単語"、ListBoxとHashTableはメモリに保持する必要があります:( – Kai

0

"指定された 文字列で始まるリストボックス の最初の項目を検索します。

リストの最初から線形検索のようなにおいがしますが、確かに知る方法はありません。

ListBoxで使用するアルゴリズムを変更することはできませんが、ListBoxを拡張して拡張クラスに任意の操作をさせることができます。 :D

1

リストボックスに膨大な数のアイテムを置くことが重要であるかどうか(実装に応じてユーザーにとっては面倒かもしれません)、私は私はそれが大文字と小文字を区別しない部分一致をすると信じているので、O(n)を推測する。

1

実は、あなたは方法は、Microsoftとして「マイクロソフトリファレンスソースコード」を介して利用できる自分の.NETベースクラスのソースコードを作成し、何を見ることができます(clicky) - あなたは(VSにBCLのコードにの多くのもをステップ実行することができますBCLのものはRotorで入手できますが、WinFormsのコードはIIRCではありません)。

コード(MSのライセンスに違反した場合に備えてここに貼り付けたくない)を調べると、方法は明らかです。O(n)最悪です。

基本的に、メソッドはリストの各項目をループし、下端に達すると(最愛のmod(%)演算子とカウンタをうまく使用して)リストの先頭に戻ります。明らかに、最悪の場合(すなわち、検索されたアイテムがリストにない)O(n)であり、リストの各メンバーを反復しなければならない。

関連する問題