Oriyentatsiya funksiyasi. Grexem algoritmi. Ajrat va hukmron bo`l algoritmi
O`zbekist on Respublikasi Oliy va o`rta maxsus ta’lim vazirligi Sharof Rashidov nomidagi Samarqand Davlat Universiteti Matematika fakul’teti “ Amaliy matematika “ yo`nalishi KURS ISHI Mavzu: “Oriyentatsiya funksiyasi. Grexem algoritmi. Ajrat va hukmron bo`l algoritmi” Samarqand -2023
Kirish Algoritm tushunchasi zamonaviy matematika va informatikaning asosiy tushunchalaridan biri hisoblanadi. Algoritm termini o’rta asrlar ulug’ matematigi al- Xorazmiy nomidan kelib chiqqan. XX asrning 30-yiligacha algoritm tushunchasi ko’proq matematik ma’no emas, balki metodologik ma’noni kasb etar edi. Algoritm deganda, u yoki bu masalalar sinfini yechish imkonini beruvchi aniq ifodalangan chekli qoidalar majmui tushunilgan. EHM larning paydo bo’lishi bilan algoritm tushunchasi yanada keng tarqaldi. EHM va dasturlash usullarining rivojlanishi algoritmlarni ishlab chiqish avtomatlashtirishdagi zaruriy bosqich ekanligini tushunishga yordam berdi. EHM larning paydo bo’lishi algoritmlar nazariyasining rivojlanishiga olib keldi. Algoritmlarni tuzish – bu ijodiy ish bo’lib, ixtiyoriy zaruriy algoritmni tuzish uchun umumiy usullar mavjud emas, kishining ijodiy qobiliyatiga bog’liq. Albatta, algoritmni aniq sxema bo’yicha tuzish zarur bo’lib qoladigan sodda hollar ham mavjud. Bunday hollarda yechilish algoritmiavval biron kim tomonidan olingan masalalarni misol keltirish mumkin. Masalan, differensial tenglamalarni sonli integrallash uchun Eyler metodi. Bu metod masalani yechish uchun umumiy holda ifodalangan algoritmdir, lekin algoritmlash ijodiy ekanligini quyidagi algoritmlar nazariyasining ba’zi bir ma’lumotlaridan ko’rish mumkin. Agar bizdan biror algoritmni ishlab chiqish talab qilinsa, dastlab izlanayotgan algoritmni tuzish mumkinmi yo’qmi degan savolga javob izlash kerak. Chunki ba’zi hollarda algoritmni tuzish mumkin emasligini ko’rsatib berish mumkin. Ba’zi bir hollarda algoritmni tuzish mumkinligi isbotlanadi. Bunday isbot mavjud bo’lganligi bilan tuzilgan algoritmni amalgam oshirib bo’lmaydi yoki uning samaradorligi talabga javob bermaydi. Shunga qaramasdan bir nechta algoritmlar bitta amaliyotga qo’llanilayotganini topish mumkin. Boshqa hollarda algoritmni tuzish mumkinligini ham, mumkin emasligini ham isbotlab bo’lmaydi. U vaqtda algoritm tuzish jarayonida boshqa predmet sohalaridan qurilgan algoritmlardan foydalanish mumkin. Algoritmlar sifatini baholash uchun mezonlarni ko’raylik. Mavjud mezonlar juda tahminlashgan. Masalan, algoritmni bajarishda bajaruvchining xotira uskunalari hajmi yetarli bo’lmasa, u algoritm yomon deb hisoblanadi. Boshqa mezon sifatida algoritmning bajarilishi uchun talab qilinadigan vaqtni ko’rsatish mumkin. Vaqtni baholash bajaruvchining fizik xarakteristikalari hisobga olinishi kerak. Chunki har bir operatsiya har xil o’zgaruvchilar bilan bajarilganda vaqt ham har xil bo’ladi. Bunchalik aniq ma’lumotni har bir foydalanuvchi uchun yig’ib bo’lmaganligi sababli
odatda o’rtacha tezkorlik qabul qilinadi. Ketma-ket bajarilayotgan operatsiyalar sonini aniqlab, uni o’rtacha tezkorlikka ko’paytirsa, algoritm bajarilishining amalga yaqin bo’lgan vaqtini topishimiz mumkin. Faraz qilaylik, 2 ta tahlil qilingan algoritmlardan bittasining bajarilish vaqti tezroq bo’ladi, uni xotira ishlash hajmi bo’yicha ham tahlil qilish kerak va bunday tahlillar murakkab nazariyasiga mansub bo’ladi. Shunday qilib, algoritmlar nazariyasi fani masalalarni yechishga mo’ljallangan algoritmlarni samaradorligini va murakkabligini tahlil qilish, o’zgartirish, qo’shimcha qilish va qayta ishlash natijasida yahshilash usul va uslublarini o’rganadi. Oriyentatsiya funksiyasi Oriyentatsiya - klassik holatda, ma’lum ma’noda bir-biri bilan bog’langan koordinata tizimlarining bir sinfini tanlashdir. Har bir tizim qaysi sinfga tegishli ekanligini aniqlash orqali yo’nalishni belgilaydi. Funktsional orientatsiya nima Bir xil vakolatlarni boshqa xususiyatga ega bo'lgan vakolatlardan ajratish nuqtai nazaridan kuchaytirish g'oyasiga ergashadigan tashkiliy tamoyil (masalan, dasturiy ta'minotni sinovdan o'tkazishdan dasturiy ta'minot tahlili). Boshlang’ich matematikada yo’nalish ko’pincha “soat yo’nalishi bo’yicha va teskari yo’nalishlar” tushunchasi orqali tavsiflanadi. Yo’nalish faqat ba’zi maxsus bo’shliq sinflari uchun belgilanadi. Uchta tartiblangan nuqtalarning yo'nalishi uchta nuqtani ma'lum bir bo'shliqqa joylashtirishning turli usullarini anglatadi. Berilgan uchta nuqtani shunday joylashtirish mumkinki, ularni birlashtirganimizda ular uchburchak yoki to'g'ri chiziq hosil qiladi. Avvalgi holat ikkita yo'nalishga ega, ya'ni soat yo'nalishi bo'yicha va soat yo'nalishiga qarshi. Ushbu turli yo'nalishlar quyida tasvirlangan. Keyingi muhim savol-berilgan uchta nuqtaning yo'nalishini qanday topamiz? Keling, uchta tartiblangan nuqtalarning yo'nalishini qanday hisoblashni tushunishga harakat qilaylik. Yuqoridagi in=mageda bizda 3 ta tartiblangan nuqta bor. Chiziq segmentining qiyaligi (a,b) : th = (yb - ya)/(xb - xa) Chiziq segmentining qiyaligi (b,c) : ph = (yc - yb)/(xc - xb) Orientatsiya (yb - ya)(xc - xb) - (yc - yb)(xb) ifoda natijasiga bog'liq. - xa) ya'ni musbat, manfiy yoki nol. Agar natija nolga teng bo'lsa, u holda th = ph. Demak, orientatsiya kollineardir.
Agar natija salbiy bo'lsa, u holda th < ph. Shuning uchun yo'nalish soat miliga teskari. Agar natija ijobiy bo'lsa, u holda th > ph. Shuning uchun yo'nalish soat yo'nalishi bo'yicha. C++ Amalga oshirish C++ dasturini amalga oshirishda biz strukturadan foydalanamiz. Tuzilmalar va sinflar funktsional jihatdan bir xil bo'lsa ham, bu erda strukturani ishlatishimizning sababi shundaki, biz C++ da oddiy ma'lumotlar uchun strukturadan foydalanamiz, chunki strukturaning ma'lumotlar a'zolari sukut bo'yicha umumiy foydalanish rejimida. Va sinflar shaxsiy yoki himoyalangan ma'lumotlar a'zolari kabi xususiyatlardan foydalanganda foydalaniladi. Sinf a'zolari C++ da sukut bo'yicha shaxsiy foydalanish rejimiga ega. Biz asosiy funktsiyadagi nuqtalarni e'lon qilayotganimiz va ular o'z navbatida yo'nalishda () ishlatilganligi sababli, muammoni osonlashtirish uchun sinfdan ko'ra strukturani afzal ko'ramiz. #include using namespace std; struct Point { int x, y; }; int orientation(Point p1, Point p2, Point p3) { int val = (p2.y - p1.y) * (p3.x - p2.x) - (p2.x - p1.x) * (p3.y - p2.y); if (val == 0) return 0; // collinear return (val > 0)? 1: 2; // soat yo’nalishi yoki unga qarama-qarshi }
(yb - ya)(xc - xb) - (yc - yb)(xb - xa) ifodasining natijasi saqlanadi. Yo'nalishni topish uchun shartli bayonotdan foydalanamiz, agar u to'g'ri bo'lmasa funksiya quyidagi qiymatlarni qaytaradi: Kollinear orientatsiya uchun 0 1 soat yo'nalishi bo'yicha yo'naltirish uchun 2 soat miliga teskari yo'nalish uchun... Mashina Kodi int main() { Point p1 = {0, 0}, p2 = {2, 3}, p3 = {7, 10}; int result = orientation(p1, p2, p3); if (result == 0) { cout << "Linear"; } else if (result == 1) { cout << "Clockwise"; } else { cout << "Anti-Clockwise"; } return 0; } Murakkablik tahlili