Jump to content

Varbūtības aprēķināšana


hackerman
 Share

Recommended Posts

Sveiki!

 

Man ir uzdots uzdevums aprēķināt varbūtību uzmest skaitli ar metamo kauliņu. Metamais kauliņš tiek mests vairākas reizes. Metienu vērtības summējās. Piemēram, kauliņš tiek mests 3 reizes, uzkrīt 1;3;6 - kopā 10. Nu un man vajag uzrakstīt funkciju, kas aprēķina varbūtību uzmest kādu skaitli.

 

Es internetā uzgāju diezgan labu linku: http://www.math.csusb.edu/faculty/stanton/m262/intro_prob_models/calcprob.html

Kopumā tur ir diezgan labi viss paskaidrots. Bet man problēmas sagādā tas, ka tajā linkā doto formulu es nemāku izmantot. Algebriski, protams, es viņu izprotu, bet vienkārši skripta veidā es to nemāku pierakstīt - neļauj man izmantot polinomus (nedefinētu x'u). Kopumā to vajag dabūt Pythonam saprotamā valodā.

 

Vēl man bija doma ģenerēt visas iespējamās summas, un tad skaitīt, cik iespējas tad īsti ir, bet tas veids man neliekas efektīvs pie gadījuma, kad kauliņš tiek mests, piemēram, 5 reizes. Jo tad sanāk pavisam iespējami 3125 dažādi gadījumi.

Link to comment
Share on other sites

3125 reizes datoram ir viens spļāviens. Pie 10 gan būs interesantāk, un pie 20 jau pavisam labi.

 

Es ieteiktu apsvērt iteratīvu pieeju. Ķipa, domā tā - ja Tu zini šos skaitļus N metieniem, kā Tu, par pamatu ņemot šo informāciju, varētu aprēķināt skaitļus N+1 metienam? Pašam šajā nakts stundā slinkums domāt, un vispār, tas ir Tavs mājasdarbs. :) Bet šādai pieejai vajadzētu strādāt, un samērā veikli arī ļoti lielam metienu skaitam.

Link to comment
Share on other sites

0xDEAD BEEF

Ir divi varianti, ka risinat sho uzdevumu.

variants a un variants b! :)

Pirmais veids ir random gjenerators! Uzraksti funckiaju, kas ar random met kaulinju x reizes un atgriezh true/false, ja vajadzigais skaitlis uzkrita/neuzkrita. Izpildot sho funkciju pietiekami daudz reizes un saglabajot uzkrutusho/kopeju izsaukumu skaitu, tu vari diezgan precizi noteikt varbutibu.

 

Otrs variants ir matematika!

Parastajam metamajam kaulinjam varbutiba uzmest kadu skaitli ir 1/6. To var rekinat ari no otra gala. Proti - kada ir varbutiba, ka tu neuzmetisi velamo skaitli ar 1 gajienu? 1 - 1/6 = 5/6. Kada varbutiba, ka ar diviem gajieniem neuzmetisi - 5/6 * 5/6. Tatad, varbutiba, ka ar 2 gajieniem uzmetisi ir 1 - 5/6*5/6..

Beefs

Link to comment
Share on other sites

Ahem, DeadBeef, pēc Tavas otrās metodes, kāda tad sanāk varbūtība, ka ar 2. gājienu uzmetīsi 7? ;)

Link to comment
Share on other sites

Vēl man bija doma ģenerēt visas iespējamās summas, un tad skaitīt, cik iespējas tad īsti ir, bet tas veids man neliekas efektīvs pie gadījuma, kad kauliņš tiek mests, piemēram, 5 reizes. Jo tad sanāk pavisam iespējami 3125 dažādi gadījumi.

varbutiba=VisasIespejasUzmestSkaitli/VisiUzmesanasVeidi

 

VisasIespejasUzmestSkaitli metot to N reizes vajadzētu aprēķināt kaut kā tā kā Vilx- teica - par pamatu ņemot N-1 iespējamās summas. To vajadzētu varēt aprēķināt vienkārši reizinot ar 6(vertību skaits uz metamā kauliņa) iespējamās reizes pie N-1: VisasIespejasUzmestSkaitli=VisasIespejasUzmestSkaitli(N-1)*6.

 

Problēma laikam paliek tikai uzrakstīt funkciju(gan jau rekursīvu), kas aprēķina iespējamos saskaitāmos, lai dabūtu konkrētu skaitli. Šķiet, ka tur ir darīšana ar permutācijām.

Labots - nemirst
Link to comment
Share on other sites

0xDEAD BEEF

