Skip to main content

რეზერვუარის შერჩევა

Reservoir Sampling

ფოტო ყურადღებისთვის

        მაგალითად გვაქვს ამოცანა. გვსურს n ელემენტიან მიმდევრობაში (x0, x1, ... xn) ერთი ელემენტის შერჩევა შემთხვევითად, თანაბარი განაწილებით. როდესაც n-ის მნიშვნელობა ცნობილია ეს ამოცანა არის უმარტივესი. ჩვენ უბრალოდ შევარჩევთ ინდექსს j-ს 0-დან და n-მდე დიაპაზონში თანაბრად რაც ცალსახად მოგვცემს xj-ს ელემენტს მიმდევრობაში, რომლის შერჩევის ალბათობაც  იქნება 1/n. როგორ შეიძლება ეს ამოცანა ამოვხსნათ თუკი მიმდევრობაში ელემენტების რაოდენობა ცნობილი არ არის, თუკი ელემენტებს ვკითხულობთ როგორც ნაკადს და დროის ერთ მონაკვეთში მხოლოდ ერთ ელემენტზე გვაქვს წვდომა? ასეთ შემთხვევაში ცხადია მარტივი მეთოდი უკვე აღარ მუშაობს და პრობლემა სხვანაირად უნდა გადაიჭრას. 

        რეზერვუარის შერჩევა არის მეთოდი, რომელიც საშუალებას გვაძლებს შევარჩიოთ ელემენტი n ზომის ელემენტების ნაკადში სადაც n-ის მნიშვნელობა ცნობილი არ არის. მაგალითად შესაძლოა, რომ n ელემენტი მეხსიერებაში ერთად არ გვეტევა და ამისათვის ელემენტებს ნელ-ნელა ვტვირთავთ მეხსიერებაში ან უბრალოდ დროის მოცემული მომენტისათვის არაა ცნობილი ყველა ელემენტის მნიშვნელობა და ელემენტებს ვამუშავებთ მიმდევრობით, მას შემდეგ რაც მათი მნიშვნელობა ცნობილი ხდება. მაგალითად ჩვენ ვამუშავებთ ელემენტების მიმდევრობას თანმიმდევრულად და დროის ერთ მომენტში მხოლოდ ერთ ელემენტს ვხედავთ და გვინდა, რომ მას მერე რაც მთელ მიმდევრობას დავამუშავებთ ამოვარჩიოთ ერთი ელემენტი შემთხვევითად, თანაბარი განაწილებით(ამ პისტში სიმარტივისთვის მხოლოდ ერთ ელემენტიან რეზერვუარს განვიხილავთ). რაც იმას ნიშნავს რომ ალბათობა იმისა რომ ჩვენ შევარჩევთ ნებისმიერ ელემენტს xi-ს ნაკადში (x0, x1, ... xi, ...xn)  ყველა ელემენტისათვის უნდა იყოს თანაბარი და უდრიდეს 1/n-ს. ახლა განვიხილოთ მეთოდი დეტალურად:

        როგორც უკვე ვთქვით მეთოდი ამუშავებს ნაკადიდან შემოსუილ ელემენტებს მიმდევრობით, დროის ერთ მომენტში ერთს. ცალკე აქვს გამოყოფილი მეხსიერების ერთი უჯრედი(რომელსაც ვუწოდებთ რეზერვუარს) სადაც მიმდინარე შერჩეულ ელემენტს ინახავს და ყოველი ახალი ელემენტის დამუშავებისას ის ან ხელუხლებელს დატოვებს ამ ელემენტს რაც ჰქონდა შენახული ან ანაცვლებს მას ნაკადიდან შემოსული ახალი ელემენტით. მაგალიტად ჩვენ ვამუშავებთ (x0, x1, ... xi, ...xn) მიმდევრობის xi ელემენტს, ჩვენ 1/i ალბათობით უნდა ჩავანაცვლოთ რეზერვუარში არსებული ელემენტი xi ელემენტით. ეს მოგვცემს იმის გარანტიას, რომ ნაკადის ბოლოს რეზერვუარში არსებული ელემენტის შერჩევის ალბათობა იქნება 1/n. ადვილი წარმოსადგენი არ არის თუ რატომ არის ეს ასე ამიტომ ვცადოთ დავამტკიცოთ.

        xi ელემენტის დამუშავების პროცესში ალბათობა იმისა რომ ეს ელემენტი მოხვდება რეზერვუარში არის 1/i თუმცა თუ გვსურს რომ ის დარჩეს რეზერვურში ხელუხლებელი მაშინ ნაკადში მომავალმა ელემენტებმა ის არ უნდა ჩაანაცვლონ. xi ელემენტის შემგომ ნაკადში მოდის xi+1 ელემენტი და ალბათობა იმისა რომ ის ჩაანაცვლებს xi ელემენტს რეზერვუარში არის 1/(x+1), შესაბამისად ალბათობა იმისა რომ ვერ ჩაანაცვლებს და რეზერვუარში კვლავ xi ელემენტი დარჩება არის 1-1/(x+1). ასე გრძელდება ნაკადის ბოლომდე და გამოდის, რომ ალბათობა იმისა, რომ x ელემენტს შევარჩევთ და ნაკადის ბოლომდე მას ვერავინ ჩაანაცვლებს არის:

        როგორც ხედავთ საბოლოოდ მივიღეთ ისევ 1/n ალბათობა იმისა რომ xi ელემენტი იქნება შერჩეული ნაკადის ბოლოს რეზერვუარში და ეს რა თქმა უნდა სწორია ნებისმიერი i-თვის. მომავალში ასევე ვნახავთ რომ რეზერვუარის შერჩევის მეთოდი გამოსადეგია მაშინაც როცა დაინტერესებული ვართ არათანაბარი შერჩევით, როდესაც ნაკადის ელემენტების შერჩევა გვსურს მათზე მინიჭებული წონების მნიშვნელობების პროპორციულად. რეზერვუარის შერჩევის მეთოდი განსაკუთრებით პოპულარული გახდა კომპიუტერულ გრაფიკაში ბოლო დროს, სადაც რეალურ დროში მომუშავე რენდერერებში განათების დათვლის პროცესში აქტიურად გამოიყენება. ასე რომ რეზერვუარებზე კიდე გველოდება პოსტები. 



Comments

  1. მიხარია, რომ ბლოგი არ მიგიტოვებიათ. ქართულ ენაზე 3გ გრაფიკასთან დაკავშირებით მასალების პოვნა ძალიან რთულია, მით უმეტეს, პროფესიონალურ დონეზე. ძალიან ვაფასებ და კარგად მადგება თქვენი პოსტები, დიდი მადლობა!

    ReplyDelete
  2. მადლობა :) მიხარია თუ ვინმე კითხოლებს აქაურ ნაწერებს :)

    ReplyDelete

Post a Comment

Popular posts from this blog

CPU GPU და ჰიბრიდული რენდერერები

წყარო         დღემდე აქტუალურია თემა CPU რენდერერი ჯობია თუ GPU . იმისათვის რომ ამ კითხვას მეტნაკლებად ამომწურავი პასუხი გავცეთ განვიხილოთ რენდერერის სტრუქტურა და მოცემულ პლათფორმებზე იპმლემენტაციასთან დაკავშირებული პრობლემები. რენდერერი შედგება რამოდენიმე დიდი კომპონენტისგან როგორიცაა ხილვადობის ამოცანა შეფერადება ინტეგრატორები ფუნქციონალი ხილვადობის ამოცანა         ხილვადობის ამოცანა ერთერთი ყველაზე რთულია გამოთვლითი რესურსის კუთხით. გარდა იმისა, რომ სხივის გეომეტრიასთან თანაკვეთის დათვლას საკმაოდ დიდი დრო ჭირდება, ასევე საჭიროა ამაჩქარებელ სტრუქტურების განახლება კადრიდან კადრზე დინამიური სცენებისათვის. კარგი ისაა, რომ რენდერერის ეს ნაწილი საკმაოდ ადვილად ენკაპსულირებადია და შესაბამისად გვხვდება ბიბლიოთეკები მაგალითად embree(intel), fireRays(AMD), OptiX prime(nvidia), ... რომლებიც ამ ამოცანას საკმაოდ ეფექტურად ხსნიან და რენდერერებშიც მეტნაკლებად ადვილად ინტეგრირდებიან.  სხივების მიდევნების პროცესში ძალიან მნიშვნელოვანია მსგავსი გამოთვლების ლოკალიზება და არსებული SIMD

სინათლის ხილული სპექტრი და სხივის თვისებები

Visible Spectrum სურათზე ნაჩვენებია პრიზმაში გამავალი თეთრი სხივის სპექტრულად გაშლის პროცესი.         სინათლე წარმოადგენს ელექტრომაგნიტურ ტალღას, რომელსაც როგორც ყველა ელექტრომაგნიტურ ტალღას გააჩნია რამოდენიმე მნიშვნელოვანი მახასიათებელი. ერთერთი მნიშვნელოვანი მახასიათებელი არის ტალღის სიგრძე, რომელიც განსაზღვრავს სხივის სპექტრულ ფერს. ელექტრომაგნიტური ტალღები ბუნებაში და თანამედროვე სამყაროში მრავლად გვხვდები. სხვადასხვა ტალთის სიგრძის(სიხშირის) ტალღებს იყენებენ როგორც საყოფაცხოვრებო(რადიო, მობილური ტელეფონი) დანიშნულების, ასევე სამედიცინო(რენდგენის სხივები) და სამხედრო(რადარები) მოწყობილობებში. ადამიანის თვალისთვის ხილული სინათლის ელექტრომაგნიტური ტალღების ტალღის სიგრძე იწყება დაახლოებით 400 ნანომეტრიდან და მთავრდება 700 ნანომეტრზე. ამ დიაპაზონს ქვემოთ ექცევა ულტრაიისფერი ტალღები და დიაპაზონს ზემოთ ექცევა ინფრაწითელი, რომელსაც ადამიანის თვალი ვერ აღიქვამს(იხილეთ ქვემოთ მოცემული სურათი). სინათლის თეთრი სხივი შედგება სხვადასხვა სიხშირის ტალღების ერთობლიობისგან.        

ფერების RGB მოდელი

RGB Color Model         ფერების RGB მოდელი წარმოადგენს ისეთ მოდელს რომელშიც სამი ძრირითადი ფერის წითელი, მწვანე და ლურჯის საშუალებით მიიღება ფერების ფართო სპექტრი. მისი დასახელებაც მოდის სწორედ ძირითადი ფერების ინგლისური სახელწოდების ინიციალებიდან(Red, Green, Blue).         ფერთა სპექტრის ამდაგვარი წარმოდგენა დაკავშირებულია იმასთან, რომ გამოსახულების გამოტანის მოწყობილობებში რომელიც გააჩნიათ კომპიუტერებს, ტელევიზორებს ფერის მიღება ფიზიკურად ხდება სწორედ ამ სამი ძირითადი ფერის შეზავებით. დღესდღეობით ყველაზე გავრცელებული არის 24 ბიტიანი RGB მოდელი, სადაც თითოეულ კომპონენტს ეთმობა ერთი ბაიტი და შესაბამისად შეუძლია მიიღოს ნებისმიერი მნიშვნელობა [0, 255] დიაპაზონში, რაც საბოლოოდ გვაძლევს 16777216 განსხვავებულ ფერს.