1 00:00:00,000 --> 00:00:09,700 2 00:00:09,700 --> 00:00:12,140 >> ZAMYLA CHAN : 만들자 맞춤법 검사기. 3 00:00:12,140 --> 00:00:16,900 당신이 speller.c를 열 경우, 당신은 볼 것이다 그것을위한 대부분의 기능 4 00:00:16,900 --> 00:00:20,810 대해 텍스트 파일을 검사 사전은 이미 당신을 위해 만들어. 5 00:00:20,810 --> 00:00:26,330 사전 텍스트로 전달합니다. / 철자, 신청하고 다른 텍스트 파일, 6 00:00:26,330 --> 00:00:28,960 텍스트 파일을 확인합니다 사전에. 7 00:00:28,960 --> 00:00:34,160 >> 이제, 사전 텍스트 파일이 포함됩니다 유효한 단어, 한 줄에 하나씩. 8 00:00:34,160 --> 00:00:37,910 그런 speller.c은 부하를 호출합니다 사전 텍스트 파일에. 9 00:00:37,910 --> 00:00:43,650 그것은라는 기능이 확인 전화 할게 입력 된 텍스트 파일에있는 모든 단어, 10 00:00:43,650 --> 00:00:46,460 모든 맞춤법이 틀린 단어를 인쇄. 11 00:00:46,460 --> 00:00:50,030 >> Speller.c은 또한 크기를 호출합니다 단어의 개수를 결정 12 00:00:50,030 --> 00:00:53,500 사전 호출 언로드 메모리를 확보합니다. 13 00:00:53,500 --> 00:00:57,600 speller.c는 방법을 추적합니다 많은 시간은 이들의 수행하는 데 사용됩니다 14 00:00:57,600 --> 00:01:00,560 프로세스, 그러나 우리는거야 나중에 얻을. 15 00:01:00,560 --> 00:01:02,440 >> 그렇다면 우리는 어떻게해야합니까? 16 00:01:02,440 --> 00:01:05,110 우리는 dictionary.c를 입력해야합니다. 17 00:01:05,110 --> 00:01:09,940 dictionary.c에서, 우리는 도우미가 로드 기능로드, 18 00:01:09,940 --> 00:01:10,855 사전. 19 00:01:10,855 --> 00:01:15,490 경우 검사 기능 점검, 주어진 단어는 사전에 있습니다. 20 00:01:15,490 --> 00:01:19,150 함수의 크기는 수를 반환 사전에있는 단어. 21 00:01:19,150 --> 00:01:24,870 그리고 마지막으로, 우리는, 언로드이있는 메모리에서 사전을 해제합니다. 22 00:01:24,870 --> 00:01:27,070 >> 그래서 첫째, 부하를 해결 할 수 있습니다. 23 00:01:27,070 --> 00:01:32,110 사전 텍스트의 각 단어에 대한 파일로드에서 그 단어를 저장할 24 00:01:32,110 --> 00:01:34,860 사전 데이터 구조 당신의 선택, 하나의 25 00:01:34,860 --> 00:01:36,750 테이블이나 트라이 해시. 26 00:01:36,750 --> 00:01:39,440 나는 모두에 갈거야 이를 통해 도보. 27 00:01:39,440 --> 00:01:43,150 >> 첫 번째의 해시 테이블에 대해 이야기하자. 28 00:01:43,150 --> 00:01:47,050 당신이 10 당구 공을 가지고 있었고, 말 당신이 그들을 저장하고 싶었습니다. 29 00:01:47,050 --> 00:01:50,420 당신은 양동이에 그들 모두를 넣을 수 있습니다, 당신은 특정을 필요로 할 때 30 00:01:50,420 --> 00:01:54,010 공 번호, 당신은 하나를 것 한 번에 양동이 31 00:01:54,010 --> 00:01:55,880 그 공을 찾고. 32 00:01:55,880 --> 00:01:59,370 그리고 10 공, 당신은해야한다 합리적인에서 공을 찾을 수 33 00:01:59,370 --> 00:02:01,160 시간. 34 00:02:01,160 --> 00:02:03,180 >> 그러나 당신이 20 공을 가지고 있다면? 35 00:02:03,180 --> 00:02:05,480 지금은 조금 더 오래 걸릴 수 있습니다. 36 00:02:05,480 --> 00:02:06,180 어떤 약 100? 37 00:02:06,180 --> 00:02:07,880 1000? 38 00:02:07,880 --> 00:02:11,590 지금, 그것은 훨씬 쉬울 것입니다 경우 여러 개의 버킷을했다. 39 00:02:11,590 --> 00:02:15,890 아마 공 하나의 버킷 번호가 0 구, 또 다른 버킷을 통해 40 00:02:15,890 --> 00:02:18,800 공 (10)을 통해 번호 19, 등등. 41 00:02:18,800 --> 00:02:22,330 >> 지금 당신은 특정을 찾기 위해 필요한 경우 공, 자동으로 할 수 42 00:02:22,330 --> 00:02:26,320 하나의 특정 양동이로 이동 그 양동이를 통해 검색 할 수 있습니다. 43 00:02:26,320 --> 00:02:29,840 그리고 각 버킷은 대략 10가있는 경우 공, 당신은 쉽게 검색 할 수 44 00:02:29,840 --> 00:02:31,790 그것을 통해. 45 00:02:31,790 --> 00:02:34,960 >> 이제, 우리는 다루고 있기 때문에 에 대한 사전, 하나의 버킷 46 00:02:34,960 --> 00:02:41,970 사전에있는 단어의 모든 것 아마 너무 적은 버킷합니다. 47 00:02:41,970 --> 00:02:44,370 그럼 해시 테이블에 대해 살펴 보겠습니다. 48 00:02:44,370 --> 00:02:46,940 >> 버킷의 배열로 생각합니다. 49 00:02:46,940 --> 00:02:50,370 이 경우, 버킷 우리의 연결된 목록입니다. 50 00:02:50,370 --> 00:02:54,770 그리고 우리는 우리의 모든 단어를 배포합니다 이러한 다수의 연결리스트에있는 사이 51 00:02:54,770 --> 00:02:58,940 해시 함수를 사용하여 편성 방법 우리에게 할 어떤 52 00:02:58,940 --> 00:03:03,720 지정된 키 물통, 주어진 단어에 속한다. 53 00:03:03,720 --> 00:03:05,960 >> 의 개략적이를 표현하자. 54 00:03:05,960 --> 00:03:11,320 여기에 파란색 상자 값을 포함하고 빨간색 상자는 다른 값을 가리 55 00:03:11,320 --> 00:03:12,280 포인터 쌍. 56 00:03:12,280 --> 00:03:14,800 우리는이 쌍 노드를 호출 할 수 있습니다. 57 00:03:14,800 --> 00:03:18,260 이제, 각 버킷은, 나는 말했다 이전에 링크 된 목록입니다. 58 00:03:18,260 --> 00:03:21,820 연결리스트에서, 각각의 노드는 값을 가지고, 뿐만 아니라 포인터 59 00:03:21,820 --> 00:03:23,170 다음 값. 60 00:03:23,170 --> 00:03:26,150 >> 이제 연결된 목록을 처리, 그것은 매우 중요합니다 당신에게 그 61 00:03:26,150 --> 00:03:28,120 어떤 링크를 잃지 않는다. 62 00:03:28,120 --> 00:03:32,250 그리고 기억해야 할 또 다른 사실은 그 마지막 노드, 그것을 가리 키지 않는 경우 63 00:03:32,250 --> 00:03:35,120 다른 노드는, 널 (null)를 가리 킵니다. 64 00:03:35,120 --> 00:03:37,970 >> 그렇다면 우리는 C이 표시합니까? 65 00:03:37,970 --> 00:03:40,540 우리는 여기에서 우리의 구조체를 정의합니다. 66 00:03:40,540 --> 00:03:44,850 이 경우 값은 길이의 문자 배열. 67 00:03:44,850 --> 00:03:48,880 길이가 길이 더하기 1 최대 어떤 단어의 길이, 플러스 1 68 00:03:48,880 --> 00:03:50,380 널 (NULL) 종료. 69 00:03:50,380 --> 00:03:54,210 그리고 우리는 포인터를 가지고 다음라는 또 다른 노드. 70 00:03:54,210 --> 00:03:56,730 >> 그래서 작은 연결리스트를 만들어 보자. 71 00:03:56,730 --> 00:04:00,390 첫째로, 당신은 당신의 노드를 MALLOC 할 것이다, 메모리 공간을 생성하는 72 00:04:00,390 --> 00:04:04,010 노드 유형의 크기입니다. 73 00:04:04,010 --> 00:04:06,100 다른 노드를 확인, 다시 mallocing. 74 00:04:06,100 --> 00:04:09,370 75 00:04:09,370 --> 00:04:14,340 >> 지금 당신은에 값을 지정하려면 단어, 우리는 노드 1의 화살표를 말할 수있다 76 00:04:14,340 --> 00:04:18,820 워드는 "안녕하세요."와 동일 이 화살표 연산자 포인터를 역 참조 77 00:04:18,820 --> 00:04:20,620 구조체의 변수에 액세스합니다. 78 00:04:20,620 --> 00:04:24,330 이 방법은 우리 모두를 사용할 필요가 없습니다 점과 별 연산자. 79 00:04:24,330 --> 00:04:30,100 >> 그래서 그때는 노드 2의 화살표 단어가 동일해야 "세계." 그리고 거기, 값은 80 00:04:30,100 --> 00:04:33,110 내 노드에 채워집니다. 81 00:04:33,110 --> 00:04:38,780 링크를 만들려면, 내가 노드 1을 전달합니다 다음 화살표를 해당 노드 별에 액세스 82 00:04:38,780 --> 00:04:44,160 노드 포인터, 노드 2에 해당, 두 노드 2에 노드 1을 가리키는. 83 00:04:44,160 --> 00:04:46,360 그리고 거기에 우리가 링크 된 목록이 있습니다. 84 00:04:46,360 --> 00:04:51,480 >> 그래서 하나의 연결리스트,하지만 해시 테이블의 전체 배열 85 00:04:51,480 --> 00:04:52,520 연결리스트. 86 00:04:52,520 --> 00:04:55,920 글쎄, 우리는 같은 노드를해야합니다 이전 구조. 87 00:04:55,920 --> 00:05:00,140 그러나 우리는 실제 해시 테이블을 원하는 경우, 우리는 단지 노드 포인터를 만들 수 있습니다 88 00:05:00,140 --> 00:05:01,330 여기에 배열. 89 00:05:01,330 --> 00:05:04,940 예를 들어, 크기 500. 90 00:05:04,940 --> 00:05:08,910 >> 이제 통지, 무역있을거야 의 크기 사이의 쉬는 91 00:05:08,910 --> 00:05:11,280 해시 테이블의 크기 링크 된 목록. 92 00:05:11,280 --> 00:05:15,640 당신은 정말 높은 숫자가있는 경우 버킷은 다시 실행할 필요 상상 93 00:05:15,640 --> 00:05:18,230 앞뒤에 줄 당신의 물통을 찾을 수 있습니다. 94 00:05:18,230 --> 00:05:21,530 그러나 당신은 또한 적은 수의 원하지 않는 버킷, 우리는 위로이기 때문에 95 00:05:21,530 --> 00:05:26,850 가지는 방법의 원래 문제 우리의 양동이에 너무 많은 공. 96 00:05:26,850 --> 00:05:30,480 >> OK,하지만 어디서부터 우리의 공을 이동 하는가? 97 00:05:30,480 --> 00:05:33,150 글쎄, 우리가 먼저 필요 오른쪽으로 공을? 98 00:05:33,150 --> 00:05:39,130 그래서 모든에 대한 노드를 MALLOC하자 우리가 가지고있는 것을 새로운 단어. 99 00:05:39,130 --> 00:05:42,900 노드 * new_node의 등호 의 malloc (sizeof 연산자 (노드)). 100 00:05:42,900 --> 00:05:46,760 >> 우리는이 구조를 가지고 지금, 우리 함수를 사용하여 스캔 할 101 00:05:46,760 --> 00:05:51,850 fscanf, 우리의 파일에서 문자열, 경우 즉로, 사전 파일의 102 00:05:51,850 --> 00:05:55,780 new_node 화살표 단어, 어디 new_node 화살표 단어는 우리입니다 103 00:05:55,780 --> 00:05:58,110 그 단어의 대상. 104 00:05:58,110 --> 00:06:01,900 >> 다음으로, 우리는 해시 할 수 있습니다 해시 함수를 이용하여 단어. 105 00:06:01,900 --> 00:06:05,860 해시 함수는 문자열을 사용 및 인덱스를 반환합니다. 106 00:06:05,860 --> 00:06:09,760 이 경우, index가 마련되어 의 수보다 작아야 107 00:06:09,760 --> 00:06:11,440 당신이 양동이. 108 00:06:11,440 --> 00:06:14,600 >> 이제, 해시 함수, 당신은 시도 할 때 하나를 발견하고 다음 중 하나를 만들 수 있습니다 109 00:06:14,600 --> 00:06:17,890 자신의 기억 그들이 결정해야합니다. 110 00:06:17,890 --> 00:06:22,420 즉, 동일한 값이 필요한 것을 의미 같은 양동이에 모든 시간을 매핑 111 00:06:22,420 --> 00:06:23,800 당신은 그것을 해시있다. 112 00:06:23,800 --> 00:06:25,300 >> 그것은 종류의 라이브러리처럼. 113 00:06:25,300 --> 00:06:28,560 당신은에 따라 책을 가지고 갈 때 저자는, 당신이 알고있는 선반이해야 114 00:06:28,560 --> 00:06:31,890 이 선반 번호의 여부에 이동 하나, 둘, 또는 세. 115 00:06:31,890 --> 00:06:36,280 그리고 그 책은 항상 속할 선반 하나, 둘, 또는 세 하나. 116 00:06:36,280 --> 00:06:39,460 117 00:06:39,460 --> 00:06:43,810 >> 그래서, 만약 new_node 화살표 단어가 당신의 사전에서 단어, 다음 118 00:06:43,810 --> 00:06:47,770 해시 new_node 화살표 단어 것 우리의 인덱스를 제공 119 00:06:47,770 --> 00:06:49,370 해시 테이블의 버킷. 120 00:06:49,370 --> 00:06:54,040 그리고 우리는 그것으로 그 삽입합니다 로 표시된 특정 링크리스트 121 00:06:54,040 --> 00:06:56,060 우리의 해시 함수의 값을 반환합니다. 122 00:06:56,060 --> 00:06:59,070 >> 의는의 예를 살펴 보자 에 노드를 삽입 123 00:06:59,070 --> 00:07:01,750 연결리스트의 시작. 124 00:07:01,750 --> 00:07:06,930 헤드 나타내는 노드 포인터이면 링크의 시작 125 00:07:06,930 --> 00:07:12,420 목록 및 new_node는 새를 나타냅니다 당신은 단지에 입력 할 노드 126 00:07:12,420 --> 00:07:17,340 new_node 머리를 할당하는 잃을 것 리스트의 나머지 링크. 127 00:07:17,340 --> 00:07:19,330 그래서 우리는이 작업을 수행 할 수 없습니다. 128 00:07:19,330 --> 00:07:22,160 >> 오히려, 우리가 있는지 확인하려면 우리는 모든를 잡고 있음 129 00:07:22,160 --> 00:07:23,550 우리의 프로그램에서 단일 노드. 130 00:07:23,550 --> 00:07:29,560 그래서 실행 new_node 화살표 다음 등호 머리 다음 머리 new_node 동일 131 00:07:29,560 --> 00:07:34,470 모든 유지됩니다 링크 및 손실되지. 132 00:07:34,470 --> 00:07:39,330 >> 그러나 당신은 당신의 목록으로 무엇을하려는 경우 정렬 된 연결하는 데 있기 때문에, 우선 순위 133 00:07:39,330 --> 00:07:42,910 목록은 쉽게 될 수 있습니다 그것을 나중에 검색? 134 00:07:42,910 --> 00:07:46,020 음, 위해, 당신은 알아야합니다 어떻게 연결리스트를 탐색하는 방법. 135 00:07:46,020 --> 00:07:51,210 >> 연결리스트를 탐색하기 위해,가 보자 역할을하는 노드 포인터, 노드 * 136 00:07:51,210 --> 00:07:54,120 나타내는 커서, 어떤 당신은 시작에있어 노드 137 00:07:54,120 --> 00:07:55,460 첫 번째 요소. 138 00:07:55,460 --> 00:08:01,070 커서 때까지 반복하는 것은 우리가 할 수있는 null입니다 다음 특정 프로세스 및 수행 139 00:08:01,070 --> 00:08:04,330 우리가 필요로 할 때 커서를 이동 커서 화살표 값을 사용. 140 00:08:04,330 --> 00:08:08,820 >> 기억하십시오,이 같은 일이 역 참조, 스타 커서를 말 141 00:08:08,820 --> 00:08:13,480 다음 사용하여 커서를 도트 연산자 값입니다. 142 00:08:13,480 --> 00:08:19,000 따라서 할당함으로써 커서를 갱신한다 다음에 커서가 화살표로 커서. 143 00:08:19,000 --> 00:08:24,960 >> 당신은 D가있는지는 확인 말 C와 E는 노드를 삽입하려면 사이에, 144 00:08:24,960 --> 00:08:30,030 에 new_node의 D 지점이 다음에 커서입니다 노드 E,. 145 00:08:30,030 --> 00:08:36,409 그리고, C, 커서가 다음 가리킬 수 D. 그 방법, 당신은 목록을 유지한다. 146 00:08:36,409 --> 00:08:41,080 하여 링크를 분실하지 않도록주의 다음에 D 커서 화살표 이동 147 00:08:41,080 --> 00:08:43,929 바로. 148 00:08:43,929 --> 00:08:44,620 >> 괜찮아요. 149 00:08:44,620 --> 00:08:48,920 그래서, 당신이 노드를 삽입하는 방법입니다 이들로, 부하 단어를있는로드 150 00:08:48,920 --> 00:08:51,600 노드 및 그 삽입 당신의 해시 테이블에. 151 00:08:51,600 --> 00:08:53,580 그래서 지금의이 시도를 살펴 보자. 152 00:08:53,580 --> 00:08:58,540 >> 트라이에서, 모든 노드가 포함됩니다 노드 포인터, 모든 하나의 배열 153 00:08:58,540 --> 00:09:02,260 알파벳의 편지 플러스 아포스트로피. 154 00:09:02,260 --> 00:09:06,150 그리고 배열의 각 요소에 다른 노드를 가리 킵니다. 155 00:09:06,150 --> 00:09:10,130 해당 노드가 널 (null), 그 편지의 경우 다음 문자의 될 수 없습니다 156 00:09:10,130 --> 00:09:15,690 시퀀스의 모든 단어 때문에 모든 단어는 마지막의 여부를 나타냅니다 157 00:09:15,690 --> 00:09:18,160 단어 나하지의 문자. 158 00:09:18,160 --> 00:09:19,750 >> 의이 그림을 살펴 보자. 159 00:09:19,750 --> 00:09:22,260 희망을 가지 것 조금 더 명확합니다. 160 00:09:22,260 --> 00:09:27,210 이 그림에서 우리는 볼 만이 특정 문자와 특정 문자열 161 00:09:27,210 --> 00:09:28,190 밖으로 나와되고있다. 162 00:09:28,190 --> 00:09:32,500 그래서 당신은 어떤 경로를 따라 할 수 있습니다 그 경로는 모두에게 당신을 이끌 것입니다 163 00:09:32,500 --> 00:09:34,020 다른 단어. 164 00:09:34,020 --> 00:09:37,630 >> 그렇다면 우리는 C이 표시합니까? 165 00:09:37,630 --> 00:09:41,910 음, 모든 노드가 지금해야 할 것입니다 있는지 여부를 나타내는 부울 값 166 00:09:41,910 --> 00:09:46,580 그 노드의 끝 주어진 단어 나하지. 167 00:09:46,580 --> 00:09:50,690 그리고 또한 배열을드립니다 노드 자식이라고 포인터와 168 00:09:50,690 --> 00:09:53,440 그 중 27있을 것입니다. 169 00:09:53,440 --> 00:09:56,510 그리고 당신이 또한 원하는 것, 기억 첫 번째 노드를 추적. 170 00:09:56,510 --> 00:09:59,830 우리는 그 루트를 호출하는 것입니다. 171 00:09:59,830 --> 00:10:01,690 >> 그래서 트라이의 구조입니다. 172 00:10:01,690 --> 00:10:05,630 우리는 어떻게이 문제를 표시합니까 사전으로? 173 00:10:05,630 --> 00:10:09,890 음, 모든을 위해, 단어를로드 사전에 나오는 단어, 당신이 원하는거야 174 00:10:09,890 --> 00:10:11,960 트라이를 반복합니다. 175 00:10:11,960 --> 00:10:16,170 그리고 아이들의 각 요소 다른 문자에 해당합니다. 176 00:10:16,170 --> 00:10:21,660 >> 그래서 아이들을 값을 확인 내가 나타내는 인덱스 나, 177 00:10:21,660 --> 00:10:24,840 편지의 특정 인덱스가 당신은 삽입 할 노력 중입니다. 178 00:10:24,840 --> 00:10:28,980 음, 널 (null)의 경우에, 당신은 원하는 것 새 노드를 MALLOC와 아이들이 179 00:10:28,980 --> 00:10:31,110 그 노드를 가리 킵니다. 180 00:10:31,110 --> 00:10:35,630 >> null가 아닌 경우에, 그 것을 의미한다 주어진 지점, 즉 주어진 181 00:10:35,630 --> 00:10:37,350 문자열은 이미 존재합니다. 182 00:10:37,350 --> 00:10:40,160 그래서 당신은 단지로 이동합니다 새로운 노드를 계속합니다. 183 00:10:40,160 --> 00:10:43,220 당신은 단어의 끝 부분이 있다면 그 당신은에로드하려는 184 00:10:43,220 --> 00:10:48,120 사전에, 당신은 그것을 설정할 수 있습니다 true로에있어 현재 노드. 185 00:10:48,120 --> 00:10:51,550 >> 그럼 삽입의 예를 살펴 보자 에 단어 "여우"우리의 186 00:10:51,550 --> 00:10:53,070 사전. 187 00:10:53,070 --> 00:10:56,110 우리가 시작 척 빈 사전. 188 00:10:56,110 --> 00:11:01,610 첫 번째 편지, F는있는​​ 것 아이의 인덱스의 뿌리 다섯 189 00:11:01,610 --> 00:11:03,700 아이들의 배열입니다. 190 00:11:03,700 --> 00:11:05,430 그래서 우리는 그 안으로 삽입 191 00:11:05,430 --> 00:11:14,610 >> 문자 O는 아이들에있을 것입니다 그 후 F. 지수 (15), 그리고 X 192 00:11:14,610 --> 00:11:20,180 분기, 심지어 아래에있을 것입니다 O의 아이의 해제. 193 00:11:20,180 --> 00:11:24,120 그리고 X는 마지막 문자이기 때문이다 단어의 "여우"그때에 갈거야 194 00:11:24,120 --> 00:11:27,210 나타 내기 위해 그 녹색 색깔이 그것은 단어의 끝. 195 00:11:27,210 --> 00:11:32,880 C에서, 그인가요에게 설정 될 것입니다 말씀은 참 값을 부울입니다. 196 00:11:32,880 --> 00:11:36,780 >> 지금 만약에 당신이하고있는 다음 단어 에로드하면 단어 "foo는"인가? 197 00:11:36,780 --> 00:11:41,490 글쎄, 당신은 더 이상 MALLOC 할 필요가 없습니다 F 또는 O를위한 공간 때문에 198 00:11:41,490 --> 00:11:42,990 사람들은 이미 존재합니다. 199 00:11:42,990 --> 00:11:45,910 하지만 foo는의 마지막 O? 200 00:11:45,910 --> 00:11:47,320 그 하나는, 당신의 malloc해야합니다. 201 00:11:47,320 --> 00:11:52,390 설정, 그것을위한 새로운 노드를 만들 true로되어있는 Word 부울. 202 00:11:52,390 --> 00:11:57,340 >> 그래서 지금의 삽입하자 "개." 개는 것 뿌리의 인덱스 세 시작 203 00:11:57,340 --> 00:12:00,520 어린이, D가되지 않았기 때문에 아직 생성. 204 00:12:00,520 --> 00:12:04,990 그리고 우리는 비슷한 과정 등을 수행합니다 이전 문자열 개를 작성, 205 00:12:04,990 --> 00:12:10,400 여기서 G는 녹색 있기 때문에 색이야 그 단어의 끝. 206 00:12:10,400 --> 00:12:13,160 >> 이제, 우리는 "할"삽입 무엇을해야할까요? 207 00:12:13,160 --> 00:12:17,150 음,이 강아지의 문자열, 그래서 우리는 더 이상 MALLOC 할 필요가 없습니다. 208 00:12:17,150 --> 00:12:20,800 그러나 우리는 우리가했습니다 위치를 표시해야합니까 그 단어의 끝에 도달. 209 00:12:20,800 --> 00:12:24,020 그래서 O는 녹색으로 표시됩니다. 210 00:12:24,020 --> 00:12:27,810 하나 하나에 대해 그 과정을 계속 당신의 사전에있는 단어, 당신은했습니다 211 00:12:27,810 --> 00:12:32,120 도 당신에 그들을로드 테이블 또는 트라이 해시. 212 00:12:32,120 --> 00:12:37,530 >> speller.c을 위해 문자열을 전달합니다 이를 확인하기 위해 dictionary.c. 213 00:12:37,530 --> 00:12:41,140 이제, 확인 기능이 작동합니다 소문자 구분에서. 214 00:12:41,140 --> 00:12:45,980 즉, 즉, 대문자와 소문자 모두의 혼합 215 00:12:45,980 --> 00:12:50,670 모든 사실을 동일시한다 (있는 경우) 그 조합에 216 00:12:50,670 --> 00:12:51,880 사전. 217 00:12:51,880 --> 00:12:55,580 또한 문자열이 있다고 가정 할 수 있습니다 알파벳 만 포함 할 것 218 00:12:55,580 --> 00:12:58,200 문자 나 아포스트로피. 219 00:12:58,200 --> 00:13:02,490 >> 그래서 당신이 확인하는 방법을 살펴 보자 해시 테이블 구조. 220 00:13:02,490 --> 00:13:07,330 음, 단어가 존재하는 경우, 다음 해시 테이블에서 찾을 수있다. 221 00:13:07,330 --> 00:13:12,240 그래서 당신은 찾을 것을 시도 할 수있다 관련 양동이에 단어. 222 00:13:12,240 --> 00:13:14,480 >> 그래서 어떤 버킷 해당 단어가있는 것입니까? 223 00:13:14,480 --> 00:13:20,060 글쎄, 당신은 수, 해당 인덱스를 얻을 것 물통, 그 단어를 해시하여 224 00:13:20,060 --> 00:13:23,690 다음 링크 된 목록에서 검색, 전체를 통해 통과 225 00:13:23,690 --> 00:13:28,060 문자열을 사용하여 연결리스트, 기능을 비교합니다. 226 00:13:28,060 --> 00:13:31,940 >> 링크 된리스트의 끝이면 의미에 도달하는 커서 227 00:13:31,940 --> 00:13:36,030 널 (null)에 도달, 다음 단어는 아니다 사전에서 찾을 수 있습니다. 228 00:13:36,030 --> 00:13:39,090 그것은 다른 통에 수 없습니다. 229 00:13:39,090 --> 00:13:43,020 그래서 여기, 당신이하는 방법을 볼 수 있습니다 하나를 갖는 사이의 트레이드 오프가 될 230 00:13:43,020 --> 00:13:46,280 정렬 연결리스트 또는 정렬되지 않은 것. 231 00:13:46,280 --> 00:13:51,180 하나는 동안 더 많은 시간이 걸릴 것입니다 검사 중 시간을로드 이상. 232 00:13:51,180 --> 00:13:53,560 >> 어떻게에서 확인 할 수 트라이 구조? 233 00:13:53,560 --> 00:13:56,370 우리는 아래로 여행을거야 트라이에. 234 00:13:56,370 --> 00:14:00,390 입력 된 단어의 각 문자 우리는 확인하고 있는지, 우리는 그에게 갈거야 235 00:14:00,390 --> 00:14:03,280 아이들의 요소를 해당. 236 00:14:03,280 --> 00:14:07,770 >> 그 요소가 null의 경우, 그 수단 어떤 문자열이 없는지 237 00:14:07,770 --> 00:14:11,110 우리의 입력 단어를 포함, 그래서 단어의 철자가 잘못되었습니다. 238 00:14:11,110 --> 00:14:15,140 null가 아닌 경우에, 우리는로 이동할 수 있습니다 우리가하고있는 단어의 다음 문자 239 00:14:15,140 --> 00:14:18,850 이 과정을 확인하고 계속 우리가 끝에 도달 할 때까지 240 00:14:18,850 --> 00:14:20,350 입력 단어. 241 00:14:20,350 --> 00:14:23,330 그리고 우리는 확인할 수 있습니다 인가요 단어에 해당하는 경우. 242 00:14:23,330 --> 00:14:24,610 그것은 다음 큰 경우. 243 00:14:24,610 --> 00:14:25,590 말씀이 맞습니다. 244 00:14:25,590 --> 00:14:30,890 그러나 그렇지 않은 경우, 비록 그 문자열 트라이에 존재하는 단어입니다 245 00:14:30,890 --> 00:14:32,250 맞춤법이 틀린. 246 00:14:32,250 --> 00:14:36,590 >> 함수의 크기가 호출, 크기 단어의 수를 반환해야 함 247 00:14:36,590 --> 00:14:39,110 당신의 주어진 사전에 데이터 구조입니다. 248 00:14:39,110 --> 00:14:42,780 당신은 당신이 해시 테이블을 사용하는 경우 그래서 하나 하나를 통과 할 수 있습니다 249 00:14:42,780 --> 00:14:45,860 하나 하나의 연결리스트 버킷 수를 계산 250 00:14:45,860 --> 00:14:47,130 단어가 있습니다. 251 00:14:47,130 --> 00:14:49,940 당신이 트라이를 사용하는 경우, 당신은 할 수 모든 null 이외의 통과 252 00:14:49,940 --> 00:14:52,030 당신의 트라이의 경로입니다. 253 00:14:52,030 --> 00:14:56,420 아니면 사전을로드하는 동안 에, 어쩌면 당신은 어떻게 추적 할 수 있습니다 254 00:14:56,420 --> 00:14:58,760 당신이 안으로로드하는 많은 단어 255 00:14:58,760 --> 00:15:03,180 >> speller.c는 검사 완료되면 사전 대하여 텍스트 파일, 다음 256 00:15:03,180 --> 00:15:08,010 그것을 할 그리고 그것은 언로드를 호출 어디 당신의 직업이 무엇이든을 확보하는 것입니다 257 00:15:08,010 --> 00:15:09,500 당신은 malloc으로 할당 한 것을. 258 00:15:09,500 --> 00:15:14,420 그런 다음, 당신이 해시 테이블을 사용하는 경우 그래서 않도록 특히주의해야 259 00:15:14,420 --> 00:15:18,830 아무것도 해제하지 않음으로써 메모리 누수 중간에 모든 잡고 260 00:15:18,830 --> 00:15:20,780 당신은 무료로 전에 단일 링크. 261 00:15:20,780 --> 00:15:24,680 262 00:15:24,680 --> 00:15:30,100 >> 따라서 해시 테이블의 모든 요소에 대한 그리고 링크 된 목록의 모든 노드에 대해, 263 00:15:30,100 --> 00:15:32,370 해당 노드를 무료로 할 수 있습니다. 264 00:15:32,370 --> 00:15:34,970 당신은 어떻게 확보 가야합니까 연결리스트? 265 00:15:34,970 --> 00:15:38,570 노드 포인터 커서로 설정 상순 헤드 266 00:15:38,570 --> 00:15:43,100 연결리스트, 다음 커서 동안 null이 아닌, 당신은 임시을 설정할 수 있습니다 267 00:15:43,100 --> 00:15:45,610 커서를 노드 포인터. 268 00:15:45,610 --> 00:15:48,370 그런 다음 커서를 이동. 269 00:15:48,370 --> 00:15:52,950 그리고 당신은 일시적으로 확보 할 수 있습니다 값 동안 계속 들고 270 00:15:52,950 --> 00:15:55,650 그 후 모든 것을 제공합니다. 271 00:15:55,650 --> 00:15:57,800 >> 당신이 트라이를 사용하는 경우? 272 00:15:57,800 --> 00:16:00,410 그런 다음이 작업을 수행하는 가장 좋은 방법 매우에서 언로드 할 수 있습니다 273 00:16:00,410 --> 00:16:02,290 아래에서 위로. 274 00:16:02,290 --> 00:16:06,920 가능한 가장 낮은 여행으로 노드, 당신은 모든 포인터를 확보 할 수 있습니다 275 00:16:06,920 --> 00:16:11,430 그 다음 어린이 및 역 추적 위쪽으로, 모두의 모든 요소를​​ 자유롭게 276 00:16:11,430 --> 00:16:15,610 아이 배열의, 때까지 당신은 당신의 최고 루트 노드를 누르십시오. 277 00:16:15,610 --> 00:16:18,920 여기에 위치를 재귀 편리합니다. 278 00:16:18,920 --> 00:16:22,780 >> 당신이 아마 해제했는지 확인하려면 당신이 malloc으로 할당 한 모든 것을, 279 00:16:22,780 --> 00:16:24,400 당신은 Valgrind의를 사용할 수 있습니다. 280 00:16:24,400 --> 00:16:28,640 Valgrind의를 실행하면 프로그램이 실행됩니다 메모리의 바이트 수를 계산 281 00:16:28,640 --> 00:16:32,440 당신이 사용하고했는지 확인하는거야 말하고, 그들 모두를 해제 282 00:16:32,440 --> 00:16:34,530 당신이해야 할 수도 있습니다 곳 무료로 잊어. 283 00:16:34,530 --> 00:16:38,390 Valgrind의 당신을 알려줍니다 그래서 일단 그 실행 당신에게 다음 진행을 준다 284 00:16:38,390 --> 00:16:41,160 당신은 언로드를 완료했습니다. 285 00:16:41,160 --> 00:16:44,420 >> 자, 당신은 팁을 몇 가기 전에 오프 및 구현 시작하여 286 00:16:44,420 --> 00:16:46,260 사전. 287 00:16:46,260 --> 00:16:49,650 나는 작은 전달하는 것이 좋습니다 것 당신은 테스트하려는 경우 사전 288 00:16:49,650 --> 00:16:52,620 GDP와 함께 일하기 및 디버깅. 289 00:16:52,620 --> 00:16:58,550 철자의 사용입니다. / 철자, 선택적 사전, 다음 텍스트. 290 00:16:58,550 --> 00:17:01,550 >> 기본적으로에로드 큰 사전. 291 00:17:01,550 --> 00:17:06,670 그래서 당신은 작은에 통과 할 수 있습니다 사전, 또는 어쩌면 확인하여 292 00:17:06,670 --> 00:17:11,819 자신의 사용자 정의, 당신의 사전 당신의 텍스트 파일. 293 00:17:11,819 --> 00:17:15,950 >> 그리고 마지막으로, 나는 또한 권 해드립니다 펜과 종이를 가지고 그릴 294 00:17:15,950 --> 00:17:20,490 일하기 전, 중, 후의 당신은 당신의 모든 코드를 작성했습니다. 295 00:17:20,490 --> 00:17:24,170 그냥 당신이 가지고 있는지 확인 그 포인터는 바로. 296 00:17:24,170 --> 00:17:26,480 >> 나는 당신에게 행운을 기원합니다. 297 00:17:26,480 --> 00:17:29,690 그리고 설정이 완료되면, 당신은 좋아 한 경우 큰 보드에 도전합니다 298 00:17:29,690 --> 00:17:34,390 당신의 프로그램에 비해 얼마나 빨리 참조 반 친구들 '나는 격려 299 00:17:34,390 --> 00:17:35,960 당신은을 확인합니다. 300 00:17:35,960 --> 00:17:39,220 >> 그와 함께, 당신은 완료했습니다 철자의 PSET. 301 00:17:39,220 --> 00:17:41,800 내 이름은 Zamyla이며,이 CS50입니다. 302 00:17:41,800 --> 00:17:49,504