Ahem, DeadBeef, pēc Tavas otrās metodes, kāda tad sanāk varbūtība, ka ar 2. gājienu uzmetīsi 7? wink.gif

 

varbutiba uzmest ar 2tro gajienu 7 = 1 - varbutiba neuzmest 7 ar diviem gajieniem. varbutiba uzmest 7 = 0; varbutiba neuzmest 7 = 1; varbutiba neuzmest ar diviem metieniem 7 = 1 * 1. varbutiba uzmest 7 ar diviem metieniem ir 1 - (1 * 1) = 0.

Beefs

Link to comment
Share on other sites

0xDEAD BEEF

Atvainojos! Nesapratu uzdevumu! sad.gif

Domaju, tada gadijuma rekursijai uzdotu jautajumu - kada ir varbutiba uzmest x ar y metieniem.

Rekursija loti viegli shkjetinatos valja - njemam n no 1 - 6 un izsaucam pashi sevi ar x - n, y - 1. Ja x == 0 && y == 0 atgriezham 1.

Problema butu, ka rekursija nenormali saktu zaroties jau 3saja limeni, tadelj ieviesham blakus "hash" tabulu.

2dimensiju masivu ar x = metienu skaits un y = nepiecieshami punkti. Masiva elements = -1 neaizpildits vai aizpildits ar varbutibu. Shadi daroties ieverojami samazinasim rekursiju, jo aprekins bus jadara tikai punkti*metieni reizes.

Piemeram - ja gribesim zinat varbutibu ar 10 metieniem uzmest 50, tad pastaves tikai 500 dazhadas iespejamas varbutibas, kuras pareizi jasasume.

 

Rakstot bez tas tabulas bus dibens, bet ar tabulu uzdevums ir reali izpildams reala laika.

Beefs

Labots - 0xDEAD BEEF
Link to comment
Share on other sites

Nu un man vajag uzrakstīt funkciju, kas aprēķina varbūtību uzmest kādu skaitli.

 

Hmm, varbūtība uzmest kādu skaitli vienmēr būs 1/6, ne tā? Ja vien tev nav dots metienu skaits un uzdevums neskan aptuveni šādi: "Kāda varbūtība uzmest skaitli X metot metamo kauliņu N reizes?". Bet, ja uzdevums skan "Kāda varbūtība uzmest skaitli N?", tad atbilde ir 1/6, manuprāt. Vienalga, vai tas ir 1-6, vai lielāks par 6. Piemēram, skaitli 20 var uzmest tad, ja ir jau uzmesti vismaz 14-19 (punkti) un varbūtība uzmest 20 metot kauliņu pie jebkura no šī punktu daudzuma ir 1/6. Kāds īsti ir precīzs uzdevuma teksts?

Link to comment
Share on other sites

Ai, taču beidz piekasīties! Izlasi visu postu, doma ir skaidra. Tu met metamo kauliņu N reizes, un rezultātus summē. Kāda ir varbūtība, ka summa būs X (kur X ir robežās no N līdz 6*N)?

Link to comment
Share on other sites

0xDEAD BEEF

Uzdevumu var vienkāršot šādā veidā:

Ja ir doti N metieni un jāizreķinā varbūtību, ka sanāks skaitlis A, tad var ņemt N kauliņus un izreķināt varbūtību, ka metot visus uzreiz, sanāks A. Līdz ar to, uzdevumu var pievest pie vienas formulas un neizmantot rekursiju.

 

Un ka tu to iztelojies? Vienkarshi jau ta pateikt, bet gruti izpildit! Grozies ka gribi, bet tomer vajag zinat vismaz to, cik dazhados veidos ir iespejams uzmest to summu. Metot vienu kaulinju - easy - tikai 1na veida var uzmest skaitli! Bet metot 2vus kaulinjus jau viss ir loti sarezgijies, jo, kamer uzmest 2 un 12 ir tikai viens iespejams variants un attiecigi varbutiba 1/6*1/6, tikmer uzmest 7 var loti dazados variantos. Rekini no kura gala gribi, bet atdursies pret to, ka vajag kaut kada veida parslasit sho derigo variantu skaitu.

Beefs

Link to comment
Share on other sites

0xDEAD BEEF

Gudri [slēpts] nav malku cirst!

Lūdzu formulu studijā!

 

... kaut gan diezgan iespējams, ka tās sumas galu galā un pēc visas "uber sarežģītās" rēķināšanas vienkārši paņems un sadalīsies pēc normāl-sadalījuma prinicpa. Ej tikai pēc tam to pierādi! :)

0xDEAD BEEF

Marš uz skolu!

