左フォーチュン法律第VIIレッスン:プレフィックスツリー、貪欲戦略(文字列配列のスプライシング、切断地金、利益のコスト)、データ・ストリームのビット数は、会場には、講義の最大数を開催しました

1.プレフィックスツリーは何ですか?TrieTree

また、プレフィックスツリーまたはトライとして知られているコンピュータサイエンス、トライでは、キーは通常、文字列である連想配列、のために保存し、順序木です。異なるキーを使用してバイナリ検索ツリーは、ノードに直接格納されていないが、ツリー内のノードの位置によって決定されます。私たちは、同じ接頭辞ノードのすべての子孫、文字列に対応する、すなわちノードを持ち、ルートノードは、空の文字列に対応しています。一般的に、全てのノードは、キーに対応する内部ノードとリーフノードの一部のみに対応する値は値が関連付けられてい有します。

トライキーは、通常は文字列ですが、他の構成も可能。

例えば:

下図の4つの文字列:.「ABC」、「BCE」、「ABD」、「BEF」がある場合:文字のエッジで、ツリー内の数字はどのように多くの現在の文字列の末尾です。列の数」:要件; - 「BEF」の添加、例えば、0の後の数字にf> 1、次いで、値「E」が1で0になる「BE」を追加接頭辞として」も?直接「E」でデジタルでできる「こと」へ。

 

 

 

 

 

 

 

 

  1  / * 
  2  *プレフィックスツリー、2つの配列の要素の文字列を参照;
   3   * / 
  4  パブリック クラスCode_01_TrieTree {
   5。 
  6。     パブリック 静的 クラスTrieNode {
   7。         公共の int型の経路; // ノードのパス数
  8。         公的 INT END; / / 文字列の最後にノードの数、
  9          公共TrieNode [] nextS;
 10          公衆TrieNode(){
 11。              パス= 0 ;
 12である              端= 0 ;
 13である              nextS = 新しい新TrieNode [26である]; // 26添字0--25における次の文字である
14          }
 15      }
 16      
17。     パブリック 静的 クラストライ{
 18は、         プライベートルートTrieNode; // ルート
。19          公共トライ(){
 20が              ルート= 新しい新しい(TrieNode) 、
 21である         }
 22である         
23ことである         公共 ボイド{INSERT(文字列ワード)
 24              IF(ワード== NULL ){
 25                  リターン;
 26である             }
 27              CHAR[] CHS = word.toCharArray()。
28              TrieNodeノード= ルート。
29              int型のインデックス= 0 30              のためにint型 i = 0; iがchs.lengthを<; Iは++ ){
 31                  、インデックス= CHS [i]は- 'A'; // 将字母对应成下标
32                  場合(node.nexts [インデックス] == NULL ){
 33                      node.nexts [索引] = 新しいTrieNodeを();
34                  }
 35                  ノード= node.nexts [インデックス]。
36                  node.path ++ ;
37             }
 38              node.end ++ 39          }
 40          
41          公共 ボイド削除する(文字列の単語){
 42              であれば(!検索(ワード)= 0 ){
 43                  のchar [] CHS = word.toCharArray()。
44                  int型のインデックス= 0 45                  TrieNodeノード= ルート。
46                  のためにint型 i = 0; iがchs.lengthを<; Iは++ ){
 47                      、インデックス= CHS [i]は- 'A' ;
48                      であれば(--node.nexts [インデックス] .path == 0 ){
49                          node.nexts [インデックス] = NULL ;
50                          リターン;
51                      }
 52                      ノード= node.nexts [インデックス]。
53                  }
 54                  node.end-- 55              }
 56          }
 57          
58          公共 int型の検索(文字列の単語){
 59              であれば(ワード== NULL ){
 60                  リターン 0 61              }
 62              のchar []のCHS =word.toCharArray();
63              int型のインデックス= 0 64              TrieNodeノード= ルート。
65              のためにint型 i = 0; iがchs.lengthを<; Iは++ ){
 66                  、インデックス= CHS [i]は- 'A' ;
67                  であれば(node.nexts [インデックス] == NULL ){
 68                      リターン 0 69                  }
 70                  ノード= node.nexts [インデックス]。
71              }
 72              リターンnode.end。            
73          }
 74     }
 75      
76      
77      
78      公共 静的 ボイドメイン(文字列[]引数){
 79          試験()。
80  
81      }
 82  
83  
84  
85      プライベート 静的 ボイド試験(){
 86          トライトライ= 新しいトライ()。
87          のSystem.out.println(trie.search( "祚" ));
88          trie.insert( "祚" );
89          のSystem.out.println(trie.search( "祚" ));
90          trie.delete( "祚" );
91         System.out.println(trie.search( "祚" ));
92          trie.insert( "祚" );
93          trie.insert( "祚" );
94          trie.delete( "祚" );
95          のSystem.out.println(trie.search( "祚" ));
96          trie.delete( "祚" );
97          のSystem.out.println(trie.search( "祚" ));
98          trie.insert( "zuoa" )。
99          trie.insert( "zuoac" )。
100          trie.insert( "zuoab" )。
101          トライ。挿入( "zuoad" );
102         trie.delete( "zuoa" );
103          のSystem.out.println(trie.search( "zuoa" ));
104          のSystem.out.println(trie.search( "zuoac" ));
105          のSystem.out.println(trie.search( "zuoab" ));
106          のSystem.out.println(trie.search( "zuoad" ));
107      }
 108  
109 }

文字列の2スプライシング配列 - 貪欲戦略

(プルーフ小さなもつれないれるサンプルの数によって測定されます)

文字列の配列、各文字列の連結、その結果、最低辞書式順序。以下のような:「AB」、「CD」、「EF」、それは大々的以外の、最小限の「ABCDEF」にスプライス。ここの場合、「B」と「BA」のステッチがあり、ステッチその後、並べ替えを考える、とあり、ステッチの後に、「B」、「BA」を注文した後、「B学士」、ですが、言葉の「B AB」モザイクに従って、小さい、ちょうどそう文字列が間違ったスプライシング辞書がソートされます。だから、ポリシーを変更する必要がある注文。

STR1に、str2の分類:

オリジナルのモザイク戦略:STR1 <= str2を、リリース前にSTR1、またはstr2の前に置きます。

改善スプライシング戦略:STR1 + str2の<str2の+ = STR1、STR1プット、またはstr2の前に置く前に、

証明:

配達注文の証拠を与える:AB bはポストスプライシングを表し、スプライシングがハイレベルで見ることができ、Bは低であり、A-Bは、左に移動されるBプラスBの桁の長さを表すオン。ABがk進スプライシングされ、すなわちK * AとみなすことができるBの長さとなるよう、+ B

K B の長さ = Mの(b)に示すように、ABは* mを=ように(B) + B。

 

オズワルド

 

おすすめ

転載: www.cnblogs.com/gjmhome/p/11354034.html