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 პირიქით, ჩვენ შევსების voids ზოგიერთ წინასწარ არსებული კოდი. 7 00:00:23,870 --> 00:00:28,860 >> Find.c პროგრამა მოთხოვნა ნომრები შევსება haystack, ეძებს 8 00:00:28,860 --> 00:00:33,260 haystack განთავსების შესახებ წარმოდგენილი ნემსი, და ამას დარეკვით სახის და 9 00:00:33,260 --> 00:00:36,660 ძიების, განსაზღვრული ფუნქციების in 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 ძებნა, რომელიც ბრუნდება ნამდვილი თუ ღირებულება გვხვდება haystack, დაბრუნების 15 00:00:50,110 --> 00:00:52,430 ცრუ თუ ღირებულება არის არ haystack. 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 ხაზოვანი ძებნა ხორციელდება O of n დრო, რომელიც საკმაოდ ნელი, თუმცა 21 00:01:11,610 --> 00:01:14,920 შეგიძლიათ მოძებნოთ ნებისმიერი სია გადაეცა იგი. 22 00:01:14,920 --> 00:01:21,190 თქვენი სამუშაო განახორციელოს ორობითი ძებნა, რომელიც აწარმოებს დრო O of log n. 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 მოცემული მასივი ღირებულებები, haystack, ჩვენ ვაპირებთ იყოს ეძებს 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 გვერდი Week 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 არ არის ნაპოვნი თქვენი ნემსი არ არის, მაშინ დაბრუნების ცრუ. 53 00:02:58,030 --> 00:03:02,960 იმის გამო, რომ ნემსი აუცილებლად არ არის haystack. 54 00:03:02,960 --> 00:03:06,200 >> ახლა, ერთი neat რამ ამ ფსევდო კოდის ორობითი ძებნა არის ის, რომ 55 00:03:06,200 --> 00:03:11,000 უნდა განიმარტოს, როგორც iterative ან რეკურსიული განხორციელება. 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