Uzmetot N kauliņus, tev sanāk summa S. Katrai summai ir noteikta varbūtība, kuru ir elementāri apreķināt ar kombinatorikas formulam.

Link to comment
Share on other sites

Ja vēlaties ar kombinatoriku rēķināt, tad, manuprāt, uzdevumu var formulēt šādi:

Cik dažādos veidos N konfektes (summa) var paņemt X bērni (metienu skaits) tā, lai katrs būtu paņēmis vismaz vienu, bet nebūtu paņēmis vairāk par 6.

Nekad nav patikusi kombinatorika. Bet, manuprāt, sanāk aprēķināt šādi:

+ cik dažādos veidos konfektes var visi bērni paņemt

- atņemt tos gadījumus, kad kāds nav dabūjis (cik dažādos veidos var paņemt X-1 bērni)

- atņemt gadījumus, kad kāds ir paņēmis vairāk nekā 6 konfektes (nezinu kā aprēķina)

+ pieskaitīt gadījumus, kad kāds nav dabūjis konfekti un kāds ir dabūjis vairāk nekā 6 konfektes.

 

Ja nav nekādu papildus uzstādījumu, es ietu kādu rekursijas vai tamlīdzīgu ceļu, bez kombinatorikas. :)

 

Neesmu eksperts algoritmu sarežģītības aprēķināšanā, bet, manuprāt ar O(X*log(X)) var aprēķināt varbūtību sadalījumu visiem iespējamiem skaitļiem.

Link to comment
Share on other sites

0xDEAD BEEF

edit: kludijos. Veidu skaits, izskatas, ka vertu palielinaties lineari (notesteju 2 un 3 kauliniem). Tada gadijuma uzdevums paliek vienkāršs.

Beefs

 

 

Labots - 0xDEAD BEEF
Link to comment
Share on other sites

0xDEAD BEEF

Lineāri?

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

1 3 6 10 15 21 25 27 27 25 21 15 10 6 3 1

 

10 - 9 = 2

9 - 8 = 4

8 - 7 = 6

Ja var ticet DICE programai.. ;)

Beefs

Labots - 0xDEAD BEEF
Link to comment
Share on other sites

0xDEAD BEEF

Nu paga! Es ieeju DICE un saku, lai uzģenerē priekš 3 skaitļiem.

Un re ku rezultāts - augšējā rinda - summa, apakšējā rindā - variantu skaits, ar kuriem var tikt pie tādas summas!

1 = 3 tikai viena veida 1 + 1 + 1

3 = 4 veselos 3 veidos. 1 + 1 + 2, 1 + 2 + 1, 2 + 1 + 1,

6 = 5 veselos 6 veidos...

u.t.t.

Kā redzi, tad nepieaug lineāri!

Beefs

Link to comment
Share on other sites

0xDEAD BEEF

Nē zin.. kas tad tas ir?

SUM(1 3 6 10 15 21 25 27 27 25 21 15 10 6 3 1 ) = 216 = 6*6*6

Šitie skaitļi pasaka, cik dažādos veidos var uzmest KATRU summu, ja met 3 kauliņus! Ko tu tur nesaproti?

Un jebkurš šīs virknes skaitlis ir viegli pārvēršams par varbūtību, dalot to ar 216!

Un virkne joprojām nav lineāra! Zini.. man sāk likties, ka tu nerubī fišku!

Beefs

Link to comment
Share on other sites

Leshij, nemētājies ar atzīmēm.

Nekā lineāra tur nav.

Varbūtību iegūst šos skaitļus izdalot ar 6^[Metienu Skaits].

Joprojām linearitātes nav.

 

Savukārt, ja nepamanījāt, tad skaitļi veido Paskāla trijstūri, tikai ņemot 6 včibriko elementu summu.

Nebūtu slinkums, varētu formulu izvest...

Link to comment
Share on other sites

0xDEAD BEEF

Nē, nē un nē!

 

Nejauc variācijas ar varbūtību!

ja N = 3 un S = 3, tad pēc tavas loģikas varbūtība ir 1/216, bet patiesībā ir 1/18. Tev vajag saplusot visas variācijas, kas dod vienādu iznākumu!

 

Pēc tavas loģikas varbūtība uzmest 9 (ar 3 metieniem) arī ir 1/18? Ķipa kāda varbūtība satikt dinozauru uz ielas? 50% - vai nu satiksi, vai nesatiksi! :)

Beefs

Link to comment
Share on other sites

Letish, tikai mieru. Atdziesti.

Skaitlis 11 ir tas, ko jau minēji - variāciju skaits.

Varbūtība, ka abi kauliņi būs 1 (summa 2) ir 1/36.

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...