Sự khác biệt giữa cấu trúc dữ liệu trie và cơ số trie là gì?


95

Trieradix Trie cấu trúc dữ liệu điều tương tự?

Nếu chúng giống nhau, thì ý nghĩa của trie cơ số (AKA Patricia trie) là gì?


4
Tôi có phải là người duy nhất cảm thấy hơi khó chịu khi thẻ radix-treehơn là radix-trie? Hơn nữa, có khá nhiều câu hỏi được gắn thẻ với nó.
errantlinguist

@errantlinguist Wikipedia đặt tiêu đề radix triebài viết là Radix tree. Hơn nữa, thuật ngữ "Radix tree" được sử dụng rộng rãi trong y văn. Nếu bất cứ điều gì gọi cố gắng "cây tiền tố" sẽ có ý nghĩa hơn đối với tôi. Xét cho cùng, chúng đều là cấu trúc dữ liệu cây .
Amelio Vazquez-Reina

Ngoài ra: "Ý nghĩa của trie cơ số (AKA Patricia trie) là gì?" điều này giả định cây cơ số và cây PATRICIA là một và giống nhau, nhưng chúng không giống nhau (ví dụ: xem câu trả lời này ). Cây PATRICIA là cây mà bạn nhận được từ việc chạy thuật toán PATRICIA (FYI PATRICIA cũng là một từ viết tắt, viết tắt của "Thuật toán thực tế để truy xuất thông tin được mã hóa bằng chữ và số"). Các cây kết quả có thể được hiểu là cây cơ số radix = 2, nghĩa là bạn duyệt qua cây bằng cách tra cứu log2(radix)=1các bit của chuỗi đầu vào tại một thời điểm.
Amelio Vazquez-Reina

Câu trả lời:


118

Cây cơ số là một phiên bản nén của một trie. Trong một trie, trên mỗi cạnh bạn viết một chữ cái, trong khi trong cây PATRICIA (hoặc cây cơ số), bạn lưu trữ toàn bộ các từ.

Bây giờ, giả sử bạn có các từ hello, hathave. Để lưu trữ chúng trong một Trie , nó sẽ giống như sau:

    e - l - l - o
  /
h - a - t
      \
       v - e

Và bạn cần chín nút. Tôi đã đặt các chữ cái trong các nút, nhưng trên thực tế chúng gắn nhãn các cạnh.

Trong cây cơ số, bạn sẽ có:

            *
           /
        (ello)
         /
* - h - * -(a) - * - (t) - *
                 \
                 (ve)
                   \
                    *

và bạn chỉ cần năm nút. Trong hình trên các nút là dấu hoa thị.

Vì vậy, về tổng thể, một cây cơ số chiếm ít bộ nhớ hơn , nhưng khó thực hiện hơn. Nếu không thì trường hợp sử dụng của cả hai là khá giống nhau.


Cảm ơn ... Bạn có thể cung cấp cho tôi với một nguồn lực tốt để DS Trie nghiên cứu ... Đó sẽ là giúp đỡ rất nhiều ...
Aryak Sengupta

Tôi tin rằng điều duy nhất tôi sử dụng khi lần đầu tiên triển khai Trie là bài báo wikipedia . Tôi không nói nó là hoàn hảo nhưng nó đủ tốt.
Ivaylo Strandjev

1
tôi có thể nói rằng tìm kiếm trong TRIE nhanh hơn cây Radix không? Bởi vì trong TRIE nếu bạn muốn tìm kiếm ký tự tiếp theo, bạn cần xem chỉ mục thứ i trong mảng con của nút hiện tại nhưng trong cây cơ số, bạn cần tìm kiếm tất cả các nút con một cách tuần tự. Xem mã triển khai.google.com/p/radixtree/source/browse/trunk/RadixTree/src/…
Đang dùng thử

4
Trên thực tế, trong một cây cơ số, bạn không thể có nhiều hơn một cạnh bắt đầu bằng cùng một chữ cái để bạn có thể sử dụng cùng một chỉ mục liên tục.
Ivaylo Strandjev 13/12/13

1
@Trying Algorithmally Radix nhanh hơn TRIE, đó là lý do tại sao nó đáng để thực hiện việc nén. Ít nút hơn để tải và ít không gian hơn nói chung là tốt hơn. Điều đó nói rằng, chất lượng triển khai có thể khác nhau.
Glenn Teitelbaum

68

