2

好奇心から、ListBox.FindString(string)の最悪の場合の実行時間は何ですか?MSDNは、APIドキュメントにこれを記載していません。

私はそれがO(n)であると強く疑っています、私はソートされたリストを持っています、そしてO(log n)またはO(1)がいいでしょう、FindStringが実行時に使用するソートアルゴリズムを変更する方法はありますか?

4

4 に答える 4

1

ListBoxに十分な文字列があり、FindString()の動作の大きなOが重要である場合は、文字列を格納する別の方法を検討する必要があります。

于 2009-03-11T17:33:02.427 に答える
1

実際には、Microsoft が .net 基本クラスのソース コードを「Microsoft Reference Source Code」(クリック) で利用できるようにしているため、メソッドの動作を確認できます。VSBCL コードにステップ インすることもできます (BCL の多くは、 Rotor、.net のオープン ソース実装ですが、WinForms コードは利用できません (IIRC)。

コードを調べると (MS のライセンスに違反する場合に備えてここに貼り付けたくありません)、メソッドがO(n)ワーストケースであることは明らかです。

基本的に、このメソッドはリスト内の各項目をループし、リストの一番下に到達するとリストの一番上に戻ります (これまでにない mod (%) 演算子とカウンターを巧妙に使用することにより)。明らかに、リストのすべてのメンバーを反復処理する必要がある最悪のケース (つまり、検索対象のアイテムがリストにない) では O(n) です。

于 2009-03-11T18:07:24.120 に答える
1

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

于 2009-03-11T17:58:06.157 に答える
0

"指定された文字列で始まる ListBox 内の最初の項目を検索します。"

リストの先頭から直線的に検索するような匂いがしますが、確実に知る方法はありません。

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

于 2009-03-11T17:56:28.093 に答える