#52777974 · 25 May 2018, 15:55 · · პროფილი · პირადი მიმოწერა · ჩატი
მოკლედ დავუშვათ გვაქვს 2 array და გვინდა რომ დავაგენერირო n რაოდენობის უნიკალური, რენდომ კომბინაცია, ისე რომ არ დავაგენერიროთ ყველა შესაძლო ვარიანტი წინასწარ და შემდეგ რენდომზე არ ავირჩიოთ n რაოდენობის უნიკალური წევრები.
ანუ დავუშვათ მოცემულობაა: სახელის კონტეინერი arr1 შედგება 10,000 უნიკალური წევრისგან გვარის კონტეინერი arr2 შედგება 5,000 უნიკალური წევრისგან n = პარამეტრი თუ რამდენი კომბინაცია უნდა დაგვიბრუნოს ფუნქციამ
წესები: * წყობა უნდა იყოს შემდეგი: სახელი[i] + ' ' + გვარი[j]. ანუ საპირისპირო წყობის კომბინაციები არ გვაინტერესებს, შესაბამისად შესაძლო უნიკალური კომბინაციების ჯამი არის 10000 * 5000 = 50,000,000 * ფუნქციამ რაც შეიძლება ოპტიმალურად უნდა გამოიყენოს ოპერატიული მეხსიერება, ანუ ზედმეტი დატვირტვა memory-ზე არ გვაწყობს
რჩევები: * თუ n მეტი იქნება მაქსიმალურ შესაძლო კომბინაციებზე, თავისთავად უნდა დაბრუნდეს ყველა შესაძლო ვარიაცია. * დავუშვათ ფუნქცია ყოველ იტერაციაზე აგდებს random რიცხვს, შემდეგ რაიმე ფუნქციის/ლოგიკის/ალგორითმის საშუალებით ამ რენდომზე ამოვარდნილ რიცხვს გარკვეული კონდიციების გათვალისწინებით აკონვერტირებს პირველი და მეორე array-ს ინდექსებად. იმისთვის რომ ფუნქციის execution time შევამციროთ, როგორმე უნდა ავირიდოთ თავიდან რენდომში ისეთი რიცხვის ამოვარდნა (ან შემდგომში ამ რიცხვზე დაფუძნებით ინდექსებად კოვერტაციისას) რომელიც უკვე გამოყენებულია (ამის შანსი ყოველ დაგენერირებულ კომბინაციაზე იზრდება თავისთავად). მოკლედ გარკვეული ლოგიკა იქნება შესამუშავებელი რომელიც გაითვალისწინებს უკვე დაგენერირებული კობინაციების უნაკლურ ინდექსებს ... * თუ n მიახლოებულია ყველა შესაძლო კომბინაციის რაოდენობასთან უფრო მეტად ვიდრე დაშორებულია, უნდა გამოიყენოს საპირისპირო ლოგიკა მეტი ოპტიმიზაციისთვის.
მოკლედ მთელი ამ ფუნქციის დედააზრი არის ის რომ memory-ში არ გავუშვათ ხარახურა და CPU ხარჯზე on-fly შევადგინოთ უნიკალური რენდომ კომბინაციები
Javascr1pt, python-ში თუ დადებთ კოდს უკეთესი იქნება
--------------------
გარეჯი საქართველოა
|