1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN : 당신이 수있는 우선 발견에 대한 통지는 우리 이미 3 00:00:13,120 --> 00:00:14,520 코드는 우리를 위해 작성했습니다. 4 00:00:14,520 --> 00:00:16,219 이는 유통 코드라고합니다. 5 00:00:16,219 --> 00:00:19,060 그래서 우리는 우리 자신을 작성하지 않을 더 이상 처음부터 코드입니다. 6 00:00:19,060 --> 00:00:23,870 오히려, 우리는 빈 공간에 작성하고 일부 기존 코드. 7 00:00:23,870 --> 00:00:28,860 >> find.c 프로그램 번호를 입력하라는 메시지 건초 더미를 채우기 위해 검색 8 00:00:28,860 --> 00:00:33,260 사용자가 제출 haystack에서 needle, 그것은 종류를 호출하여이 작업을 수행 9 00:00:33,260 --> 00:00:36,660 검색, 기능 정의 helpers.c합니다. 10 00:00:36,660 --> 00:00:38,740 그래서 find.c 이미 기록됩니다. 11 00:00:38,740 --> 00:00:41,840 당신의 임무는 도우미를 작성하는 것입니다. 12 00:00:41,840 --> 00:00:42,940 >> 그래서 우리는 무엇을하고 있습니까? 13 00:00:42,940 --> 00:00:45,270 우리는 두 가지 기능을 구현하고 있습니다. 14 00:00:45,270 --> 00:00:50,110 true를 반환하는 검색의 경우 값 반환, 건초 더미에서 발견된다 15 00:00:50,110 --> 00:00:52,430 잘못된 값이있는 경우 하지 건초 더미에서. 16 00:00:52,430 --> 00:00:59,060 그리고 우리는 또한 정렬을 구현하고, 어떤 값이라는 배열을 정렬합니다. 17 00:00:59,060 --> 00:01:01,120 그래서 검색을 해결할 수 있습니다. 18 00:01:01,120 --> 00:01:04,550 >> 검색은 현재 구현 선형 검색으로. 19 00:01:04,550 --> 00:01:06,620 하지만 당신은 그보다 훨씬 더 할 수 있습니다. 20 00:01:06,620 --> 00:01:11,610 선형 검색은 N의 O로 구현 아주 느린 시간,하지만, 이것은 21 00:01:11,610 --> 00:01:14,920 그에게 주어진 모든 목록을 검색 할 수 있습니다. 22 00:01:14,920 --> 00:01:21,190 당신의 임무는 이진 검색을 구현​​하는 것입니다, 로그 n의 시간이 O를 실행하고있다한다. 23 00:01:21,190 --> 00:01:22,200 그건 꽤 빠르다. 24 00:01:22,200 --> 00:01:24,240 >> 그러나 규정이있다. 25 00:01:24,240 --> 00:01:28,910 이진 검색은 검색 할 수 있습니다 사전 정렬 된 목록을 통해. 26 00:01:28,910 --> 00:01:31,450 그 이유는 무엇입니까? 27 00:01:31,450 --> 00:01:33,690 음, 예를 살펴 보자. 28 00:01:33,690 --> 00:01:37,350 값의 배열을 지정해, 건초 더미, 우리가 찾고있을거야 29 00:01:37,350 --> 00:01:41,510 바늘과이에 예를 들어, 정수 3. 30 00:01:41,510 --> 00:01:45,220 >> 이진 검색이 작동하는 방식은 그 우리의 중간 값을 비교 31 00:01:45,220 --> 00:01:49,430 많은 같은 바늘로 배열하는 방법 우리는 중간에 전화 번호부를 열어 32 00:01:49,430 --> 00:01:51,720 주 0 페이지. 33 00:01:51,720 --> 00:01:55,710 그래서에 중간 값을 비교 한 후 바늘, 당신은 하나를 취소 할 수 있습니다 34 00:01:55,710 --> 00:01:59,620 왼쪽이나 배열의 우측 절반 당신의 경계를 조여. 35 00:01:59,620 --> 00:02:04,450 이 경우, 3 이후 우리 바늘이고, 10 이하, 중앙값, 36 00:02:04,450 --> 00:02:07,060 바로 바인딩은 줄일 수 있습니다. 37 00:02:07,060 --> 00:02:09,470 >> 하지만 당신의 경계를 만들기 위해 노력하고 가능한 한 단단한. 38 00:02:09,470 --> 00:02:12,690 중앙값은 바늘없는 경우 당신은 당신이 필요하지 않은 것을 알고 39 00:02:12,690 --> 00:02:14,070 검색에 포함. 40 00:02:14,070 --> 00:02:18,390 그래서 바인딩 권리는 조 수 조금도 더 많은 검색 범위, 41 00:02:18,390 --> 00:02:22,840 등 등, 때까지 당신은 당신의 바늘을 찾을 수 있습니다. 42 00:02:22,840 --> 00:02:24,580 >> 그래서 의사는 무엇을합니까 코드처럼? 43 00:02:24,580 --> 00:02:28,980 음, 우리는 아직까지보고있는 동안 목록 여전히이 44 00:02:28,980 --> 00:02:33,540 에서 볼 수있는 요소는, 우리는 중간을 목록과 그 비교 45 00:02:33,540 --> 00:02:36,020 우리의 바늘 중간 값. 46 00:02:36,020 --> 00:02:38,380 가 동일한 경우에, 그 다음 우리가했습니다 의미 바늘을 발견, 우리는 할 수있다 47 00:02:38,380 --> 00:02:40,160 true를 반환합니다. 48 00:02:40,160 --> 00:02:43,940 >> 그렇지 않으면, 바늘보다 작 으면 중간 값은, 그 다음 우리에게 의미 49 00:02:43,940 --> 00:02:48,350 다만 오른쪽 절반을 취소 할 수 있습니다 어레이의 왼쪽을 검색. 50 00:02:48,350 --> 00:02:51,860 그렇지 않으면, 우리는 검색합니다 배열의 오른쪽. 51 00:02:51,860 --> 00:02:55,470 그리고 마지막에, 경우에 당신은 어떤이 없습니다 더 많은 검색 왼쪽 요소가 있지만, 52 00:02:55,470 --> 00:02:58,030 아직 바늘을 발견하지 않았습니다, 당신은 false를 반환합니다. 53 00:02:58,030 --> 00:03:02,960 바늘 확실히 때문에 건초 더미에 있지 않습니다. 54 00:03:02,960 --> 00:03:06,200 >> 자,이 의사에 대한 하나의 깔끔한 것 이진 검색의 코드는이 수 55 00:03:06,200 --> 00:03:11,000 반복적 하나로서 해석 될 또는 재귀 구현. 56 00:03:11,000 --> 00:03:14,900 당신이 호출하면 그래서 재귀 것 검색 내에서 검색 기능 57 00:03:14,900 --> 00:03:18,400 배열의 어느 반에 작동합니다. 58 00:03:18,400 --> 00:03:20,750 우리는 재귀를 조금 다룰 것 이후 과정에서. 59 00:03:20,750 --> 00:03:23,210 그러나이 옵션임을 알 수 있습니까 당신이 시도하려는 경우. 60 00:03:23,210 --> 00:03:24,460