Câu hỏi của tôi là liệu cấu trúc dữ liệu TrieRadix Trie có giống nhau không?

Trong ngắn hạn, không. Danh mục Radix Trie mô tả một danh mục cụ thể của Trie , nhưng điều đó không có nghĩa là tất cả các lần thử đều là lần thử cơ số.

Nếu chúng [không] giống nhau, thì ý nghĩa của Radix trie (hay còn gọi là Patricia Trie) là gì?

Tôi cho rằng bạn muốn viết không có trong câu hỏi của bạn, do đó tôi xin sửa lại.

Tương tự, PATRICIA biểu thị một loại trie cơ số cụ thể, nhưng không phải tất cả các lần thử cơ số đều là lần thử PATRICIA.


Một trie là gì?

"Trie" mô tả cấu trúc dữ liệu dạng cây thích hợp để sử dụng như một mảng kết hợp, trong đó các nhánh hoặc cạnh tương ứng với các phần của khóa. Ở đây, định nghĩa về các bộ phận khá mơ hồ, bởi vì các cách triển khai khác nhau của các try sử dụng các độ dài bit khác nhau để tương ứng với các cạnh. Ví dụ: một trie nhị phân có hai cạnh trên mỗi nút tương ứng với 0 hoặc 1, trong khi trie 16 chiều có mười sáu cạnh trên mỗi nút tương ứng với bốn bit (hoặc một chữ số thập phân: 0x0 đến 0xf).

Sơ đồ này, được lấy từ Wikipedia, dường như mô tả một bộ ba với (ít nhất) các phím 'A', 'to', 'tea', 'ted', 'ten' và 'inn' được chèn:

Trie cơ bản

Nếu bộ ba này được lưu trữ các mục cho các khóa 't', 'te', 'i' hoặc 'in' thì sẽ cần phải có thêm thông tin có mặt tại mỗi nút để phân biệt giữa các nút nullary và các nút có giá trị thực.


Trie cơ số là gì?

"Radix trie" dường như mô tả một dạng trie ngưng tụ các phần tiền tố chung, như Ivaylo Strandjev đã mô tả trong câu trả lời của mình. Hãy xem xét rằng bộ trie 256 chiều lập chỉ mục các khóa "smile", "smile", "smile" và "smile" bằng cách sử dụng các phép gán tĩnh sau:

root['s']['m']['i']['l']['e']['\0'] = smile_item;
root['s']['m']['i']['l']['e']['d']['\0'] = smiled_item;
root['s']['m']['i']['l']['e']['s']['\0'] = smiles_item;
root['s']['m']['i']['l']['i']['n']['g']['\0'] = smiling_item;

Mỗi chỉ số con truy cập một nút bên trong. Điều đó có nghĩa là để truy xuất smile_item, bạn phải truy cập bảy nút. Tám quyền truy cập nút tương ứng với smiled_itemsmiles_itemvà chín đến smiling_item. Đối với bốn mục này, có tổng cộng mười bốn nút. Tuy nhiên, tất cả chúng đều có bốn byte đầu tiên (tương ứng với bốn nút đầu tiên). Bằng cách cô đọng bốn byte đó để tạo ra một roottương ứng ['s']['m']['i']['l'], bốn quyền truy cập nút đã được tối ưu hóa. Điều đó có nghĩa là ít bộ nhớ hơn và ít truy cập vào nút hơn, đây là một dấu hiệu rất tốt. Tối ưu hóa có thể được áp dụng đệ quy để giảm nhu cầu truy cập các byte hậu tố không cần thiết. Cuối cùng, bạn đạt đến điểm mà bạn chỉ so sánh sự khác biệt giữa khóa tìm kiếm và khóa được lập chỉ mục tại các vị trí được lập chỉ mục bởi bộ ba. Đây là một trie cơ số.

root = smil_dummy;
root['e'] = smile_item;
root['e']['d'] = smiled_item;
root['e']['s'] = smiles_item;
root['i'] = smiling_item;

Để truy xuất các mục, mỗi nút cần một vị trí. Với một phím tìm kiếm là "nụ cười" và root.position4, chúng tôi truy cập root["smiles"[4]], điều này xảy ra root['e']. Chúng tôi lưu trữ điều này trong một biến được gọi là current. current.positionlà 5, là vị trí của sự khác biệt giữa "smiled""smiles", vì vậy lần truy cập tiếp theo sẽ là root["smiles"[5]]. Điều này đưa chúng ta đến smiles_itemvà kết thúc chuỗi của chúng ta. Tìm kiếm của chúng tôi đã kết thúc và mục đã được truy xuất, chỉ với ba lần truy cập nút thay vì tám.


