1-Masala. Nuqta bilan tugaydigan belgilar ketma-ketligi berilgan
Download 127.24 Kb.
|
Mirzashokirov Algoritm
Dasturning C#dagi matni:
using System; using System.Linq; class Program { static void Main() { double[] sonlar = { 1.2, 3.4, 5.6, 7.8 }; // haqiqiy sonlar uchun misol int n = sonlar.Length / 2; double min = sonlar[0] + sonlar[2 * n - 1]; for (int i = 1; i < n; i++) { double jami = sonlar[i] + sonlar[2 * n - 1 - i]; if (jami < min) { min = jami; } } Console.WriteLine(min); Console.ReadKey(); } } Natija: в) max ( min ( a1 , a2n ) , min ( a3 , a2n-2) , . . . , min ( a2n-1 , a2 ) ) . Algoritmi: 1. Tozalangan sonlarni sort qilamiz. - O(n*log(n)) vaqt talab qiladi. 2. Ikki xonali indeksli dan (a[1] va a[2]-ga) boshlab, o'rta indexcha xa xonali indexli (a[n-1] va a[n]-ga) qadar kamayish tartibida aynan yalpi yagona oraliqdan uzilgunga yarimix birlashgan minlarni hisoblaymiz va ulardan minimumni hisoblaymiz. - Har bir tartiblanadigan minimalar (yangiMassiv va yalpiMassivning siziga yarimix birlashgan versionlar) bo'yicha O(n/2) ta muvaffaqiyatli harakat talab qiladi. 3. Olchamli qaror qabul qilish orqali, max(n,n/2)-ta shartlar sizish yo'l qo'yadi. To'plamning eng katta qiymatini topish uchun, ikkita minimalar izlanishi kerak:
Step 2da, biz o'rta indexchani topish uchun ishlatilgan vaqtalarni jalb qiladigan amalga oshirilgan vaqtimizni boshqarishimiz mumkin. - O(n/2), ishlatilgan to'plamlarning soni bo'lgan martta. Shu sabablarga ko'ra, uchta qadamlik algoritmimiz quyidagina ko'rinishda bo'ladi: ```
Asosiy qiymatlarga yaqinroq kelishni kuzatishdan, ushbu kodega O(n*log(n)) tartibida ishlov beradigan sort() tizimidan boshqa amalga oshirilgan har qanday katta vaqt sarflamaydigan jarayonlar yo'q. Shuningdek, yuqorida ko'rib chiqdigan holda, eng katta tartiblanadigan muvaffaqiyatli harakatlargacha O(n/2) ni hisoblash talab qiladi. Shunga qaramay, umuman funksiyamiz O(n*log(n)) vaqt talab qiladi. Download 127.24 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling