Einzelnen Beitrag anzeigen
Ungelesen 18.06.10, 15:41   #2
kramido
Erfahrener Newbie
 
Registriert seit: Apr 2010
Beiträge: 172
Bedankt: 31
kramido ist noch neu hier! | 0 Respekt Punkte
Standard

Der einfachste Lösungsansatz ist per Brute-Force.


Try&Error:
Code:
//Code, der analysiert werden soll
const int code = 0b1001011;
//Bitlänge des Codes
const int bitlaenge = 7;
//Maximale Distanz, die angezeigt werden soll
const int maxHd = 3;


//Für 7 Bit gibt es 2^7 Codes von 0 bis 2^7 - 1
const int pruefeBis = (1<<bitlaenge) - 1;
//Für alle erlaubten Kombinationen Durchlauf starten
for(int i = 0; i < pruefeBis; i++)
{
	//Sofern Code nicht identisch mit pruefeBits ist und innerhalb der 
	//angezeigten HD, ausgeben
	if(i != code && hd(code, i, bitlaenge) < maxHd)
	{
		System.out.println("Code: " + Integer. toBinaryString(i));
	} 
}

Berechnung der HD:
Code:
int function hd(int code1, const int code2, const int bitlaenge)
{
	//Initial HD mit null annehmen
	int hd = 0;
	
	//Differenz der Codes berechnen
	code1 = code1 ^ code2;
	
	//Nachfolgend Anzahl der unterschiedlichen Bits bestimmen
	
	//Für alle Bits
	for(int i = 0; i < bitlaenge - 1; i++)
	{
		//Nur unterstes Bit betrachten
		//Sofern unterstes Bit = 1, addieren zu HD
		hd += (code1 & 1);
		//Code shiften
		code1 = code1 >> 1;
	}
	
	return hd;
}
Nicht erprobt, aber sollte vom Sinn passen.
kramido ist offline   Mit Zitat antworten