Trie PATRICIA là gì?

Bộ trie PATRICIA là một biến thể của các lần thử cơ số mà chỉ nên có ncác nút được sử dụng để chứa ncác mục. Trong thô sơ chứng minh radix Trie giả của chúng tôi ở trên, có năm nút trong tổng số: root(đó là một nút nullary; nó không chứa giá trị thực tế), root['e'], root['e']['d'], root['e']['s']root['i']. Trong một bộ ba PATRICIA chỉ nên có bốn. Hãy xem các tiền tố này có thể khác nhau như thế nào bằng cách xem chúng ở dạng nhị phân, vì PATRICIA là một thuật toán nhị phân.

smile:   0111 0011  0110 1101  0110 1001  0110 1100  0110 0101  0000 0000  0000 0000
smiled:  0111 0011  0110 1101  0110 1001  0110 1100  0110 0101  0110 0100  0000 0000
smiles:  0111 0011  0110 1101  0110 1001  0110 1100  0110 0101  0111 0011  0000 0000
smiling: 0111 0011  0110 1101  0110 1001  0110 1100  0110 1001  0110 1110  0110 0111 ...

Chúng ta hãy xem xét rằng các nút được thêm vào theo thứ tự mà chúng được trình bày ở trên. smile_itemlà rễ của cây này. Sự khác biệt, được tô đậm để dễ phát hiện hơn một chút, là ở byte cuối cùng của "smile"bit 36. Cho đến thời điểm này, tất cả các nút của chúng ta đều có cùng một tiền tố. smiled_nodethuộc tại smile_node[0]. Sự khác biệt giữa "smiled""smiles"xảy ra ở 43 bit, nơi "smiles"có một '1' bit, do đó smiled_node[1]smiles_node.

Thay vì sử dụng NULLcác chi nhánh và / hoặc thêm thông tin nội bộ để biểu thị khi chấm dứt tìm kiếm, các ngành liên kết lại lên một nơi nào đó cây, do đó, một chấm dứt tìm kiếm khi bù đắp để kiểm tra giảm thay vì tăng. Đây là một sơ đồ đơn giản của một cái cây như vậy (mặc dù PATRICIA thực sự là một biểu đồ chu kỳ, hơn là một cái cây, như bạn sẽ thấy), được bao gồm trong cuốn sách của Sedgewick được đề cập bên dưới:

Sơ đồ PATRICIA đơn giản

Có thể sử dụng thuật toán PATRICIA phức tạp hơn liên quan đến các khóa có độ dài biến thể, mặc dù một số đặc tính kỹ thuật của PATRICIA bị mất trong quá trình này (cụ thể là bất kỳ nút nào chứa tiền tố chung với nút trước nó):

Sơ đồ PATRICIA phức tạp

Bằng cách phân nhánh như vậy, có một số lợi ích: Mọi nút đều chứa một giá trị. Điều đó bao gồm gốc. Do đó, độ dài và độ phức tạp của mã trở nên ngắn hơn rất nhiều và có thể nhanh hơn một chút trong thực tế. Ít nhất một nhánh và nhiều knhánh nhất (trong đó klà số bit trong khóa tìm kiếm) được theo sau để định vị một mục. Các nút rất nhỏ , vì chúng chỉ lưu trữ hai nhánh mỗi nút , điều này khiến chúng khá phù hợp để tối ưu hóa cục bộ bộ nhớ cache. Các thuộc tính này làm cho PATRICIA thuật toán yêu thích của tôi cho đến nay ...

Tôi sẽ cắt ngắn mô tả này ở đây, để giảm mức độ nghiêm trọng của bệnh viêm khớp sắp xảy ra của tôi, nhưng nếu bạn muốn biết thêm về PATRICIA, bạn có thể tham khảo các cuốn sách như "Nghệ thuật lập trình máy tính, Tập 3" của Donald Knuth hoặc bất kỳ "Thuật toán nào trong {ngôn ngữ yêu thích của bạn}, phần 1-4" của Sedgewick.


