If you're seeing this message, it means we're having trouble loading external resources on our website.

Եթե գտնվում ես վեբ զտիչի հետևում, խնդրում ենք համոզվել, որ *.kastatic.org և *.kasandbox.org տիրույթները հանված են արգելափակումից։

Հիմնական նյութ

Հավանականություն և ոչ հավասարաչափ բաշխումներ

Հիշո՞ւմ ես՝ ինչ էիր մտածում, երբ նոր էիր սկսում ծրագրավորել։ Միգուցե ցանկանում էիր էկրանի վրա բազմաթիվ շրջաններ նկարել ու որոշեցիր պատահական դիրքերում, պատահական չափի ու գույնի շրջաններ նկարել։ Համակարգչային գրաֆիկական համակարգում շատ հաճախ հեշտ է պատահականությամբ համակարգեր ստեղծել։ Այնուամենայնիվ, այս դասընթացի շրջանակում ցանկանում ենք բնական երևույթների վրա հիմնված համակարգեր կառուցել, քանի որ պատահականությամբ դիզայնի խնդիր լուծելն այնքան էլ լավ տարբերակ չէ, մանավանդ, երբ խնդիրը պահանջում է համահունչ ու բնական նմանակիչ ստեղծել։
random() ֆունկցիայի և մի քանի հնարքի միջոցով հնարավոր է ստանալ պատահական թվերի «ոչ համաչափ» բաշխում. այս մոտեցումը դասընթացի ընթացքում՝ տարբեր իրավիճակներ քննարկելիս, պետք կգա։ Օրինակ՝ գենետիկական ալգորիթմներ ուսումնասիրելիս մեզ անհրաժեշտ կլինեն «ընտրություն» կատարելու մոտեցումներ. ասենք՝ ընտրել, թե բնակչության որ անդամների ԴՆԹ-ն է պետք փոխանցել հաջորդ սերնդին։ Ուժեղագույնների գոյատևման սկզբունքը հիշո՞ւմ ես։ Ենթադրենք՝ էվոլյուցիա ապրող կապիկների բնակչություն ունենք. այդպիսի բնակչության յուրաքանչյուր կապիկի բազմանալու հավանականությունը տարբեր է։ Այսինքն՝ դարվինյան էվոլյուցիա նմանակելու համար չենք կարող պարզապես երկու պատահական կապիկ ընտրել և դրանց համարել ծնողներ. պետք է ավելի «ուժեղներն» ընտրելու հավանականությունն ավելի մեծ լինի։ Դրա համար անհրաժեշտ կլինի «ուժեղագույնների հավանականություն» սահմանել։ Օրինակ՝ շատ ուժեղ և արագ կապիկի բազմանալու հավանականությունը կարող է 90% լինել, իսկ թույլ կապիկինը՝ ընդամենը 10%։
Այստեղ մի պահ կանգ առնենք և քննարկենք հավանականության հիմնական սկզբունքները։ Սկզբի համար դիտարկենք մեկ պատահույթի հավանականությունը, օրինակ՝ տրված պատահույթի տեղի ունենալու հավանականությունը։
Եթե ունես համակարգ, որն ունի կոնկրետ թվով հնարավոր ելքեր, և բոլոր ելքերի տեղի ունենալու հավանականությունը նույնն է, ապա ինչ-որ պատահույթի տեղի ունենալու հավանականությունը հնարավոր է հաշվել՝ այդ պատահույթին համապատասխանող բոլոր ելքերի քանակը բաժանելով առհասարակ հնարավոր բոլոր ելքերի թվի վրա։ Դիտարկենք պարզ օրինակ՝ մետաղադրամի նետում. կա հնարավոր երկու ելք՝ զինանշան կամ թիվ։ Զինանշան գցելու ընդամենը մեկ հնարավոր ձև կա։ Հետևաբար, հավանականությունը, որ մետաղադրամը նետելիս արդյունքը կլինի զինանշան, հավասար է մեկը բաժանած երկուսի՝ 1/2 կամ 50%։
Այժմ դիտարկենք 52 քարտ պարունակող խաղաքարտերի կապոց։ Այդ կապոցից տուզ ընտրելու հավանականությունը հավասար է՝
Տուզերի քանակ / Խաղաքարտերի քանակ = 4 / 52 = 0,077 = ~ 8%
Խաչ ընտրելու հավանականությունը հավասար է՝
Խաչերի քանակ / Խաղաքարտերի քանակ = 13 / 52 = 0,25 = 25%
Կարող ենք նաև որոշ հաջորդականությամբ տեղի ունեցող պատահույթների հավանականությունը հաշվել։ Դրա համար պետք է ընդամենը յուրաքանչյուր պատահույթի հավանականությունները բազմապատկել իրարով։
Մետաղադրամը երեք անգամ նետելիս երեք զինանշան ստանալու հավանականությունը հավասար է՝
(1/2) * (1/2) * (1/2) = 1/8 (կամ 0,125)
Այսինքն՝ կարելի է ասել, որ մետաղադրամը ութ անգամ գցելիս հավանական է, որ մեկ անգամը երեք զինանշան կստացվի։
Ուզո՞ւմ ես շարունակելուց առաջ հավանականությունը վերանայել։ Կարող ես ուսումնասիրել բաղադրյալ պատահույթները և կախյալ հավանականությունը։
Ծրագիր գրելիս հավանականություններ ստանալու համար random() ֆունկցիան հնարավոր է մի քանի ձևով կիրառել։ Մոտեցումներից մեկը ինչ-որ զանգվածում թվեր ներմուծելն է, դրանցից պատահական թիվ ընտրելն ու դրա հիման վրա պատահույթներ գեներացնելը. մոտեցման յուրահատկությունն այն է, որ զանգվածում հնարավոր է մի թիվը մի քանի անգամ ներմուծել և այդպիսով այդ թվի ընտրության հավանականությունը մեծացնել։
Տրված կոդի կատարման ընթացքում 1 արտածելու հավանականությունը 40% է, 2 արտածելու հավանականությունը՝ 20%, իսկ 3 արտածելու հավանականությունը՝ 40%։
Հաջորդ մոտեցումը պարզեցնելու համար ենթադրենք, որ 0-ից 1 ընկած պատահական տասնորդական թիվ ենք ընտրում։ Այդ դեպքում կարող ենք պատահական թիվ ընտրել և պատահույթն իրականացնել միայն այն դեպքում, երբ ընտրած թիվն ինչ-որ միջակայքում է ընկած։ Մոտեցումը հասկանալու համար ուսումնասիրիր ստորև տրված օրինակը. սեղմիր «Վերսկսել» կոճակը, մինչև պատահական ընտրված թիվը վերջապես տրված շեմից փոքր լինի։
Այս մեթոդը հնարավոր է կիրառել նաև, երբ մի քանի ելք է հնարավոր։ Ենթադրենք՝ Ելք A-ի հավանականությունը 60% է, Ելք B-ինը՝ 10%, և Ելք C-ինը՝ 30%։ Այս իրավիճակը ծրագրում կիրառելու համար կարող ենք ընտրել պատահական թիվ և տեսնել, թե որ միջակայքում է այն ընկած։
  • ընկած է 0,00-ի և 0,60-ի միջև (60%) –> Ելք A
  • ընկած է 0,60-ի և 0,70-ի միջև (10%) –> Ելք B
  • ընկած է 0,70-ի և 1,00-ի միջև (30%) –> Ելք C
Սեղմիր «Վերսկսել» կոճակը և տես, թե յուրաքանչյուր ելքը քանի անգամ ես ստանում։
Այս մոտեցումը կարող ենք կիրառել այնպիսի պատահական քայլող ստեղծելու համար, որը հակված է դեպի աջ շարժվելուն։ Ահա Walker-ի օրինակ՝ հետևյալ հավանականություններով.
  • դեպի վերև գնալու հավանականությունը՝ 20%
  • դեպի ներքև գնալու հավանականությունը՝ 20%
  • դեպի ձախ գնալու հավանականությունը՝ 20%
  • դեպի աջ գնալու հավանականությունը՝ 40%

«Բնական նմանակիչներ» դասընթացը ստեղծվել է Դանիել Շիֆմանի «Կոդի բնույթը» գրքի հիման վրա և կիրառվում է ըստ Creative Commons Attribution-NonCommercial 3,0 Unported License-ի։

Ուզո՞ւմ ես միանալ խոսակցությանը։

Առայժմ հրապարակումներ չկան։
Անգլերեն հասկանո՞ւմ ես: Սեղմիր այստեղ և ավելի շատ քննարկումներ կգտնես «Քան» ակադեմիայի անգլերեն կայքում: