Skocz do zawartości

[Java] funkcja tworząca wszystkie możliwe macierze binarne 3x3


kni4x

Polecane posty

Witam.

 

Tworzę w Javie program ze sztucznej inteligencji, konkretniej sieć neuronową, którą następnie muszę wytrenować algorytmem wstecznej propagacji błędów. Udało mi się zaimplementować działającą sieć perceptronów i algorytm propagacji wstecznej jednak zaciąłem się na funkcji którą potrzebuję do tej sieci i nie mogę ruszyć dalej :confused:. Muszę stworzyć metodę tworzącą wszystkie możliwe macierze binarne 3x3 ( wypełnione tylko 0 i 1 ) tzn 2 do potęgi 9 = 512 macierzy i każdą z nich przepuścić przez napisaną przeze mnie sieć zapisując wyniki jakie moja sieć zwróci dla każdej z nich. W macierzy jest 9 elementów i poprostu nie mogę wpaść na to jak utworzyć rekurencyjną funkcję tworzącą wszystkie możliwe zestawienia tych 9 elementów. Bardzo proszę o pomoc:think:. Pozdrawiam

Link do komentarza
Udostępnij na innych stronach

Masz kod w Python 2.6. Przerób to sobie do Javy...

 

tab="01"
print "Zestaw znakow: ",
print tab
ciagi=[]
def generuj(str, de):
   if de == 0:
       ciagi.append(str)
       return False
   for i in tab:
       if generuj(str + i, de - 1) == True:
           return True
ilosc_znakow=9
generuj("", ilosc_znakow)
print ciagi, len(ciagi)

Generuje 512 ciągów znaków, chyba wiesz jak to upakować w te macierze :) W Pythonie jest jeszcze moduł itertools do robienia takich rzeczy, ale skoro większość masz już w Javie to stwierdziłem, ze Ci się to nie przyda :D

 

Właściwie w Twoim przypadku można to załatwić iteracyjnie (odpowiednia ilość zagnieżdżeń pętli for :D), skoro macierz ma stałą wielkość:

tab="01"
l=0
for a in tab:
   for b in tab:
       for c in tab:
           for d in tab:
  	         for e in tab:
  		         for f in tab:
  			         for g in tab:
  				         for h in tab:
  					         for i in tab:
  						         l+=1
  						         print a+b+c+d+e+f+g+h+i
print l

 

Będzie trochę inna kolejność niż sposobem rekurencyjnym. Chyba, że Ci to nie przeszkadza :D ?

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...