Program na utworzenie sekwencji numerycznych

0

Witam, zwracam sie z prosba o rade jak moge utworzyc 700 sekwencji zlozonych z 4 cyfr (0-9) w taki sposob by kazda z cyfr wystepowala na kazdej z 4 pozycji z takim samym prawopodobienstwem jednakze by te same cyfry nie wystepowaly obok siebie. Potrzebuje tych sekwencji do eksperymentu i do tej pory uzywalam programu MatLab w podobnych zadaniach, jednak nie potrafie obejsc warunku aby cyfry nie wystepowaly obok siebie. Bede wdzieczna za wskazowki.

0

Wylosuj jedną cyfrę z 10, a następnie na każdej pozycji kolejnej jedną z 9. Albo w drugą stronę, losujesz liczbę całkowitą z zakresu <0,10*9^(n-1)) i pobierasz kolejne cyfry, pierwszą używając reszty z dzielenia przez 10, kolejne reszty z dzielenia przez 9. Jeżeli jedna z tych "kolejnych" cyfr jest większa równa niż poprzednia to dodajesz do niej 1.

0

W przełożeniu na algorytm:

  • w pętli od i=1 do 4
    - losuj cyfrę z zakresu [0 .. 10-i]
    - dopóki cyfra występuje w zbiorze cyfr wylosowanych
    - zwiększ cyfrę o 1
    - dodaj cyfrę do zbioru cyfr wylosowanych
0
adf88 napisał(a)

W przełożeniu na algorytm:

  • w pętli od i=1 do 4
    - losuj cyfrę z zakresu [0 .. 10-i]
    - dopóki cyfra występuje w zbiorze cyfr wylosowanych
    - zwiększ cyfrę o 1
    - dodaj cyfrę do zbioru cyfr wylosowanych

ok, tylko czy w takim razie mam pewnosc ze kazda z cyfr 0-10 wystapi z takim samym prawdopodobienstwem na kazdej pozycji w zakresie 700 sekwencji? chodzi o to zeby w tych 700 sekwencjach 4 cyfrowych kazda z cyfr wystapila z takim samym prawdopodobienstwem jak 9 pozostalych na danej pozycji na przestrzeni 700 sekwencji, nie w zakresie pojedynczej sekwencji. sorry, jestem laik w tej dziedzinie, nie wiem czy to dobrze wyjasniam...

0

Losujesz pierwszą cyfrę ze zbioru A = {0,1,2,3,4,5,6,7,8,9}, każdą kolejną ze zbioru A - {poprzednio_wylosowana}. Każda cyfra występuje na każdym miejscu z takim samym prawdopodobieństwem.

0

Ah, mój błąd. Poprzedni algorytm dotyczył losowania całkowicie bez powtórzeń. Tak będzie poprawnie:

  • losuj cyfrę z zakresu [0 .. 9]
  • zapisz cyfrę jako kolejna cyfra wyniku
  • w pętli od i=1 do 3
    - losuj cyfrę z zakresu [0 .. 8]
    - jeśli cyfra jest identyczna z poprzednią to zwiększ cyfrę o 1
    - zapisz cyfrę jako kolejna cyfra wyniku

W ten sposób każda z cyfr będzie tak samo prawdopodobna na każdym miejscu. I tak 700 razy.

Aha, jeszcze jedno. Wiedz, że komputer nie generuje prawdziwie losowych liczb. W niektórych przypadkach może to negatywnie wpłynąć na wynik eksperymentu. Jeśli chcesz prawdziwie losowe liczby to pobierz je z jakiejś strony internetowej która takowe oferuje.

0
  • losuj cyfrę z zakresu [0 .. 9]
  • zapisz cyfrę jako kolejna cyfra wyniku
  • w pętli od i=1 do 3
    - losuj cyfrę z zakresu [0 .. 8]
    - jeśli cyfra jest identyczna z poprzednią to zwiększ cyfrę o 1
    - zapisz cyfrę jako kolejna cyfra wyniku

W ten sposób każda z cyfr będzie tak samo prawdopodobna na każdym miejscu. I tak 700 razy.

Nope:

  • 0 będzie miało trochę mniejszą szansę na wylosowanie (około 7/64)
  • 9 będzie miało dużo mniejszą szansę na wylosowanie (bardzo małą, około 1/64).
    Trzeba zmienić 2 kroki:
  • losuj cyfrę z zakresu [0 .. 9]
  • zapisz cyfrę jako kolejna cyfra wyniku
  • w pętli od i=1 do 3
    - losuj cyfrę z zakresu [0 .. 9]
    - jeśli cyfra jest identyczna z poprzednią to zwiększ cyfrę o 1
    - jeśli cyfra > 9 to cyfra := 0
    - zapisz cyfrę jako kolejna cyfra wyniku
0

A nie prościej od razu losować z dopuszczalnego zakresu?

import random
result=[]
for i in range(700):
    n = random.choice(range(10)) 
    lista=[n]
    for i in range(3):
        l = range(10)
        l.remove(n)
        n = random.choice(l)
        lista.append(n)
    result.append(lista)
0
bogdans napisał(a)

A nie prościej od razu losować z dopuszczalnego zakresu?

import random
result=[]
for i in range(700):
    n = random.choice(range(10)) 
    lista=[n]
    for i in range(3):
        l = range(10)
        l.remove(n)
        n = random.choice(l)
        lista.append(n)
    result.append(lista)

Hi. Kazda z cyfr w 4 cyfrowym ciagu musi byc rozna. W takim razie ciag 2373 jest niedopuszczalny. Problem polega na tym, ze te sekwencje beda potem przetransportowane ne rozne dzwieki w programie MatLab, kazdy dzwiek muzi byc rozny w pojedynczej sekwencji ale wystapic z takim samym prawdopodobienstwem we wszystkich 700 sekwencjach na kazdej 1, 2,3 i 4 pozycji.

0

Kazda z cyfr w 4 cyfrowym ciagu musi byc rozna

Nie mogłeś tego od razu napisać, albo przerobić zamieszczony kod?

import random
result = []
for i in range(700):
    l = range(10)
    n = random.choice(l) 
    lista = [n]
    for i in range(3):
        l.remove(n)
        n = random.choice(l)
        lista.append(n)
    result.append(lista)
0
bogdans napisał(a)

Kazda z cyfr w 4 cyfrowym ciagu musi byc rozna

Nie mogłeś tego od razu napisać, albo przerobić zamieszczony kod?

import random
result = []
for i in range(700):
    l = range(10)
    n = random.choice(l) 
    lista = [n]
    for i in range(3):
        l.remove(n)
        n = random.choice(l)
        lista.append(n)
    result.append(lista)

Dzieki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1