1 00:00:00,000 --> 00:00:00,530 2 00:00:00,530 --> 00:00:03,070 >> 스피커 1 : 이제 드리겠습니다 이 솔루션을 사용해보십시오. 3 00:00:03,070 --> 00:00:07,130 그럼 어떻게 우리를 살펴 보자 구조체의 노드가 같이 표시됩니다. 4 00:00:07,130 --> 00:00:11,040 여기에서, 우리는 우리가해야 할 것입니다 참조 부울 말씀과 구조체 노드 별 5 00:00:11,040 --> 00:00:12,990 아이들은 알파벳 브라켓. 6 00:00:12,990 --> 00:00:18,720 그래서 일단 당신이 궁금 할 것입니다, 왜 알파벳 해시는 27로 정의된다? 7 00:00:18,720 --> 00:00:22,540 글쎄, 우리가 필요 해요 기억 아포스트로피를 처리하는, 그래서 할 8 00:00:22,540 --> 00:00:25,610 그 특별한 다소있을거야 이 프로그램 전반에 걸쳐 케이스. 9 00:00:25,610 --> 00:00:28,780 >> OK, 이제 기억하는 방법 트라이 실제로 작동합니다. 10 00:00:28,780 --> 00:00:33,420 의 우리가 단어의 고양이를 인덱싱하고 있다고 가정 해 봅시다, 그 후에 우리의 트라이의 루트에서, 11 00:00:33,420 --> 00:00:36,670 우리는 아이들 보는거야 배열, 우리는 보는거야 12 00:00:36,670 --> 00:00:42,250 문자에 해당하는 인덱스 C.는 그래서 인덱스 두 가지 일 것입니다. 13 00:00:42,250 --> 00:00:46,400 그래서, 그것이 우리에게 줄 것이다 부여 새 노드, 그리고, 우리는거야 14 00:00:46,400 --> 00:00:47,880 해당 노드에서 작동합니다. 15 00:00:47,880 --> 00:00:51,830 >> 그래서 노드 주어, 우리는 다시 한 번이야 어린이 배열을 볼 줄, 16 00:00:51,830 --> 00:00:56,170 우리는 인덱스 0에 보는거야 고양이에 해당합니다. 17 00:00:56,170 --> 00:01:01,240 그래서 우리는 그 노드에 가서, 해당 노드 주어, 우리는거야 18 00:01:01,240 --> 00:01:05,170 해당 인덱스 보는 T. 그리고 그 노드로 이동,에 19 00:01:05,170 --> 00:01:09,590 마지막으로, 우리는 완전히 보았다 우리의 말 고양이를 통해, 이제 BOOL 20 00:01:09,590 --> 00:01:15,020 단어 여부를 표시하도록되어 이 주어진 단어는 실제로 단어입니다. 21 00:01:15,020 --> 00:01:17,530 >> 그럼 왜 우리는 특별한 경우를 필요합니까? 22 00:01:17,530 --> 00:01:21,680 그럼, 만약 단어 재앙 우리의 사전에 있지만, 23 00:01:21,680 --> 00:01:24,120 단어 고양이 아닌가요? 24 00:01:24,120 --> 00:01:29,030 그래서 단어 고양이가 있는지 찾고 우리의 사전에, 우리는거야 25 00:01:29,030 --> 00:01:34,880 성공적으로 인덱스를 통해보고 C-A-T와 노드에 도달하지만, 그건 26 00:01:34,880 --> 00:01:39,760 재앙이 일어난 때문 C-A-T에서 길에 노드를 만드는 모든 27 00:01:39,760 --> 00:01:41,250 단어의 끝 방법. 28 00:01:41,250 --> 00:01:46,520 그래서 BOOL 단어 여부를 나타내는 데 사용됩니다 이 특정 위치 실제로 29 00:01:46,520 --> 00:01:48,370 단어를 나타냅니다. 30 00:01:48,370 --> 00:01:52,920 >> 좋아, 그래서 지금 우리가 알고있는 무엇을 트라이는 이제 살펴 보자, 같이하는 것입니다 31 00:01:52,920 --> 00:01:54,800 로드 기능에서. 32 00:01:54,800 --> 00:01:58,670 그래서로드는 부울을 반환하는 것입니다 여부를 우리가 성공적으로 나에 대한 33 00:01:58,670 --> 00:02:03,020 실패로드 사전과 이 사전이 될 것입니다 34 00:02:03,020 --> 00:02:04,520 우리는로드 할 것을. 35 00:02:04,520 --> 00:02:08,310 우리가 할거야 그래서 일단 열려 독서하는 사전입니다. 36 00:02:08,310 --> 00:02:12,060 우리는 우리가 실패하지 않았는지 확인해야합니다, 그래서 사전이 아닌 경우 37 00:02:12,060 --> 00:02:15,280 성공적으로 열려, 그것은 반환 아니,이 경우 우리는거야 38 00:02:15,280 --> 00:02:16,340 false를 반환합니다. 39 00:02:16,340 --> 00:02:21,290 그러나 가정 그것이 성공적으로 열, 우리는 실제로 읽을 수 있습니다 40 00:02:21,290 --> 00:02:22,310 사전을 통해. 41 00:02:22,310 --> 00:02:24,940 >> 우리가 갈거야 그래서 일단 하고 싶은 우리는이 가지고있다 42 00:02:24,940 --> 00:02:26,560 전역 변수 루트. 43 00:02:26,560 --> 00:02:30,250 이제 루트 노드 스타가 될 것입니다. 44 00:02:30,250 --> 00:02:33,830 그것은 우리가있어 우리의 트라이의 정상의 반복 할 것. 45 00:02:33,830 --> 00:02:38,200 우리가 원하는거야 그래서 일단 수행은 우리의 뿌리에 대한 메모리를 할당 할 수 있습니다. 46 00:02:38,200 --> 00:02:42,040 >> 우리는 buf는을 사용하는 것을 알 수 기본적으로 동일 기능, 47 00:02:42,040 --> 00:02:45,560 MALLOC 함수를 제외하고는의 무언가를 반환 보장 48 00:02:45,560 --> 00:02:47,240 완전히 제로. 49 00:02:47,240 --> 00:02:51,350 우리의 malloc을 사용하는 경우에, 우리는해야합니다 의 모든 포인터를 이동 우리 50 00:02:51,350 --> 00:02:54,220 노드와 있는지 확인 그들은 모두 널 (null)입니다. 51 00:02:54,220 --> 00:02:56,780 그래서 buf는 우리를 위해 그렇게 할 것이다. 52 00:02:56,780 --> 00:03:00,390 >> 지금, 바로 MALLOC처럼, 우리는 만들 필요가 할당이 사실의 확인 53 00:03:00,390 --> 00:03:01,580 성공. 54 00:03:01,580 --> 00:03:04,060 이 null을 반환하는 경우에, 우리 우리의 사전을 닫을 필요 55 00:03:04,060 --> 00:03:06,170 파일 및 false를 반환합니다. 56 00:03:06,170 --> 00:03:11,040 따라서 할당 된 가정 성공, 우리는 노드를 사용하는 것입니다 57 00:03:11,040 --> 00:03:14,340 반복 커서 스타 우리의 트라이를 통해. 58 00:03:14,340 --> 00:03:17,950 그래서 우리의 루트는 변경하려고 적이 없어요, 그러나 우리는 커서를 사용하는 것입니다 59 00:03:17,950 --> 00:03:20,770 실제로 노드에서 노드로 이동합니다. 60 00:03:20,770 --> 00:03:25,000 >> 좋아요,이 루프에서, 우리는 , 사전 파일을 읽고 61 00:03:25,000 --> 00:03:26,965 그리고 우리는 fgetc를 사용하고 있습니다. 62 00:03:26,965 --> 00:03:30,360 그래서는 fgetc는 하나를 잡아 것입니다 파일에서 문자. 63 00:03:30,360 --> 00:03:33,430 우리는 잡는 계속할 예정 자 우리가 도달하지 않는 동안 64 00:03:33,430 --> 00:03:37,540 파일의 끝, 그래서 거기 우리가 처리하는 두 가지 항목 케이스. 65 00:03:37,540 --> 00:03:41,640 첫 번째, 문자가 아닌 경우 그것은 새로운 있다면 새로운 라인, 그래서 우리는 알고있다 66 00:03:41,640 --> 00:03:44,480 라인, 우리는 할 거니까 새로운 단어로 이동합니다. 67 00:03:44,480 --> 00:03:49,300 하지만, 그것이 새로운 라인이 아니었다 가정 여기, 우리가 알아 내야 68 00:03:49,300 --> 00:03:52,440 인덱스 우리는에 인덱스에가는거야 어린이 배열이 69 00:03:52,440 --> 00:03:53,890 우리는 전에 바라 보았다. 70 00:03:53,890 --> 00:03:57,950 >> 내가 전에 말했듯이 같이, 우리는 필요 특별한 경우 아포스트로피. 71 00:03:57,950 --> 00:04:01,040 우리는 삼항 연산자를 사용하는주의 여기에, 그래서 우리는 읽을거야 72 00:04:01,040 --> 00:04:05,500 이 우리가 읽을 수있는 문자 인 것처럼 아포스트로피는, 우리는거야 73 00:04:05,500 --> 00:04:11,740 알파벳 마이너스에 해당 인덱스를 설정 1, 어떤 인덱스 26이됩니다. 74 00:04:11,740 --> 00:04:15,190 그렇지 않으면, 아포스트로피가 아니었다면, 우리는 인덱스를 설정하는거야 75 00:04:15,190 --> 00:04:17,820 C 마이너스 동일. 76 00:04:17,820 --> 00:04:23,090 그래서 다시 이전 P 세트의 기억, C 마이너스가 우리에게 줄 수 있겠나? 77 00:04:23,090 --> 00:04:27,470 알파벳 C의 위치, 그렇다면 C는 문자 A,이 뜻 78 00:04:27,470 --> 00:04:28,770 우리 지수 제로를 제공합니다. 79 00:04:28,770 --> 00:04:32,180 문자 B의 경우, 줄 것 그래서 우리 인덱스 1합니다. 80 00:04:32,180 --> 00:04:37,070 >> 그래서 이것은 우리에 대한 인덱스를 제공 우리가 원하는 것을 어린이 배열입니다. 81 00:04:37,070 --> 00:04:42,540 이제,이 지수는 현재 null의 경우 어린이 배열, 즉 의미 82 00:04:42,540 --> 00:04:47,470 노드는 현재에서 존재하지 않는 그 경로는, 그래서 우리는 할당해야 83 00:04:47,470 --> 00:04:49,220 그 경로에 대한 노드. 84 00:04:49,220 --> 00:04:50,610 즉, 우리가 여기서 할거야. 85 00:04:50,610 --> 00:04:54,650 그래서 우리는 다시,은 calloc을 사용하는 것입니다 기능을 우리가하지 않아도되도록 86 00:04:54,650 --> 00:05:00,130 모든 포인터를 제로,하고 우리는, 다시, 그 buf는 확인해야 87 00:05:00,130 --> 00:05:01,300 실패하지 않았다. 88 00:05:01,300 --> 00:05:04,760 buf는 실패 않은 경우에, 우리는 필요 모든 언로 닫으 우리 89 00:05:04,760 --> 00:05:06,880 사전 및 false를 반환합니다. 90 00:05:06,880 --> 00:05:14,110 >> 그래서 그 다음, 실패하지 않았다고 가정 이것은 우리에게 새로운 아이를 작성합니다 91 00:05:14,110 --> 00:05:16,000 그리고, 우리는 그 아이로 이동합니다. 92 00:05:16,000 --> 00:05:19,030 우리의 커서가 반복됩니다 그 아이에 이르기까지. 93 00:05:19,030 --> 00:05:23,390 자, 여기가로 시작하는 경우는 null가 아니었다면, 다음 커서가 단지 반복 할 수 94 00:05:23,390 --> 00:05:26,650 실제로하지 않고 그 아이에 이르기까지 아무것도 할당하는 데. 95 00:05:26,650 --> 00:05:30,790 이것은 우리가 처음 일어난 경우입니다 단어 고양이를 할당하고 96 00:05:30,790 --> 00:05:34,390 우리가 할당 갈 때 그 의미 재앙, 우리는 만들 필요가 없습니다 97 00:05:34,390 --> 00:05:35,720 다시 C-A-T에 대한 노드. 98 00:05:35,720 --> 00:05:37,620 그들은 이미 존재합니다. 99 00:05:37,620 --> 00:05:40,140 >> 좋아, 그럼이 그렇지는 무엇인가? 100 00:05:40,140 --> 00:05:44,600 이 C 한 상태이다 C는 새로운 라인이었다 백 슬래시 N,. 101 00:05:44,600 --> 00:05:47,780 이것은 우리가 성공적으로해야 함을 의미 단어를 완료했습니다. 102 00:05:47,780 --> 00:05:51,020 지금, 우리는 무엇을 하시겠습니까 때 우리 성공적으로 단어를 완성? 103 00:05:51,020 --> 00:05:55,250 우리는이 단어 필드를 사용하는 것입니다 우리의 구조체 노드의 내부. 104 00:05:55,250 --> 00:06:00,570 >> 우리는 참으로이 부분을 설정하려면, 그 때문에 이 노드가 나타내는 것을 나타냅니다 105 00:06:00,570 --> 00:06:03,320 성공적인 단어 실제 단어. 106 00:06:03,320 --> 00:06:05,050 지금, 참으로 그 설정합니다. 107 00:06:05,050 --> 00:06:09,210 우리는 점에 우리의 커서를 재설정 할 다시 트라이의 시작. 108 00:06:09,210 --> 00:06:13,510 그리고 마지막으로, 우리의 사전을 증가 우리는 또 다른 단어를 찾을 크기 때문이다. 109 00:06:13,510 --> 00:06:16,450 >> 좋아, 그래서 우리는 일을 계속하는거야 즉,에 의해 문자로 읽기 110 00:06:16,450 --> 00:06:21,960 캐릭터, 새로운 노드를 구축 우리의 트라이와 각 단어에 대한 111 00:06:21,960 --> 00:06:26,810 사전에, 우리는 마침내 C에 도달 할 때까지 우리는 휴식이 경우 EOF를, 동일 112 00:06:26,810 --> 00:06:28,100 파일의 중. 113 00:06:28,100 --> 00:06:31,110 이제 두 가지 경우에서가 우리는 EOF 칠 수도있다. 114 00:06:31,110 --> 00:06:35,680 오류가 발생했을 경우는 우선 이 있다면 파일 읽기, 그래서 115 00:06:35,680 --> 00:06:39,280 오류, 우리는 일반적인 작업을 수행해야 모든 것을 언로드 파일을 닫습니다, 116 00:06:39,280 --> 00:06:40,520 false를 반환합니다. 117 00:06:40,520 --> 00:06:43,870 오류가 없었습니다 가정하면 우리가 실제로의 끝을 명중 의미 118 00:06:43,870 --> 00:06:47,820 파일은,이 경우에, 우리는 이서 파일 및 True를 반환 이후 우리 119 00:06:47,820 --> 00:06:51,010 성공적으로 사전로드 우리의 트라이에. 120 00:06:51,010 --> 00:06:54,240 >> 좋아, 이제하자 체크를 확인하세요. 121 00:06:54,240 --> 00:06:58,780 확인 기능을 보면, 우리는 참조 그 검사는 부울을 반환하는 것입니다. 122 00:06:58,780 --> 00:07:03,740 이 단어가 있다고하면 True를 반환 전달되는 우리의 트라이에 있습니다. 123 00:07:03,740 --> 00:07:06,170 그것은 그렇지 않으면 False를 반환합니다. 124 00:07:06,170 --> 00:07:10,110 >> 그래서 우리가 어떻게 있는지 여부를 확인하려고 이 말씀은 우리의 트라이에? 125 00:07:10,110 --> 00:07:14,270 우리는 여기에서 보는 그 직전처럼, 우리는 반복하는 커서를 사용하는 것입니다 126 00:07:14,270 --> 00:07:16,010 우리의 트라이를 통해. 127 00:07:16,010 --> 00:07:20,650 지금, 여기, 우리는 반복하는거야 우리의 전체 단어 이상. 128 00:07:20,650 --> 00:07:24,680 그래서 우리가 단어를 반복 전달, 우리가 결정하는거야 129 00:07:24,680 --> 00:07:29,280 인덱스 어린이 배열에 그 단어 브래킷 I에 해당합니다. 130 00:07:29,280 --> 00:07:34,150 따라서이 정확히처럼 보이게하는 것입니다 로드, 어디 단어 브래킷 나는 경우 131 00:07:34,150 --> 00:07:38,110 아포스트로피, 우리는 인덱스를 사용하려면 1 마이너스 알파벳 우리가 결정하기 때문에 132 00:07:38,110 --> 00:07:41,160 우리가 가고있는 곳이다 아포스트로피를 저장합니다. 133 00:07:41,160 --> 00:07:44,440 >> 그렇지 않으면 우리는 tolower를 사용하는 것입니다 단어 브래킷 전. 134 00:07:44,440 --> 00:07:48,270 그래서이 할 수있는 단어를 기억 임의 대문자, 그리고 우리 135 00:07:48,270 --> 00:07:51,590 우리가 사용하고 있는지 확인하려면 사물의 소문자 버전. 136 00:07:51,590 --> 00:07:55,300 그리고 그 소에서 빼기 다시 한 번, 우리에게주는 137 00:07:55,300 --> 00:07:57,940 알파벳 위치 그 문자의. 138 00:07:57,940 --> 00:08:01,740 그래서 색인 될 것 어린이 배열에. 139 00:08:01,740 --> 00:08:06,480 >> 그리고 지금, 만약 아이들에 해당 인덱스 배열이 null, 그것은 우리에게 의미 140 00:08:06,480 --> 00:08:09,050 더 이상 반복 할을 계속할 수 우리의 트라이 다운. 141 00:08:09,050 --> 00:08:13,320 그런 경우,이 단어는 할 수 없습니다 아마도, 우리의 트라이에지기 때문에 그 142 00:08:13,320 --> 00:08:18,000 즉이있을 것입니다 의미했다 경로 아래로 그 단어에, 당신은 것 143 00:08:18,000 --> 00:08:19,350 널 (null)가 발생하지 않습니다. 144 00:08:19,350 --> 00:08:21,910 그래서 널 (null)가 발생, 우리는 false를 반환합니다. 145 00:08:21,910 --> 00:08:23,810 이 단어는 사전에없는 것입니다. 146 00:08:23,810 --> 00:08:28,200 null이 아니었다면, 우리는거야 반복하기를 계속, 그래서 우리는거야 147 00:08:28,200 --> 00:08:33,150 그 가리 키도록 우리의 커서를 업데이트 그 인덱스에 특정 노드. 148 00:08:33,150 --> 00:08:36,659 >> 그래서 우리는 내내 그 일을 계속 전체 단어. 149 00:08:36,659 --> 00:08:40,630 우리는 널 (null)을 때린 적은 가정이 수단 우리는 전체를 통해 얻을 수 있었다 150 00:08:40,630 --> 00:08:44,840 세계와 우리의 트라이의 노드를 찾아, 그러나 우리는 확실히 아직 끝나지 않았습니다. 151 00:08:44,840 --> 00:08:46,350 우리는 단지 True를 반환하지 않습니다. 152 00:08:46,350 --> 00:08:51,400 우리는 커서 오류 단어를 반환 할 고양이가없는 경우 이후 다시 기억 153 00:08:51,400 --> 00:08:55,140 우리 사전과 재앙이에 우리는 성공적으로 통과합니다 154 00:08:55,140 --> 00:08:59,810 단어 고양이, 그러나 커서 단어 거짓과 참되지 않습니다. 155 00:08:59,810 --> 00:09:04,990 그래서 우리는 표시하기 위해 커서의 단어를 반환 여부를이 노드는 실제로 단어, 156 00:09:04,990 --> 00:09:06,530 그리고 그 확인을 위해의. 157 00:09:06,530 --> 00:09:08,310 >> 그래서 크기를 확인 할 수 있습니다. 158 00:09:08,310 --> 00:09:11,410 그래서 크기는 매우 쉽게 될 것입니다 이후로드의 기억, 우린 159 00:09:11,410 --> 00:09:15,480 위한 사전의 크기를 증가 우리는 발생하는 각 단어. 160 00:09:15,480 --> 00:09:20,820 그래서 크기는 그냥 돌아 오려고하는 사전 크기, 그거야. 161 00:09:20,820 --> 00:09:24,650 >> 좋아, 그래서 마지막으로, 우리는 언로드있다. 162 00:09:24,650 --> 00:09:29,050 그래서 언로드, 우리가 사용하는거야 실제로 모든 할 수있는 재귀 함수 163 00:09:29,050 --> 00:09:33,390 우리, 그래서 우리의 기능에 대한 작업 언 로더를 호출 할 것입니다. 164 00:09:33,390 --> 00:09:35,830 무엇 언은 할거야? 165 00:09:35,830 --> 00:09:40,640 우리는 언은 예정 여기를 참조하십시오 모든 아이들에서을 반복 166 00:09:40,640 --> 00:09:45,810 이 특정 노드, 그리고 만약 아이 노드가 null는 아니고, 우리는거야 167 00:09:45,810 --> 00:09:47,760 자식 노드를 언로드. 168 00:09:47,760 --> 00:09:52,070 >> 그래서이 반복적으로 예정 우리의 아이들을 모두 언로드. 169 00:09:52,070 --> 00:09:55,140 우리는 있는지 들어가면 우리 아이들의 모든 언로드 된, 우리 170 00:09:55,140 --> 00:09:58,830 자신을 해방, 그래서 해결할 언로드 할 수 있습니다. 171 00:09:58,830 --> 00:10:04,550 그래서이 재귀 적으로 언로드 전체 트라이하고 그건 한 번 172 00:10:04,550 --> 00:10:06,910 다, 우리는 단지 True를 반환 할 수 있습니다. 173 00:10:06,910 --> 00:10:09,770 언로드 우리가있어, 실패 할 수 단지 물건을 확보. 174 00:10:09,770 --> 00:10:12,985 그래서 일단 우리가 확보 완료 모든 것이 True를 반환. 175 00:10:12,985 --> 00:10:14,380 그리고 바로 그거야. 176 00:10:14,380 --> 00:10:16,792 내 이름은 롭이며,이 [들리지이었다. 177 00:10:16,792 --> 00:10:21,888