Bạn vui lòng giúp tôi hiểu ý nghĩa của thuật ngữ "Radix"! Tôi hiểu cách, theo cách tự nhiên, chúng ta có thể cố gắng biến một TRIE thành một TRIE nhỏ gọn bằng cách cho phép nhiều ký hiệu / cạnh kết hợp thành một cạnh. Tuy nhiên, tôi không thể hiểu tại sao một TRIE chưa nén (đơn giản là TRIE) không thể được gọi là Radix TRIE.
KGhatak

@ Seb - Thực sự đánh giá cao phản hồi của bạn về bài đăng stackoverflow.com/questions/40087385/… trên Radix Tree. Cảm ơn trong lời khuyên.
KGhatak

@BuckCherry Tôi rất muốn có thể, nhưng xin lưu ý rằng máy tính của tôi đã bị đánh cắp, tôi sẽ không thể nỗ lực để có phản hồi thích đáng.
tự kỷ

18

TRIE:
Chúng tôi có thể có một lược đồ tìm kiếm mà thay vì so sánh toàn bộ khóa tìm kiếm với tất cả các khóa hiện có (chẳng hạn như lược đồ băm), chúng tôi cũng có thể so sánh từng ký tự của khóa tìm kiếm. Theo ý tưởng này, chúng ta có thể xây dựng một cấu trúc (như hình bên dưới) có ba khóa hiện có - “ cha ”, “ dab ” và “ taxi ”.

         [root]
     ...// | \\...
           |  \
           c   d
           |    \
          [*]    [*]
      ...//|\.  ./|\\...        Fig-I
        a       a
       /       /
     [*]      [*]
 ...//|\..  ../|\\...
    /        /   \
   B        b     d
  /        /       \
 []       []       []

(cab)   (dab)     (dad)

Đây thực chất là một cây M-ary với nút bên trong, được biểu diễn là [*] và nút lá, được biểu diễn là []. Cấu trúc này được gọi là một trie . Quyết định phân nhánh tại mỗi nút có thể được giữ bằng số ký hiệu duy nhất của bảng chữ cái, giả sử R. Đối với bảng chữ cái tiếng Anh viết thường az, R = 26; đối với bảng chữ cái ASCII mở rộng, R = 256 và đối với chữ số / chuỗi nhị phân R = 2.

Nhỏ gọn Trie:
Thông thường, một nút trong một Trie sử dụng một mảng với kích thước = R và do đó gây ra sự lãng phí bộ nhớ khi mỗi nút có các gờ ít. Để xóa tan mối quan tâm về bộ nhớ, nhiều đề xuất đã được đưa ra. Dựa trên các biến thể đó, trie còn được đặt tên là “ trie nhỏ gọn ” và “ trie nén ”. Trong khi một danh pháp phù hợp là rất hiếm, một phiên bản phổ biến nhất của một nhỏ gọn Trie được hình thành bằng cách nhóm tất cả các cạnh khi nút có chút lợi thế duy nhất. Sử dụng khái niệm này, trie (Hình-I) ở trên với các phím “cha”, “dab” và “cab” có thể có dạng dưới đây.

         [root]
     ...// | \\...
           |  \
          cab  da
           |    \
          [ ]   [*]                Fig-II
               ./|\\...
                 |  \
                 b   d
                 |    \
                []    []

Lưu ý rằng mỗi 'c', 'a' và 'b' là cạnh duy nhất cho nút cha tương ứng của nó và do đó, chúng được tập hợp thành một cạnh duy nhất "cab". Tương tự, 'd' và a 'được hợp nhất thành một cạnh có nhãn là “da”.

Radix Trie:
Thuật ngữ cơ số , trong Toán học, có nghĩa là cơ số của một hệ thống số và về cơ bản nó chỉ ra số lượng các ký hiệu duy nhất cần thiết để biểu diễn bất kỳ số nào trong hệ thống đó. Ví dụ, hệ thập phân là cơ số mười và hệ nhị phân là cơ số hai. Sử dụng khái niệm tương tự, khi chúng tôi quan tâm đến việc mô tả đặc điểm của cấu trúc dữ liệu hoặc thuật toán bằng số lượng ký hiệu duy nhất của hệ thống biểu diễn cơ bản, chúng tôi gắn thẻ khái niệm bằng thuật ngữ “cơ số”. Ví dụ: "sắp xếp cơ số" cho một số thuật toán sắp xếp nhất định. Trong cùng một dòng logic, tất cả các biến thể của triecác đặc điểm của chúng (chẳng hạn như độ sâu, nhu cầu bộ nhớ, thời gian chạy lỡ / truy cập tìm kiếm, v.v.) phụ thuộc vào cơ số của các bảng chữ cái bên dưới, chúng ta có thể gọi chúng là cơ số “trie's”. Ví dụ, một loại chưa nén cũng như một trie trie đãkhi sử dụng bảng chữ cái az, chúng ta có thể gọi nó là một trie cơ số 26. Bất kỳ trie nào chỉ sử dụng hai ký hiệu (theo truyền thống là '0' và '1') đều có thể được gọi là trie cơ số 2. Tuy nhiên, bằng cách nào đó, nhiều tài liệu đã hạn chế việc sử dụng thuật ngữ "Radix Trie" chỉ cho trie được nén chặt.

