պիտի որ սենց լինի լուծումը՝
![]()
պիտի որ սենց լինի լուծումը՝
![]()
Էտ խնդիրը կարծեմ NP-ա, այսինքն նորմալ լուծում չունի, իսկ վերը նշված էվկլիդեսի ալգորիթմով հաշված թիվը ցույցա տալիս ընդամենը պատասխանի վերևի սահմանը:
Varzor (14.11.2011)
Որովհետև նման տիպի խնդիրների համար օպտիմալ ալգորիթմը չի լինում բազմանդամային բարդության, օրինակ Օ(n), O(n^2) կամ O(n^2 + n^3), այլ էքսպոնենցիալ բարդության - այսինքն մուտքային տվյալներից կախված գործողությունների քանակի կարգը աճումա էքսպոնենցիալ, օրինակ O(2^n), O(3^n), O(n!), և այլն: Ես 100%-ով չեմ պնդում որ էս խնդիրը պատկանումա դրանց դասին, բայց ենթադրում եմ որ տենցա, որովհետև տարբեր հոդվածներ կան սրա մասին որ փորձում են ինչ-որ գնահատական տան օպտիմալ պատասխանին, թե ինչ միջակայքում պիտի գտնվի, կամ ասենք ամենաշատը ինչքան կարա լինի պատասխանը: Որոշ տեղեր կա նշված, որ որպես պատասխանի վերին սահման կարելիա ընդունել էվկլիդեսի ալգորիթմով ստացվող թիվը, իսկ եթե խնդիրը լուծելի լիներ, օպտիմալ լուծումն էլ պետքա որ նշված լիներ: Հիմա կոնկրետ լինկերը չունեմ, բայց կարաս փնտրես "Minimum tiling of a rectangle by squares":
Ճիշտն ասած չհասկացա քո ասածը: Դու ուզում ես ասես, որ կարող ա լինի կոնկրետ ուղղանկյունու չափսեր որ Վահեի կամ իմ գրածը սխալ պատասխան տա՞:
Թե՞ ուզում ես ասես, որ խնդրի տվյալներից կախված կարա մի դեպքում իմ գրածը ավելի արդյունավետ աշխատի, մյուս դեպքում Վահեի (բայց միևնույնն է՝ արդյունքը լինի ճիշտ):
http://www.akumb.am/showthread.php/6...AB%D5%A9%D5%B4
Հեսա ստեղ գրել եմ:
Էս ինչեր եք խոսքւմ, բան չեմ հասկանում
Եթե ուղղանկյան կողմերը բնական թվեր են` M և N, ապա ամենափոքր խառակուսին կլինի 1 կողմով քառակուսին, հետևաբար կունենանք M x N հատ այդպիսի քառակուսիներ:
Ու սկսվում է հակադարձ գործընթացը` փոքր քառակուսիների միավորման:
Իսկ ալգորիթմը կլինի մոտավորապես հետևյալը.
1. որոշում ենք որ թիվն է մեծ ` օրինակ M>N: Ըստ դրա կատարում ենք կողմերի վերադասավորում:
2. n` Առաջին քառակուսու կողմը: Տակը մնաց` M-N=>M1 և N=>N1 կողմերով ուղղանկյունը:
Այս երկու գործողությունները շարունակվում են այնքան, մինչև i-երորդ քայլում կողմերից որևէ մեկը չհավասարվի 1-ի: Արդյունքում տակը կմնա Ni x Mi չափերով ուղղանկյուն, որտեղ օր. Ni=1, հետևաբար տակը մնաց Mi հատ քառակուսի: քանակը ստացվեց ` i + Mi
Ծրագիրը C++-ով գրեմ տամ, թե արդեն հասկանալի է?
Վերջին խմբագրող՝ Varzor: 14.11.2011, 14:56:
Լոխ մունք ենք, մնացածը` լոխ են...
Այս պահին թեմայում են 1 հոգի. (0 անդամ և 1 հյուր)
Էջանիշներ