2017-03-23 2 views
0

Ich frage mich, ob es einen bestimmten Namen für Binärcodierung von Ganzzahl gibt, wenn jede Darstellung die gleiche Anzahl von 1s und 0s hat. Hier ein BeispielWas ist der Name für Binärcode, wo jede ganze Zahl durch die gleiche Anzahl von 1s und 0s repräsentiert

0 000111 
1 001011 
2 001101 
3 001110 
4 010011 
5 010101 
6 010110 
7 011001 
8 011010 
9 011100 
10 100011 
11 100101 
12 100110 
13 101001 
14 101010 
15 101100 
16 110001 
17 110010 
18 110100 
19 111000 

Ich glaube, diese Art von Code in häufig in künstlichen binären Netzen verwendet werden soll Anzahl der aktiven Neuronen für jede Eingabe entzerren. Ich dachte, dass diese Art von Code mit Hamming-Code zusammenhängt, aber es scheint, dass ich falsch lag.

+1

Diese Zahlen haben das gleiche "Hamming-Gewicht" oder "Bevölkerungszahl". – m69

+0

@ m69 Kennen Sie den einfachsten Weg, um solchen Code zu generieren? – rth

+1

Hier ist eine ähnliche Antwort: https://stackoverflow.com/questions/36451090/permutationen-of-binary-number-by-swapping-two-bits-not-lexicographic/36466454#36466454 – m69

Antwort

0

Vielen Dank an @ m69, ich habe eine gute Idee von Walking-Bit-Algorithmus, die nach ein paar kleinen Modifikationen macht die Arbeit. Ich poste diesen Python-Code hier, nur für den Fall, dass ihn jemand anderes benötigt.

def equalcodegen(size): 
    x = [ 1 for _ in xrange(size/2)]+[ 0 for _ in xrange(size/2)] 
    def walk(seq): 
     idx=0 
     while seq[idx] != 0: idx+=1 
     if idx == 0: 
      s = seq[:] 
      yield [] 
     else: 
      seq[idx-1] = 0 
      for pos in xrange(idx, len(seq)): 
       s = seq[:] 
       s[pos] = 1 
       yield s 
       for p in walk(s[:pos]): 
        if len(p) == 0: continue 
        k = p+s[pos:] 
        yield k 


    wset = [x]+[ x for x in walk(x) ] 
    return [ "".join("%d"%x for x in p) for p in wset ] 

if __name__ =="__main__": 
    s = equalcodegen(6) 
    for x in s: 
     print x 

Ergebnis:

110000 
110100 
101100 
011100 
110010 
101010 
011010 
100110 
010110 
001110 
110001 
101001 
011001 
100101 
010101 
001101 
100011 
010011 
001011 
000111 
Verwandte Themen