Mở đầu cho PATRICIA Tree / Trie:
Sẽ rất thú vị khi nhận thấy rằng ngay cả các chuỗi làm khóa cũng có thể được biểu diễn bằng bảng chữ cái nhị phân. Nếu chúng ta giả mã hóa ASCII, sau đó một chìa khóa “cha” có thể được viết dưới dạng nhị phân bằng cách viết các biểu diễn nhị phân của mỗi nhân vật theo thứ tự, nói là “ 01100100 01.100.001 01100100 ” bằng cách viết các hình thức nhị phân của 'd', 'a', và 'd' tuần tự. Sử dụng khái niệm này, một Trie (với Radix Hai) có thể được hình thành. Dưới đây, chúng tôi mô tả khái niệm này bằng cách sử dụng một giả định đơn giản rằng các chữ cái 'a', 'b', 'c' và'd 'là từ một bảng chữ cái nhỏ hơn thay vì ASCII.

Lưu ý cho Hình-III: Như đã đề cập, để mô tả dễ dàng, hãy giả sử một bảng chữ cái chỉ có 4 chữ cái {a, b, c, d} và các biểu diễn nhị phân tương ứng của chúng là “00”, “01”, “10” và “11” tương ứng. Với điều này, các phím chuỗi “dad”, “dab” và “cab” của chúng ta lần lượt trở thành “110011”, “110001” và “100001”. Bộ ba cho điều này sẽ như được hiển thị bên dưới trong Hình-III (các bit được đọc từ trái sang phải giống như các chuỗi được đọc từ trái sang phải).

          [root]
             \1               
              \
              [*]
             0/ \1               
             /   \
           [*]   [*]         
           0/     /               
           /     /0
         [*]    [*]      
        0/      /               
        /      /0
      [*]    [*]
     0/     0/ \1                Fig-III
     /      /   \
    [*]   [*]   [*]
     \1     \1    \1
      \      \     \
      []     []    []
    (cab)   (dab) (dad)

PATRICIA Trie / Tree:
Nếu chúng ta thu gọn trie nhị phân ở trên (Hình-III) bằng cách sử dụng nén cạnh đơn, nó sẽ có ít nút hơn nhiều so với hình trên và tuy nhiên, các nút vẫn sẽ nhiều hơn 3, số lượng khóa mà nó chứa . Donald R. Morrison đã tìm ra (năm 1968) một cách sáng tạo để sử dụng trie nhị phân để mô tả N khóa chỉ sử dụng N nút và ông đặt tên cho cấu trúc dữ liệu này là PATRICIA. Cấu trúc trie của ông về cơ bản đã loại bỏ các cạnh đơn (phân nhánh một chiều); và khi làm như vậy, anh ấy cũng loại bỏ khái niệm về hai loại nút - nút bên trong (không mô tả bất kỳ khóa nào) và nút lá (mô tả khóa). Không giống như logic nén được giải thích ở trên, bộ ba của anh ấy sử dụng một khái niệm khác, trong đó mỗi nút bao gồm một chỉ báo về số lượng bit của khóa sẽ được bỏ qua để đưa ra quyết định phân nhánh. Tuy nhiên, một đặc điểm khác của bộ ba PATRICIA của anh ấy là nó không lưu trữ các khóa - có nghĩa là cấu trúc dữ liệu như vậy sẽ không phù hợp để trả lời các câu hỏi như, liệt kê tất cả các khóa khớp với một tiền tố nhất định , nhưng tốt cho việc tìm kiếm nếu một khóa tồn tại hoặc không có trong bộ ba. Tuy nhiên, thuật ngữ Patricia Tree hoặc Patricia Trie, kể từ đó, được sử dụng theo nhiều nghĩa khác nhau nhưng tương tự nhau, chẳng hạn như, để chỉ một bộ ba nhỏ gọn [NIST], hoặc để chỉ một bộ ba cơ số với cơ số hai [như được chỉ ra trong trong WIKI] và như vậy.

