1 00:00:00,000 --> 00:00:08,532 >> [음악 연주] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN : 당신이 수있는 우선 발견에 대한 통지는 우리 이미 3 00:00:12,060 --> 00:00:13,450 코드는 우리를 위해 작성했습니다. 4 00:00:13,450 --> 00:00:15,160 이는 유통 코드라고합니다. 5 00:00:15,160 --> 00:00:18,000 그래서 우리는 우리 자신을 작성하지 않을 더 이상 처음부터 코드입니다. 6 00:00:18,000 --> 00:00:22,800 오히려, 우리는 빈 공간에 작성하고 일부 기존 코드. 7 00:00:22,800 --> 00:00:27,790 >> find.c 프로그램 번호를 입력하라는 메시지 건초 더미를 채우기 위해 검색 8 00:00:27,790 --> 00:00:32,189 사용자가 제출 haystack에서 needle, 그것은 종류를 호출하여이 작업을 수행 9 00:00:32,189 --> 00:00:35,590 검색, 기능 정의 helpers.c합니다. 10 00:00:35,590 --> 00:00:37,670 그래서 find.c 이미 기록됩니다. 11 00:00:37,670 --> 00:00:40,770 당신의 임무는 도우미를 작성하는 것입니다. 12 00:00:40,770 --> 00:00:41,870 >> 그래서 우리는 무엇을하고 있습니까? 13 00:00:41,870 --> 00:00:44,210 우리는 두 가지 기능을 구현하고 있습니다. 14 00:00:44,210 --> 00:00:49,030 true를 반환하는 검색의 경우 값 반환, 건초 더미에서 발견된다 15 00:00:49,030 --> 00:00:51,370 잘못된 값이있는 경우 하지 건초 더미에서. 16 00:00:51,370 --> 00:00:57,990 그리고 우리는 또한 정렬을 구현하고 어떤 값이라는 배열을 정렬합니다. 17 00:00:57,990 --> 00:00:59,960 >> 그래서 검색을 해결할 수 있습니다. 18 00:00:59,960 --> 00:01:04,560 검색은 현재로서 구현 선형 검색,하지만 당신은 많은 작업을 수행 할 수 있습니다 19 00:01:04,560 --> 00:01:05,550 보다 더 나은. 20 00:01:05,550 --> 00:01:09,910 선형 검색은 O로 구현 N 시간으로, 이는 매우 느리다. 21 00:01:09,910 --> 00:01:13,850 하지만, 검색하여 그에게 주어진 모든 목록. 22 00:01:13,850 --> 00:01:20,130 당신의 임무는 이진 검색을 구현​​하는 것입니다, 로그 n의 시간이 O를 실행하고있다한다. 23 00:01:20,130 --> 00:01:21,130 그건 꽤 빠르다. 24 00:01:21,130 --> 00:01:23,170 >> 그러나 규정이있다. 25 00:01:23,170 --> 00:01:27,600 이진 검색은 검색 할 수 있습니다 사전 정렬 된 목록을 통해. 26 00:01:27,600 --> 00:01:30,370 그 이유는 무엇입니까? 27 00:01:30,370 --> 00:01:32,620 >> 음의 예를 살펴 보자. 28 00:01:32,620 --> 00:01:36,280 값의 배열을 지정해, 건초 더미, 우리가 찾고있을거야 29 00:01:36,280 --> 00:01:37,130 바늘. 30 00:01:37,130 --> 00:01:40,460 이 예에서, 정수 세. 31 00:01:40,460 --> 00:01:44,130 이진 검색이 작동하는 방식은 그 우리의 중간 값을 비교 32 00:01:44,130 --> 00:01:48,370 많은 같은 바늘로 배열하는 방법 우리는 중간에 전화 번호부를 열어 33 00:01:48,370 --> 00:01:50,660 주 제로의 페이지. 34 00:01:50,660 --> 00:01:54,650 >> 그래서에 중간 값을 비교 한 후 바늘, 당신은 하나를 취소 할 수 있습니다 35 00:01:54,650 --> 00:01:58,530 왼쪽이나 배열의 우측 절반 당신의 경계를 조여. 36 00:01:58,530 --> 00:02:03,390 이 경우, 세시기, 우리 바늘 10 이하, 중간 값이다 37 00:02:03,390 --> 00:02:05,990 바로 바인딩은 줄일 수 있습니다. 38 00:02:05,990 --> 00:02:08,400 하지만 당신의 경계를 만들기 위해 노력하고 가능한 한 단단한. 39 00:02:08,400 --> 00:02:11,630 중앙값은 바늘없는 경우 당신은 당신이 필요하지 않은 것을 알고 40 00:02:11,630 --> 00:02:13,010 검색에 포함. 41 00:02:13,010 --> 00:02:17,310 그래서 잘되어있어 조 수 조금도 더 많은 검색 범위, 42 00:02:17,310 --> 00:02:21,770 등 등까지 당신은 당신의 바늘을 찾을 수 있습니다. 43 00:02:21,770 --> 00:02:23,480 >> 그래서 의사가 보입니까? 44 00:02:23,480 --> 00:02:28,420 우리는 여전히를 찾고있는 동안 잘 목록 여전히에 요소가 45 00:02:28,420 --> 00:02:33,690 에서 보면, 우리는 목록의 중간을 하고 그 중간 값을 비교 46 00:02:33,690 --> 00:02:34,950 우리의 바늘. 47 00:02:34,950 --> 00:02:37,310 가 동일한 경우에, 그 다음 우리가했습니다 의미 바늘을 발견하고 우리가 할 수 48 00:02:37,310 --> 00:02:38,990 true를 반환합니다. 49 00:02:38,990 --> 00:02:42,870 >> 그렇지 않으면, 바늘보다 작 으면 중간 값은, 그 다음 우리에게 의미 50 00:02:42,870 --> 00:02:47,280 오른쪽 절반을 버리고, 그냥 할 수 있습니다 어레이의 왼쪽을 검색. 51 00:02:47,280 --> 00:02:51,090 그렇지 않으면, 우리는 검색합니다 배열의 오른쪽. 52 00:02:51,090 --> 00:02:54,410 그리고 마지막에, 경우에 당신은 어떤이 없습니다 더 많은 검색 왼쪽 요소가 있지만, 53 00:02:54,410 --> 00:02:58,050 당신은 아직 당신의 바늘을 발견하지 않았습니다 false를 반환하기 때문에 바늘 54 00:02:58,050 --> 00:03:01,890 확실히 건초 더미에 있지 않습니다. 55 00:03:01,890 --> 00:03:05,270 >> 이 의사에 대한 지금 깔끔한 것 이진 검색에있을 수 있다는 것입니다 56 00:03:05,270 --> 00:03:09,940 반복적 인 중 하나로 해석 또는 재귀 구현. 57 00:03:09,940 --> 00:03:13,810 당신이 호출하면 그래서 재귀 것 검색 내에서 검색 기능 58 00:03:13,810 --> 00:03:17,350 배열의 어느 반에 작동합니다. 59 00:03:17,350 --> 00:03:21,030 우리는 조금 나중에에서 재귀를 다룰 것 물론, 그러나임을 알지 60 00:03:21,030 --> 00:03:24,190 옵션 당신이 시도하고 싶은 경우. 61 00:03:24,190 --> 00:03:26,030 >> 이제 종류를 살펴 보자. 62 00:03:26,030 --> 00:03:30,750 배열을 정렬하고 정수 소요 배열의 크기 N,. 63 00:03:30,750 --> 00:03:34,030 지금은 여러 가지 종류가 있습니다 종류의, 당신은 몇 가지를 볼 수 있습니다 64 00:03:34,030 --> 00:03:36,370 데모와 설명을위한 반바지. 65 00:03:36,370 --> 00:03:39,580 반환 형식 우리의 정렬 기능은 무효입니다. 66 00:03:39,580 --> 00:03:43,580 그래서 우리는하지 않을거야 것을 의미합니다 종류에서 어떤 배열을 반환합니다. 67 00:03:43,580 --> 00:03:48,140 우리는 실제로 매우을 바꿀 것입니다 우리로 전달 된 배열입니다. 68 00:03:48,140 --> 00:03:52,290 >> 배열이 있기 때문에 그게 가능 우리는 지금 C. 참고로합니다 전달 69 00:03:52,290 --> 00:03:55,290 나중에 이것에 대해 더 많은 것을 볼 수 있지만, 통과 사이의 중요한 차이 70 00:03:55,290 --> 00:03:59,340 정수 및 전달과 같은 뭔가 배열에서, 그 때 71 00:03:59,340 --> 00:04:03,490 정수를 전달, C 단지 예정 그 정수의 복사본을 만들고 전달 72 00:04:03,490 --> 00:04:04,450 함수에. 73 00:04:04,450 --> 00:04:08,530 원래 변수는 변경되지 않습니다 함수가 완료되면. 74 00:04:08,530 --> 00:04:12,480 배열로, 한편, 그것의 정보 복사본을 만들려고, 당신은거야하지 75 00:04:12,480 --> 00:04:17,910 실제로 편집 할 수 매우 배열 자체. 76 00:04:17,910 --> 00:04:21,269 >> 그래서 종류의 한 종류입니다 선택 정렬. 77 00:04:21,269 --> 00:04:24,750 선택 정렬에서 시작하여 작동 당신이 반복하고 시작하고, 78 00:04:24,750 --> 00:04:26,820 에 가장 작은 요소를 찾을 수 있습니다. 79 00:04:26,820 --> 00:04:30,710 그리고 당신은 교환이 작은 첫 번째와 요소입니다. 80 00:04:30,710 --> 00:04:34,360 그리고 두 번째 요소로 이동 , 다음으로 작은에게 찾아 81 00:04:34,360 --> 00:04:38,320 다음 요소 및 교환이있는 배열의 두 번째 요소 때문에 82 00:04:38,320 --> 00:04:41,100 첫 번째 요소는 이미 정렬됩니다. 83 00:04:41,100 --> 00:04:45,370 그리고 당신은 모든 계속 최소를 식별하는 요소 84 00:04:45,370 --> 00:04:47,690 가치와 그것을 교환. 85 00:04:47,690 --> 00:04:53,460 >> I는 0, 최초의 요소에 해당 내용은 N - 1, 당신은 비교거야 86 00:04:53,460 --> 00:04:57,820 모든 다음 그 후 값 찾기 최소값의 인덱스. 87 00:04:57,820 --> 00:05:02,520 당신이 최소 값의 인덱스를 찾아 내면, 당신은 배열의 값을 바꿀 수 있습니다 88 00:05:02,520 --> 00:05:05,930 최소 배열 I. 89 00:05:05,930 --> 00:05:09,760 >> 종류의 또 다른 유형의 당신이 할 수 구현은 거품의 일종이다. 90 00:05:09,760 --> 00:05:14,380 목록에 따라서 버블 정렬을 반복 인접 요소와 비교 91 00:05:14,380 --> 00:05:17,720 엘리먼트를 교환하는 잘못된 순서로되어 있습니다. 92 00:05:17,720 --> 00:05:22,380 그리고이 방법의 가장 큰 요소 거품이 끝까지 것이다. 93 00:05:22,380 --> 00:05:28,070 그리고 목록은 한 번 더 이상 분류되지 않습니다 요소가 교체되었습니다. 94 00:05:28,070 --> 00:05:31,920 >> 그래서 사람들은 종류의 두 가지 예 당신이 구현할 수있는 알고리즘 95 00:05:31,920 --> 00:05:33,230 찾기 프로그램. 96 00:05:33,230 --> 00:05:37,350 당신은 종류 완료, 당신은 일단 검색을 수행하면 완성입니다. 97 00:05:37,350 --> 00:05:39,720 내 이름은 Zamyla이며,이 CS50입니다. 98 00:05:39,720 --> 00:05:46,987 >> [음악 연주]