>> [MUSIC CHƠI]
>> ROB Bowden: Hi.
Tôi Rob.
Và chúng ta hãy giải pháp này ra.
Vì vậy, ở đây chúng ta sẽ thực hiện một bảng nói chung.
Chúng ta thấy rằng các nút cấu trúc của chúng tôi bảng sẽ trông như thế này.
Vì vậy, nó sẽ có một từ char mảng có kích thước Độ dài + 1.
Đừng quên + 1, vì tối đa từ trong từ điển là 45
ký tự.
Và sau đó chúng ta sẽ cần một thêm nhân vật cho không dấu gạch chéo ngược.
>> Và sau đó hashtable của chúng tôi trong mỗi xô là sẽ lưu một
danh sách liên kết của các nút.
Chúng tôi không làm tuyến tính thăm dò ở đây.
Và như vậy để liên kết đến tiếp theo yếu tố trong xô, chúng ta cần một
struct node * next.
OK.
Vì vậy, đó là những gì một nút như thế nào.
>> Bây giờ ở đây là khai báo của Hashtable của chúng tôi.
Nó sẽ có 16.834 thùng.
Nhưng con số đó không quan trọng.
Và cuối cùng, chúng ta sẽ có kích thước hashtable biến toàn cầu, trong đó
sẽ bắt đầu như là số không.
Và nó sẽ theo dõi như thế nào nhiêu từ trong từ điển của chúng tôi.
>> Vì vậy, chúng ta hãy nhìn vào tải.
Chú ý tải đó, nó trả về một bool.
Bạn trở về đúng nếu nó là thành công nạp, và sai khác.
Và phải mất một char * const từ điển, đó là từ điển
mà chúng tôi muốn mở.
Vì vậy, đó là điều đầu tiên chúng ta sẽ làm.
>> Chúng ta sẽ fopen các từ điển để đọc.
Và chúng ta sẽ phải làm chắc chắn rằng nó đã thành công.
Vì vậy, nếu nó trở về NULL, sau đó chúng tôi đã không mở thành công từ điển.
Và chúng ta cần phải trả về false.
Nhưng giả định rằng nó đã thành công mở, sau đó chúng tôi muốn đọc
từ điển.
Vì vậy, giữ vòng lặp cho đến khi chúng tôi tìm thấy một số lý do để thoát ra khỏi vòng lặp này,
mà chúng ta sẽ thấy.
Vì vậy, giữ vòng lặp.
>> Và bây giờ chúng ta sẽ malloc một nút duy nhất.
Và tất nhiên chúng ta cần phát sóng kiểm tra lại.
Vì vậy, nếu mallocing đã không thành công, sau đó chúng tôi muốn dỡ bỏ bất kỳ nút mà chúng ta
đã xảy ra với malloc trước, đóng cửa từ điển và trả về false.
Nhưng bỏ qua mà, giả sử chúng ta đã thành công, sau đó chúng tôi muốn sử dụng fscanf
để đọc một từ duy nhất từ ​​chúng tôi từ điển vào nút của chúng tôi.
Vì vậy, hãy nhớ rằng mục> từ là char đệm từ kích thước lenghth + 1
rằng chúng ta sẽ lưu trữ các từ in
>> Vì vậy, fscanf sẽ trở về 1, miễn vì nó đã có thể thành công
đọc một từ từ tập tin.
Nếu một trong hai lỗi xảy ra, hoặc chúng tôi đến cuối của tập tin, nó
sẽ không trở lại 1.
Trong trường hợp này nó không trả lại 1, chúng ta cuối cùng sẽ thoát ra khỏi
trong khi vòng lặp này.
Vì vậy, chúng ta thấy rằng một khi chúng ta đã thành công đọc một từ vào
entry> từ, sau đó chúng ta sẽ có từ sử dụng hàm băm của chúng tôi.
>> Chúng ta hãy nhìn vào hàm băm.
Vì vậy, bạn không thực sự cần để hiểu được điều này.
Và thực sự chúng ta chỉ cần kéo băm này hoạt động từ internet.
Điều duy nhất bạn cần phải nhận ra là rằng điều này có một const char * từ.
Vì vậy, nó tham gia một chuỗi như là đầu vào, và trả lại một int unsigned như đầu ra.
Vì vậy, đó là tất cả một hàm băm được, là nó mất trong một đầu vào và cung cấp cho bạn một
chỉ số vào hashtable.
>> Chú ý rằng chúng ta đang moding bởi NUM_BUCKETS, nên giá trị trở lại
thực sự là một chỉ số vào hashtable và không chỉ vượt ra ngoài
giới hạn của mảng.
Vì vậy, cho chức năng đó, chúng ta sẽ để băm từ đó chúng ta đọc
từ điển.
Và sau đó chúng ta sẽ sử dụng mà băm để chèn
nhập cảnh vào hashtable.
>> Băm bây giờ Hashtable là hiện tại danh sách liên kết trong bảng.
Và nó rất có thể rằng nó chỉ là NULL.
Chúng tôi muốn chèn mục của chúng tôi tại bắt đầu của danh sách liên kết này.
Và như vậy chúng ta sẽ có hiện tại của chúng tôi điểm vào những gì hashtable
hiện đang trỏ tới.
Và sau đó chúng ta sẽ lưu trữ, trong hashtable tại
băm, mục hiện hành.
Vì vậy, hai dòng chèn thành công nhập cảnh tại các đầu
danh sách liên kết tại chỉ số đó trong hashtable.
>> Một khi chúng ta đang thực hiện với đó, chúng tôi biết mà chúng ta tìm thấy một từ khác trong
từ điển, và chúng tôi tăng một lần nữa.
Vì vậy, chúng tôi tiếp tục làm điều đó cho đến khi fscanf cuối cùng trở về một cái gì đó không-1 tại
thời điểm đó nhớ rằng chúng ta cần phải giải phóng vào.
Vì vậy, ở đây chúng tôi malloced một mục.
Và chúng tôi cố gắng để đọc một cái gì đó từ điển.
Và chúng tôi đã không đọc thành công một cái gì đó từ từ điển, trong
trường hợp mà chúng ta cần để giải phóng các mục rằng chúng ta không bao giờ thực sự đưa vào
Hashtable, và cuối cùng phá vỡ.
>> Một khi chúng ta thoát ra khỏi chúng ta cần phải nhìn thấy, tốt, chúng tôi đã phá vỡ ra bởi vì có
được một lỗi đọc từ tập tin?
Hoặc chúng ta đã thoát ra khỏi bởi vì chúng tôi đạt đến kết thúc của tập tin?
Nếu có một lỗi, sau đó chúng ta muốn trả về false.
Vì tải không thành công.
Và trong quá trình chúng tôi muốn dỡ bỏ tất cả các từ mà chúng ta đọc trong, và
đóng tập tin từ điển.
>> Giả sử chúng ta đã thành công, sau đó chúng tôi chỉ vẫn cần phải đóng cửa từ điển
tập tin, và cuối cùng trở về đúng kể từ khi chúng tôi nạp thành công từ điển.
Và đó là nó cho tải.
Vì vậy, bây giờ kiểm tra, đưa ra một hashtable tải, sẽ trông như thế này.
Vì vậy, kiểm tra, nó trả về một bool, đó là sẽ chỉ ra cho dù thông qua
trong char * từ, cho dù thông qua trong chuỗi là trong từ điển của chúng tôi.
Vì vậy, nếu nó có trong từ điển, nếu nó là trong Hashtable của chúng tôi,
chúng tôi sẽ trở lại đúng sự thật.
Và nếu nó không phải, chúng tôi sẽ trả về false.
>> Vì điều này thông qua trong lời nói, chúng tôi sẽ băm từ.
Bây giờ là một điều quan trọng cần nhận ra là mà trong tải chúng tôi biết rằng tất cả các
Nói cách chúng ta sẽ được trường hợp thấp hơn.
Nhưng ở đây chúng tôi không như vậy chắc chắn.
Nếu chúng ta hãy nhìn vào hàm băm của chúng tôi, hàm băm của chúng tôi thực sự
là vỏ thấp hơn mỗi nhân vật của từ.
Vì vậy, bất kể giá trị vốn hóa của từ, hàm băm của chúng tôi là sự trở lại
chỉ số tương tự cho bất cứ điều gì vốn là, vì nó sẽ có
trả lại cho một hoàn toàn chữ thường phiên bản của từ.
Được rồi.
Đó là chỉ số của chúng tôi là vào Hashtable cho từ này.
>> Bây giờ điều này cho vòng lặp sẽ duyệt qua danh sách liên kết
đó là tại chỉ số đó.
Vì vậy, nhận thấy chúng ta đang khởi nhập để trỏ đến chỉ số.
Chúng tôi sẽ tiếp tục trong khi nhập cảnh! = NULL.
Và hãy nhớ rằng việc cập nhật con trỏ trong danh sách của chúng tôi trường liên kết = entry> tiếp theo.
Vì vậy, có điểm vào hiện tại của chúng tôi để mục tiếp theo trong danh sách liên kết.
>> Vì vậy, cho mỗi mục trong danh sách liên kết, chúng ta sẽ sử dụng strcasecmp.
Nó không phải strcomp.
Bởi vì một lần nữa, chúng tôi muốn làm những việc trường hợp insensitively.
Vì vậy, chúng tôi sử dụng strcasecmp để so sánh từ đó đã được thông qua thông qua này
chức năng chống lại các từ đó là trong mục này.
Nếu nó trả về số không, có nghĩa là đã có một trận đấu, trong trường hợp này chúng tôi muốn
return true.
Chúng tôi tìm thấy thành công từ trong Hashtable của chúng tôi.
>> Nếu không có một trận đấu, thì chúng ta đi lặp lại và nhìn vào
mục tiếp theo.
Và chúng tôi sẽ tiếp tục vòng lặp trong khi có là các mục trong danh sách liên kết này.
Điều gì xảy ra nếu chúng ta phá vỡ trong số này cho vòng lặp?
Điều đó có nghĩa chúng tôi không tìm thấy một mục mà kết hợp từ này, trong trường hợp
chúng tôi trả về false để chỉ ra rằng chúng tôi Hashtable không chứa từ này.
Và đó là một kiểm tra.
>> Vì vậy, chúng ta hãy nhìn vào kích thước.
Bây giờ kích thước sẽ là khá đơn giản.
Kể từ khi nhớ trong tải, cho mỗi từ chúng tôi tìm thấy, chúng tôi tăng lên một toàn cầu
kích thước hashtable biến.
Vì vậy, các chức năng kích thước là chỉ cần đi trở lại biến toàn cầu.
Và đó là nó.
>> Bây giờ cuối cùng, chúng ta cần phải dỡ bỏ các từ điển một lần tất cả mọi thứ được thực hiện.
Vì vậy, làm thế nào chúng tôi sẽ làm điều đó?
Ở đây chúng ta đang Looping trên tất cả các thùng bảng của chúng tôi.
Vì vậy, có NUM_BUCKETS xô.
Và cho mỗi danh sách liên kết của chúng tôi trong Hashtable, chúng ta sẽ lặp trên
toàn bộ danh sách liên kết, giải phóng mỗi yếu tố.
>> Bây giờ chúng ta cần phải cẩn thận.
Vì vậy, ở đây chúng tôi có một biến tạm thời đó là lưu trữ các con trỏ đến tiếp theo
phần tử trong danh sách liên kết.
Và sau đó chúng tôi sẽ miễn phí các yếu tố hiện tại.
Chúng tôi cần phải chắc chắn chúng tôi làm điều này vì chúng ta không thể chỉ giải phóng các yếu tố hiện tại
và sau đó cố gắng truy cập vào các con trỏ tới, kể từ khi chúng tôi đã giải phóng nó,
bộ nhớ trở nên không hợp lệ.
>> Vì vậy, chúng ta cần phải giữ cho xung quanh một con trỏ tới các yếu tố tiếp theo, sau đó chúng tôi có thể giải phóng
yếu tố hiện tại, và sau đó chúng tôi có thể cập nhật phần tử hiện tại của chúng tôi để trỏ đến
các yếu tố tiếp theo.
Chúng tôi sẽ vòng lặp trong khi có những yếu tố trong danh sách liên kết này.
Chúng tôi sẽ làm điều đó cho tất cả các liên kết danh sách trong hashtable.
Và một khi chúng tôi đang thực hiện với đó, chúng tôi đã hoàn toàn dỡ Hashtable, và
chúng tôi đang thực hiện.
Vì vậy, nó không thể dỡ bỏ bao giờ trở lại sai.
Và khi chúng tôi đang thực hiện, chúng tôi chỉ trả lại sự thật.
>> Chúng ta hãy đưa ra giải pháp này một thử.
Vì vậy, chúng ta hãy nhìn vào những gì chúng tôi struct node sẽ như thế nào.
Ở đây chúng ta thấy chúng ta sẽ có một bool từ và một nút cấu trúc * trẻ em
khung bảng chữ cái.
Vì vậy, điều đầu tiên bạn có thể tự hỏi, tại sao là bảng chữ cái
ed định nghĩa là 27?
Vâng, hãy nhớ rằng chúng ta sẽ cần được xử lý dấu nháy đơn.
Vì vậy, đó sẽ là một số của một trường hợp đặc biệt trong suốt chương trình này.
>> Bây giờ nhớ làm thế nào một Trie thực sự hoạt động.
Hãy nói rằng chúng tôi đang lập chỉ mục từ "Mèo". Sau đó từ thư mục gốc của Trie,
chúng ta sẽ nhìn vào trẻ em mảng, và chúng ta sẽ xem xét các
chỉ số tương ứng với chữ cái C. Vì vậy, đó sẽ được lập chỉ mục 2.
Vì vậy, cho rằng, điều đó sẽ cung cấp cho chúng ta một nút mới.
Và sau đó chúng tôi sẽ làm việc từ nút đó.
>> Vì vậy, cho nút đó, chúng tôi lại một lần nữa sẽ xem xét các mảng trẻ em.
Và chúng ta sẽ nhìn vào chỉ số không tương ứng với một trong mèo.
Vì vậy, sau đó chúng ta sẽ đi đến nút đó, và cho nút đó chúng ta sẽ
nhìn ở cuối đó là một tương ứng T. Và chuyển sang nút đó,
cuối cùng, chúng tôi đã hoàn toàn nhìn qua lời của chúng tôi "con mèo." Và bây giờ bool
từ được cho là để cho biết từ cho điều này thực sự là một từ.
>> Vì vậy, tại sao chúng ta cần phải có trường hợp đặc biệt?
Tốt những gì của từ "thảm họa" là trong từ điển của chúng tôi, nhưng
từ "mèo" không?
Vì vậy, và tìm cách để xem từ "con mèo" được trong từ điển của chúng tôi, chúng tôi
sẽ xem xét thông qua thành công các chỉ số C-A-T trong khu vực nút.
Nhưng đó chỉ là vì thảm họa đã xảy ra để tạo ra các nút trên đường
từ C-A-T, tất cả các cách để cuối của từ đó.
Vì vậy, bool từ được sử dụng để cho biết địa điểm cụ thể này
thực sự chỉ ra một từ.
>> Được rồi.
Vì vậy, bây giờ mà chúng ta biết là những gì Trie sẽ như thế nào, chúng ta hãy nhìn vào
tải chức năng.
Vì vậy, tải sẽ trả về một bool cho dù chúng ta có thành công hay
không thành công nạp từ điển.
Và điều này là có được từ điển mà chúng tôi muốn để tải.
>> Điều đầu tiên nên chúng tôi phải làm là mở up từ điển để đọc.
Và chúng tôi phải chắc chắn chúng tôi đã không thất bại.
Vì vậy, nếu không phải là từ điển mở thành công, nó sẽ trở lại
null, trong trường hợp chúng tôi sẽ trả về false.
Nhưng giả định rằng nó thành công mở ra, sau đó chúng tôi thực sự có thể đọc
thông qua các từ điển.
>> Điều đầu tiên để chúng ta sẽ muốn làm là chúng tôi có điều này
gốc biến toàn cầu.
Bây giờ gốc là có được một nút *.
Đó là đầu Trie của chúng tôi rằng chúng tôi sẽ được lặp lại thông qua.
Vì vậy, điều đầu tiên mà chúng ta sẽ muốn làm là phân bổ
bộ nhớ cho rễ của chúng tôi.
Chú ý rằng chúng ta đang sử dụng calloc chức năng, mà về cơ bản là giống nhau
như chức năng malloc, ngoại trừ nó đảm bảo để trở về cái gì đó là
hoàn toàn zeroed ra.
Vì vậy, nếu chúng tôi sử dụng malloc, chúng tôi sẽ cần phải đi qua tất cả các con trỏ trong của chúng tôi
nút, và chắc chắn rằng tất cả chúng null.
Vì vậy, calloc sẽ làm điều đó cho chúng ta.
>> Bây giờ chỉ cần như malloc, chúng tôi cần phải thực hiện chắc chắn rằng sự phân bổ là thực sự
thành công.
Nếu điều này trở về null, sau đó chúng tôi cần phải đóng hoặc từ điển
nộp và trả về false.
Vì vậy, giả định phân bổ được thành công, chúng ta sẽ sử dụng một nút *
con trỏ để lặp qua Trie của chúng tôi.
Vì vậy, nguồn gốc của mình sẽ không bao giờ thay đổi, nhưng chúng ta sẽ sử dụng con trỏ đến
thực sự đi từ nút đến nút.
>> Vì vậy, trong này cho vòng lặp chúng ta đang đọc thông qua các tập tin từ điển.
Và chúng tôi đang sử dụng fgetc.
Fgetc sẽ lấy một đơn nhân vật từ tập tin.
Chúng tôi sẽ tiếp tục lấy ký tự trong khi chúng tôi không đạt được
cuối của tập tin.
>> Có hai trường hợp chúng ta cần phải xử lý.
Đầu tiên, nếu nhân vật không phải là một dòng mới.
Vì vậy chúng tôi biết nếu nó là một dòng mới, sau đó chúng tôi về để chuyển sang một từ mới.
Nhưng giả sử nó không phải là một dòng mới, sau đó ở đây chúng tôi muốn tìm ra
chỉ số chúng ta sẽ chỉ vào trong mảng trẻ em
chúng tôi xem xét trước.
>> Vì vậy, như tôi đã nói, chúng ta cần phải trường hợp đặc biệt các dấu nháy đơn.
Lưu ý chúng đang sử dụng ba yếu tố điều hành ở đây.
Vì vậy, chúng ta sẽ đọc như, nếu nhân vật chúng ta đọc trong là một
dấu nháy đơn, sau đó chúng ta sẽ thiết lập index = "bảng chữ cái" -1, mà sẽ
là chỉ số 26.
>> Khác, nếu nó không phải là một dấu nháy đơn, có chúng ta sẽ thiết lập các chỉ số
bằng c - a.
Vì vậy, nhớ lại từ trước đó p-bộ, c - một sẽ cung cấp cho chúng tôi
vị trí chữ cái của C. Vì vậy, nếu C là ký tự A, điều này sẽ
cung cấp cho chúng tôi số không.
Đối với chữ B, nó sẽ cho chúng tôi chỉ số 1, và như vậy.
>> Vì vậy, điều này cho phép chúng ta chỉ mục vào trẻ em mảng mà chúng ta muốn.
Bây giờ nếu chỉ số này hiện đang vô giá trị trong trẻ em, đó có nghĩa là một nút
hiện không tồn tại từ con đường đó.
Vì vậy, chúng ta cần phải phân bổ một nút cho con đường đó.
Đó là những gì chúng tôi sẽ làm ở đây.
>> Vì vậy, chúng ta sẽ một lần nữa sử dụng calloc chức năng, để chúng ta không phải
không ra tất cả các con trỏ.
Và chúng tôi một lần nữa cần phải kiểm tra calloc mà không thất bại.
Nếu calloc đã thất bại, sau đó chúng ta cần dỡ bỏ tất cả mọi thứ, đóng cửa của chúng tôi
từ điển, và trả về false.
Vì vậy, giả định rằng nó đã không thất bại, sau đó điều này sẽ tạo ra một đứa trẻ mới cho chúng tôi.
Và sau đó chúng ta sẽ đi đến đứa trẻ.
Con trỏ của chúng tôi sẽ lặp lại xuống con đó.
>> Bây giờ, nếu đây không phải là vô giá trị để bắt đầu với, sau đó con trỏ chỉ có thể lặp lại
xuống con đó mà không thực sự phải phân bổ bất cứ điều gì.
Đây là trường hợp đầu tiên mà chúng tôi đã xảy ra phân bổ từ "con mèo." Và
đó có nghĩa là khi chúng tôi đi để phân bổ "Thảm họa", chúng tôi không cần phải tạo ra
các nút cho C-A-T một lần nữa.
Họ đã tồn tại.
>> Này khác là gì?
Đây là điều kiện mà c là dấu gạch chéo ngược n, trong đó c là một dòng mới.
Điều này có nghĩa rằng chúng ta có thành công hoàn thành một từ.
Bây giờ những gì chúng tôi muốn làm khi chúng ta Hoàn thành một từ?
Chúng ta sẽ sử dụng trường từ này bên trong của nút cấu trúc của chúng tôi.
Chúng tôi muốn thiết lập đó là đúng sự thật.
Vì vậy, đó chỉ ra rằng nút này cho thấy một thành công
từ, một từ thực tế.
>> Bây giờ thiết lập đó là đúng sự thật.
Chúng tôi muốn thiết lập lại con trỏ của chúng tôi đến thời điểm để đầu Trie một lần nữa.
Và cuối cùng, tăng từ điển của chúng tôi kích thước, kể từ khi chúng tôi tìm được việc làm khác.
Vì vậy, chúng tôi sẽ tiếp tục làm điều đó, đọc trong nhân vật của nhân vật,
xây dựng các nút mới trong Trie của chúng tôi và cho mỗi từ trong từ điển, cho đến khi
cuối cùng chúng ta đạt C! = EOF, trong đó trường hợp chúng tôi thoát ra khỏi các tập tin.
>> Hiện nay có hai trường hợp dưới mà chúng tôi có thể nhấn kết thúc tập tin.
Đầu tiên là nếu có một lỗi đọc từ tập tin.
Vì vậy, nếu có một lỗi, chúng tôi cần phải làm điển hình.
Dỡ bỏ tất cả mọi thứ, gần các tập tin, trả về false.
Giả sử không có lỗi, mà chỉ có nghĩa là chúng tôi thực sự đánh cuối
các tập tin, trong trường hợp đó, chúng tôi đóng cửa nộp và trả lại đúng kể từ khi chúng tôi
từ điển nạp thành công vào Trie của chúng tôi.
>> Vì vậy, bây giờ chúng ta hãy xem.
Nhìn vào chức năng kiểm tra, chúng tôi thấy kiểm tra có nghĩa là sẽ trả về một bool.
Nó trả về true nếu từ này là nó được thông qua là trong Trie của chúng tôi.
Nó trả về false nếu không.
Vì vậy, làm thế nào bạn xác định xem từ này là trong Trie của chúng tôi?
>> Chúng ta thấy ở đây, giống như trước đây, chúng ta sẽ sử dụng con trỏ để lặp
thông qua Trie của chúng tôi.
Bây giờ đây chúng ta sẽ lặp trên toàn bộ từ chúng tôi.
Vì vậy, duyệt qua từ chúng tôi trong quá khứ, chúng ta sẽ xác định
chỉ số vào mảng trẻ em tương ứng với khung chữ I. Vì vậy, đây
sẽ trông giống hệt như tải, mà nếu từ [i]
là một dấu nháy đơn, sau đó chúng tôi muốn sử dụng chỉ số "bảng chữ cái" - 1.
Bởi vì chúng tôi xác định rằng là nơi mà chúng ta sẽ lưu trữ
dấu nháy.
>> Khác chúng ta sẽ sử dụng hai từ thấp khung I. Vì vậy, nhớ từ đó có thể
có vốn hóa tùy ý.
Và vì vậy chúng tôi muốn chắc chắn rằng chúng tôi sử dụng một phiên bản chữ thường của sự vật.
Và sau đó trừ đi từ đó 'a' một lần một lần nữa cho chúng ta những chữ cái
vị trí của nhân vật đó.
Vì vậy, đó sẽ là chỉ số của chúng tôi vào mảng trẻ em.
>> Và bây giờ nếu chỉ số vào trẻ em mảng là null, có nghĩa là chúng tôi
không còn có thể tiếp tục iterating xuống Trie của chúng tôi.
Nếu đó là trường hợp, từ này có thể không có thể là trong Trie của chúng tôi.
Vì nếu nó được, mà có thể có nghĩa là sẽ có một con đường
xuống từ đó.
Và bạn sẽ không bao giờ gặp phải null.
Vì vậy, gặp phải vô giá trị, chúng tôi trả về false.
Từ không có trong từ điển.
Nếu nó không được null, sau đó chúng tôi sẽ tiếp tục iterating.
>> Vì vậy, chúng ta sẽ ra có con trỏ để trỏ đến đó đặc biệt
nút tại chỉ số đó.
Chúng tôi tiếp tục làm điều đó trong suốt toàn bộ văn bản, giả định
chúng tôi không bao giờ đánh null.
Điều đó có nghĩa chúng tôi có thể nhận được thông qua toàn bộ văn bản và tìm thấy
một nút trong thử của chúng tôi.
Nhưng chúng tôi không hoàn toàn thực hiện được nêu ra.
>> Chúng tôi không muốn chỉ trở thành sự thật.
Chúng tôi muốn trở lại con trỏ> từ.
Kể từ khi nhớ lại, là "con mèo" không trong từ điển của chúng tôi, và "thảm họa"
được, thì chúng ta sẽ thành công, chúng tôi có được thông qua từ "con mèo." Nhưng con trỏ
từ đó sẽ là sai lầm và không đúng sự thật.
Vì vậy, chúng tôi trở lại từ con trỏ để chỉ cho dù nút này thực sự là một lời.
Và đó là nó để kiểm tra.
>> Vì vậy, hãy kiểm tra kích thước.
Vì vậy, kích thước sẽ là khá dễ dàng Kể từ đó, nhớ trong tải, chúng tôi
cách tăng kích thước từ điển cho mỗi từ mà chúng ta gặp phải.
Vì vậy, kích thước chỉ là sẽ trở về kích thước từ điển.
Và đó là nó.
>> Vì vậy, cuối cùng chúng tôi đã dỡ bỏ.
Vì vậy, dỡ bỏ, chúng ta sẽ sử dụng một hàm đệ quy để thực sự làm tất cả
các công việc cho chúng tôi.
Vì vậy, chức năng của chúng tôi sẽ được gọi là ngày không tải.
Những gì đang không tải sẽ làm gì?
Chúng ta thấy ở đây không tải có nghĩa là sẽ lặp qua tất cả các trẻ em
nút đặc biệt này.
Và nếu nút con không phải là null, sau đó chúng ta sẽ
dỡ bỏ các nút con.
>> Vì vậy, đây là bạn đệ quy dỡ bỏ tất cả các trẻ em của chúng tôi.
Một khi chúng tôi chắc chắn rằng tất cả các trẻ em của chúng tôi đã được dỡ xuống, sau đó chúng tôi
có thể giải phóng mình, vì vậy dỡ bỏ bản thân mình.
Điều này sẽ làm việc đệ quy dỡ bỏ toàn bộ Trie.
Và sau đó một khi đã xong, chúng tôi chỉ có thể trở thành sự thật.
Dỡ bỏ không thể thất bại.
Chúng tôi chỉ giải phóng mọi thứ.
Vì vậy, khi chúng tôi đang thực hiện giải phóng tất cả mọi thứ, trở về đúng.
Và đó là nó.
Tên tôi là Rob.
Và đây là Speller.
>> [MUSIC CHƠI]