Trie có thể không phải là Radix Trie:
Ternary Search Trie (hay còn gọi là Cây tìm kiếm bậc ba) thường được viết tắt là TST là một cấu trúc dữ liệu (do J. BentleyR. Sedgewick đề xuất ) trông rất giống với một bộ ba với phân nhánh ba chiều. Đối với cây như vậy, mỗi nút có một bảng chữ cái đặc trưng 'x' để quyết định phân nhánh được điều khiển bởi liệu một ký tự của khóa nhỏ hơn, bằng hoặc lớn hơn 'x'. Do tính năng phân nhánh 3 chiều cố định này, nó cung cấp một giải pháp thay thế hiệu quả về bộ nhớ cho trie, đặc biệt khi R (cơ số) rất lớn chẳng hạn như đối với bảng chữ cái Unicode. Điều thú vị là TST, không giống như (R-way) trie , không có các đặc điểm của nó bị ảnh hưởng bởi R. Ví dụ: tìm kiếm bỏ lỡ cho TST là ln (N)trái ngược với log R (N) cho R-way Trie. Yêu cầu bộ nhớ của TST, không giống như R-cách TrieKHÔNG một hàm của R là tốt. Vì vậy, chúng ta nên cẩn thận gọi một TST là một cơ số trie. Cá nhân tôi, không nghĩ rằng chúng ta nên gọi nó là cơ số trie vì không có đặc điểm nào (theo như tôi biết) của nó bị ảnh hưởng bởi cơ số, R, của các bảng chữ cái cơ bản của nó.


2
Là người đã triển khai PATRICIA theo Morrison, Sedgewick và Knuth, tôi có thể cho bạn biết thuật toán bạn đã mô tả ở đây (tôi cũng đã cố gắng mô tả trong câu trả lời của mình) vẫn rất phù hợp để trả lời các câu hỏi như liệt kê tất cả các khóa khớp với một tiền tố . Tái bút: Thật tuyệt khi thấy ai đó khác trên quả bóng: câu hỏi kia :) Tôi thích lời giải thích đó.
tự kỷ

Re "sẽ không phù hợp để trả lời các câu hỏi như, liệt kê tất cả các khóa khớp với một tiền tố nhất định", nghiêm túc?
Pacerier

@Pacerier Chắc chắn rồi! PATRICIA cổ điển lưu trữ một số nguyên mà bạn có thể sử dụng làm chỉ mục cho một mảng. Vào mảng bạn đặt chuỗi. Trong trie, bạn đặt chỉ số mảng dựa trên 0 cho chuỗi. Làm cho các hàm tìm kiếm & so sánh & trích xuất bit hoạt động dựa trên chuỗi tương ứng với số nguyên thay vì số nguyên và nếu hàm chèn của bạn dựa trên các hàm khác (đúng như vậy, vì có rất nhiều logic lặp lại ở đó) và bạn ' Sẽ ổn trên con đường của bạn. Bạn cũng có thể sử dụng uintptr_tlàm số nguyên của mình , vì kiểu đó dường như thường được mong đợi (mặc dù không bắt buộc) tồn tại.
tự kỷ

Bạn nói rằng "nhiều tài liệu đã hạn chế việc sử dụng thuật ngữ" Radix Trie "chỉ cho trie được nén chặt.". Trên thực tế, tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào khác ngoài wikipedia. Bạn có tìm thấy người khác không?
wds

@ wds - Bạn có thể đúng, vì tôi không thực sự nhớ những tài nguyên mà tôi đã giới thiệu khi viết bài này là gì. Một googling nhanh chóng giúp tôi có được các liên kết như mathcs.emory.edu/~cheung/Courses/323/Syllabus/Text/trie02.html hoặc tutorialdiary.com/radix-trie-patricia-trie-or-compressed-trie về cơ bản trỏ đến hoặc (rất có thể) bắt nguồn từ / chịu ảnh hưởng của wiki. Nếu tôi tìm thấy bất kỳ tài nguyên học thuật / đáng tin cậy nào khác, tôi sẽ đăng ở đây.
KGhatak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.