კითხვა არის სივრცე
ყველა კითხვა ხატავს სივრცეს
კითხვა არა მხოლოდ ერთ რამეს ითხოვს. ის ხსნის შესაძლო პასუხების სივრცეს, და ყველა კანდიდატი პასუხი ამ სივრცეში სადღაც წერტილია.
„აირჩიე ადგილი საჭმელად“ ხსნის უზარმაზარ სივრცეს: დედამიწაზე არსებული ყველა რესტორანი, კაფე, საჭმლის ურმა და სამზარეულო. „აირჩიე ვეგეტარიანული ადგილი სასეირულო მანძილზე, რომელიც ახლა ღიაა და თხუთმეტ დოლარამდე ღირს“ კი ხსნის მცირე სივრცეს: შესაძლოა სულ სამი წერტილი.
იგივე განზრახვა, რადიკალურად განსხვავებული გეომეტრია. მეორე კითხვამ რეალური სამუშაო შეასრულა: მან შეამცირა სივრცე სანამ ვინმე საძებნად დაიწყებდა.
ეს არის მთელი გაკვეთილი ერთ წინადადებაში: კარგი კითხვა ისეთია, რომელიც პასუხის სივრცეს ამცირებს იმ რეგიონამდე, რომლის ძებნაც ღირს. ბუნდოვანი კითხვა ტოვებს უზარმაზარ სივრცეს და აიძულებს ნელი, უსისტემო ძებნას. მკვეთრი კითხვა კი გაძლევს პატარა სივრცეს, რომელიც ერთი მზერით შეგიძლია გადახედო.
ჩვენ ამას ზუსტად განვსაზღვრავთ გეომეტრიის ოთხი ელემენტით: სივრცის დაყოფა, მისი შეზღუდვებით მოჭრა და კარგად არჩეული დიახ/არა კითხვებით განახევრება.
ფართო თუ ვიწრო
განიხილეთ პროგრამის გამართვაში დახმარების თხოვნის ორი გზა:
- Q1: „რატომ არ მუშაობს ჩემი კოდი?“
- Q2: „რატომ ბეჭდავს ეს მარყუჟი 9 ელემენტს, როცა სია 10-ს შეიცავს, Python 3.12-ზე?“
სივრცის რეგიონებად დაყოფა
დიდი კითხვის რეგიონებად დაშლა
როდესაც სივრცე ძალიან დიდია პირდაპირ მოსაძებნად, თქვენ აყოფთ მას: ყოფთ არამომიჯნავე რეგიონებად, რომლებიც ერთად მოიცავენ მთელ სივრცეს. ქვეკითხვაზე პასუხის გაცემა ნიშნავს ერთი რეგიონის არჩევას და დანარჩენის იგნორირებას.
ვთქვათ, კითხვაა „რატომ შემცირდა შემოსავალი გასულ კვარტალში?“ პასუხის სივრცე უზარმაზარია. დაყავით იგი: (ა) ნაკლები კლიენტები, (ბ) იგივე კლიენტები ნაკლებს ხარჯავენ, (გ) ფასწარმოქმნის ან ბილინგის ცვლილება, (დ) მონაცემების შეცდომა. ეს ოთხი რეგიონი სრულად ფარავს სივრცეს და არ გადაფარავს ერთმანეთს. თითოეული მათგანი უფრო მცირე კითხვაა, რომელსაც შეგიძლიათ დამოუკიდებლად შეუდგეთ.
კარგი დაყოფა ორ თვისებას ისესხებს პირდაპირ გეომეტრიიდან: რეგიონები ფარავს მთელ სივრცეს (არაფერი არ არის გამოტოვებული) და ისინი ურთიერთგამომრიცხავია (არაფერი არ ითვლება ორჯერ). თუ სივრცის ნაწილს გამოტოვებ, რეალური პასუხი შეიძლება დამალოს ამ ხარვეზში. თუ რეგიონები გადაფარავს ერთმანეთს, ფუჭად ხარჯავ დროს, რადგან ერთსა და იმავე ადგილს ორჯერ ეძებ.
თითოეული ქვეკითხვა გიწევს ერთ კონკრეტულ რეგიონში. როცა პასუხობ, სრულიად გ выбрасываешь ყველაფერს, რაც ამ რეგიონის მიღმაა: ეს არის დიდი და იაფი შემცირება საძიებო სივრცის.
სუფთა დაყოფა
ქალაქი იკითხავს: „რატომ იზრდება საგანგებო სიტუაციებზე რეაგირების დრო?“
ანალიტიკოსი გვთავაზობს დაყოფას: (ა) ზარის ეკიპაჟამდე მიღწევას უფრო მეტი დრო სჭირდება, (ბ) ეკიპაჟს უფრო მეტი დრო სჭირდება მისვლამდე გამოძახების შემდეგ, და (გ) ეკიპაჟს უფრო მეტი დრო სჭირდება დავალების დასრულებასა და გათავისუფლებამდე.
თითოეული მოთხოვნა ჭრის სივრცეს
შეზღუდვები როგორც ნახევარ-სიბრტყეები
წარმოიდგინეთ პასუხის სივრცე როგორც ბრტყელი სიბრტყე, სადაც ყველა წერტილი არის კანდიდატი პასუხი. შეზღუდვა არის მოთხოვნა, და თითოეული მოთხოვნა გადაჭრის ხაზს სიბრტყეზე და ტოვებს მხოლოდ ერთ მხარეს. გეომეტრიაში ამ შენახულ მხარეს ეწოდება ნახევარ-სიბრტყე.
„თხუთმეტ დოლარამდე“ ერთი ხაზია; შევინარჩუნოთ იაფი მხარე. „სასეირნო მანძილზე“ მეორე ხაზია; შევინარჩუნოთ ახლო მხარე. „ახლა ღიაა“ მესამე. ყველა ახალი მოთხოვნა, რომელსაც დაამატებ, კიდევ ერთი ჭრაა.
პასუხი, რომელიც ყველა მოთხოვნას აკმაყოფილებს, ცხოვრობს ყველა შენახული მხარის კვეთაში. საკმარისი ნახევარ-სიბრტყის კვეთა და თქვენ მიიღებთ პატარა შეზღუდულ რეგიონს: მოწესრიგებულ მონაკვეთს, რომლის შიგნითაც არის ერთადერთი სწორი პასუხი.
ორი წარუმატებლობის რეჟიმი
ნაკლებად შეზღუდული (მცირე რაოდენობის ჭრები): რეგიონი რჩება უსაზღვრო. ის მიდის უსასრულობამდე, ამიტომ უსასრულოდ ბევრი ბუნდოვანი პასუხი „ჯდება“. „მომეცი კარგი იდეა“ უსაზღვროა. თქვენ იღებთ ხმაურს, რადგან არაფერია ამოღებული.
ზედმეტად შეზღუდული (ძალიან ბევრი ან წინააღმდეგობრივი ჭრები): რეგიონი ხდება ცარიელი. ნახევარსიბრტყეებს საერთო წერტილი არ აქვთ, ამიტომ არც ერთი პასუხი არ ჯდება. „რიცხვი, რომელიც ერთდროულად ლუწიცაა და კენტიც“ სივრცეს სრულიად ცარიელს ტოვებს.
კარგად ჩამოყალიბებული კითხვა ამ ორს შორისაა: საკმარისი შეზღუდვები რეგიონის შესაზღუდად, მაგრამ არა იმდენი, რომ წინააღმდეგობაში მოვიდეს და გააცარიელოს.
შეზღუდული, უსაზღვრო, ცარიელი
მმართველი დიზაინერს სთხოვს „ლოგოს“. მოგვიანებით კი სთხოვს „ლოგოს, რომელიც ერთი ასოა, ერთი ფერის, მუშაობს 16 პიქსელზე, და ამავდროულად იყენებს სულ მცირე ოთხ ფერს.“
საუკეთესო კვეთა სივრცეს ორ ნაწილად ყოფს
ბინარული ძებნა: ყველა დიახ/არა სივრცეს ორჯერ ყოფს
ზოგიერთი კითხვა არის დიახ/არა ტიპის. გეომეტრიულად, დიახ/არა კითხვა ასახავს ერთ ხაზს და გეუბნება, რომ პასუხი რომელ მხარესაა: ერთი მოძრაობით მთელ რეგიონს აგდებს.
საუკეთესო დიახ/არა კითხვა ის არის, რომელიც სივრცეს ორ თანაბარ ნახევრად ყოფს, რადგან მაშინ, რომელიღაც პასუხიც რომ მიიღო, ზუსტად ნახევარს ამოაგდებ იმედან, რაც დარჩენილი იყო. ჰკითხე „ტოპ ნახევარშია?“ განმეორებით და სივრცე გეომეტრიული სისწრაფით იკუმშება.
ეს არის ბინარული ძებნა. იწყებ N კანდიდატით. ერთი კარგი კითხვის შემდეგ რჩება N/2. ორის შემდეგ — N/4. k კითხვის შემდეგ — N / 2^k. თამაში მაშინ სრულდება, როცა ერთი კანდიდატი რჩება, ამიტომ გჭირდება უმცირესი k, რომ 2^k მაინც მეტი ან ტოლი იყოს N-ზე.
ეს უმცირესი k არის log2(N)-ის ჭერი. ათასი კანდიდატისთვის: 2^9 = 512 (არ კმარა) და 2^10 = 1024 (კმარა), ამიტომ log2(1000) დაახლოებით 9.97-ია და გჭირდება 10 კითხვა. მილიარდი კანდიდატი? log2(მილიარდი) დაახლოებით 30-ია. ორჯერ გაყოფა იმდენად ძლიერია, რომ ათასიდან მილიარდამდე მისვლას მხოლოდ დაახლოებით ოცი დამატებითი კითხვა სჭირდება.
გაკვეთილი კითხვის დასმისთვის: მახვილი დიახ/არა კითხვა ყველაზე ღირებულია მაშინ, როცა დარჩენილ სივრცეს თანაბრად ყოფს. დისბალანსირებული კითხვა, რომელიც მხოლოდ პატარა ნაწილს გამორიცხავს, კარგავს შემობრუნებას.
პოვნის გარანტია
თამაშობ გამოცნობის თამაშს. ვიღაც ირჩევს მთელ რიცხვს 1-დან 1000-მდე. შეგიძლია დაუსვა მხოლოდ დიახ/არა კითხვები და თამაშობ ოპტიმალურად (თითოეული კითხვა დარჩენილ კანდიდატებს по შესაძლებლობას თანაბრად ყოფს).
როცა პასუხები იაფია, ჭრები ძვირფასია
კითხვა ახლა თავად სამუშაოა
შეაერთე ოთხი ნაწილი ერთმანეთთან. კითხვა ხსნის სივრცეს. დაშლა ანაწილებს მას. შეზღუდვები ჭრის მას შეზღუდულ შესაძლებელ არეში. კარგი დიახ/არა კითხვები ორჯერ ამცირებს მას. ამ ყველაფრისგან თითოეული არის ძებნის შემცირების აქტი, სანამ პასუხს ეძებ.
ისტორიის უმეტესი ნაწილის განმავლობაში პასუხი იყო ძვირი ნაწილი. იხდიდი ექსპერტს, ატარებდი ექსპერიმენტს, თხრიდი არქივში. ამიტომ ჩვენ ვაფასებდით იმ ადამიანებს, რომლებსაც პასუხების გამომუშავება შეეძლოთ.
ეს ბალანსი შეიცვალა. ავტომატური სისტემები ახლა ათასობით სავსებით დამაჯერებელ პასუხს ქმნიან, თითქმის უფასოდ. როდესაც პასუხები იაფი და უხვია, კიდევ ერთის წარმოება აღარ წარმოადგენს რაიმე მიღწევას. იშვიათობად რჩება იმის ცოდნა, რომელი პასუხი ღირს ყურადღების: და ეს არის კითხვის დასმის უნარი, და არა პასუხის გენერირების.
გეომეტრიაში: მანქანა სიამოვნებით მოგცემთ სივრცის ნებისმიერ წერტილს. თქვენი დამატებული ღირებულებაა იმ შეზღუდვების დახატვა, რომლებიც სივრცეს შეამცირებენ ერთ-ერთ რეგიონამდე, სადაც კარგი პასუხი უნდა იყოს. თუ ძალიან ცოტას შეზღუდავთ — დაიხრჩობით დამაჯერებელი ხმაურის უსასრულო ნაკადში (უსაზღვრო რეგიონი). თუ ზედმეტად შეზღუდავთ — არაფერს არ მიიღებთ (ცარიელი რეგიონი). სწორედ იმ ზომის შეზღუდვების დასმა, რომელიც რეგიონს ზუსტად სწორ ზომამდე ზღუდავს, არის იშვიათი, ადამიანური უნარი.
ამიტომ ლევერიჯი არ არის „პასუხის მიღება“. ის არის „იმ შეზღუდვების დასმა, რომლებიც პასუხების სივრცეს საკმარისად პატარას გახდის, რომ მასში არსებული ნებისმიერი წერტილი ღირს ყურადღების“.
სად გადავიდა ღირებულება
ანალიტიკოსს ახლა შეუძლია წუთებში თითქმის უფასოდ გენერირება ასობით პროექტის სტრატეგიის.
კითხვების გეომეტრია: შეჯამება
რა ისწავლეთ
კითხვა არ არის ერთი პასუხის მოთხოვნა. ეს არის შესაძლო პასუხების სივრცე, და კითხვის დასმის ხელოვნება არის ამ სივრცის შემცირების ხელოვნება:
- ძებნის სივრცე: ყველა კითხვა ხსნის კანდიდატი პასუხების ერთობლიობას. მახვილი კითხვა ხსნის მცირე ერთობლიობას; ბუნდოვანი კითხვა ხსნის უზარმაზარ სივრცეს, რომელშიც უნდა იხეტიალო.
- დაშლა როგორც დაყოფა: დიდი სივრცის დაყოფა რეგიონებად, რომლებიც მას სრულად ფარავენ გადაფარვის გარეშე; თითოეული ქვეკითხვა გიწევს ერთ-ერთ რეგიონში.
- შეზღუდვები როგორც საზღვრები: თითოეული მოთხოვნა არის ნახევარსიბრტყე; პასუხი მათ გადაკვეთაში ცხოვრობს. ძალიან ცოტა გაჭრა ტოვებს უსაზღვრო რეგიონს (უსასრულოდ ბუნდოვანი პასუხები); წინააღმდეგობრივი გაჭრები ტოვებს ცარიელ რეგიონს (არაფერი ერგება).
- შუაზე შეკუმშვა: კარგად არჩეული დიახ/არა კითხვა სივრცეს ორ ნაწილად ყოფს. რიცხვის 1-დან 1000-მდე დიაპაზონში მოსაძებნად საჭიროა ceil(log2(1000)) = 10 კითხვა; მილიარდისთვის კი მხოლოდ დაახლოებით 30.
და მთავარი სარგებელი: როდესაც ავტომატიზებული სისტემები პასუხებს იაფს ხდის, დეფიციტური უნარი აღარ არის პასუხების გენერირება, არამედ ისეთი შეზღუდვების დაწესება, რომლებიც სივრცეს ამცირებს 딱 იმ ერთ რეგიონამდე, რომელიც ღირს. ისწავლეთ ამ „ჭრილების“ გავლება, და თქვენ უზარმაზარ, დაბნეულ ძებნას მოკლე და მიზანმიმართულ ძებნად აქცევთ.