0

AVLツリーが整数でどのように機能するかは理解していますが、代わりに文字列を整数に挿入する方法を見つけるのに苦労しています。文字列はどのように比較されますか?

ASCIIの合計値を使用してそのように並べ替えることを考えましたが、その場合、2つの同一のASCII単語(「tied」と「diet」など)を挿入するとエラーが返されるように見えます。

これをどのように回避しますか?私はそれについて間違った方法で考えていて、ノードをソートするための別の方法が必要ですか?

また、アルファベットなどである必要はありません... AVLツリー内にあるだけなので、すばやく検索できます。

4

2 に答える 2

2

文字列を操作するときは、通常、字句比較を使用します。つまり、各文字列の最初の文字から開始します。一方が他方よりも小さい場合(たとえば、「ダイエット」と「タイ」の場合、「d」は「t」よりも小さい)、比較はその文字に基づいています。最初の文字が等しい場合にのみ、2番目の文字に移動します。2つは、文字列の最初から最後までのすべての文字が(順番に)等しい場合にのみ等しくなります。

于 2012-04-24T04:41:47.313 に答える
1

AVLツリーは順序付けられた構造であるため、int string::compare(const string&) constルーチンは文字列の順序付け方法を示すことができるはずです。

アイテムの順序が実際には無関係である場合は、順序付けされていない構造からパフォーマンスが向上し、実行しようとしていること、つまりハッシュテーブルをより有効に活用できます。

文字列のようなものを固定サイズのキーにマッピングすることをハッシュ関数と呼び、複数のキーが同じ値にマッピングされる現象を衝突と呼びます。衝突はハッシュ時に時折発生することが予想され、基本的なデータ構造を拡張して処理する必要があります。おそらく、各ノードを、すべてのアイテムの「バケット」(リンクリスト、ベクトル、配列、何を持っているか)にする必要があります。衝突するハッシュ値は、線形に検索されます。

于 2012-04-24T04:25:18.803 に答える