-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Gray-Code

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780

    Gray-Code

    Anzeige

    Hallo Leute,

    ich Suche nach einem effizienten Algorithmus, mit dem ich einen (geringfügig modifizierten) 9...11-Bit Gray-Code decodieren kann.

    Gruß,
    Felix


    PS:
    "geringfügig modifiziert" = so verschoben daß er mit 11111...1 anfängt
    (aber das dürfte ja bei der Decodierung keine Rolle spielen)
    So viele Treppen und so wenig Zeit!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Die Frage ist, was "Effizienz" sein soll...?

    -1- Laufzeit
    -2- Speicherplatz
    -3- Verständlichkeit / Implementierungszeit

    Für -1- und -3- einfach ne Tabelle anlegen und da rauslesen, ist aber mies für -2-.

    EIgentlich sollte doch was rekursives gehen für -2-, also Zurückführen des n-Gray-Code auf n-1-Gray-Code.
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.07.2004
    Ort
    bei Stuttgart
    Alter
    35
    Beiträge
    760
    Hallo,
    wie komme ich eigentlich einfach auf eine Graycode mit n-bit? Meistens findet man nur beispiele für 3 oder 4-bit. Wie komme ich auf einen Graycode mit 10-bit?
    MfG jeffrey

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    SChau mal im Wiki unter "Graycode"
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    @SprinterSB
    Naja, effizient im Sinne von "einfach"...

    ein paar mathematische Formeln mit denen ich wieder an die Dezimalzahlen komme.

    Irgendwie habe ich da grad eine Denkblockade, denn ich kann zwar problemlos einen Gray-Code aufschreiben (mit 4, 5 oder egal wieviel Bit, solange es noch aufs Blatt passt), bin aber nicht in der Lage die Geschichte dann wieder ins Dezimalsystem umzurechnen.


    Speicherplatz ist übrigens kein Problem, da das Programm auf einem PC laufen wird, aber eine Tabelle ist mir irgendwie zu unflexibel.


    edit:
    hab grad ins Wiki geschaut...
    111 Gray = 7-3+1 = 7-(3-1) = 5
    ganz genau sowas Suche ich, wie kommt man da drauf?
    So viele Treppen und so wenig Zeit!

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Achso, ich dachte, du brauchst die andere Richtung...

    Hab grad aml was gehackt und das scheint es zu tun. Frag nicht, wie ich drauf komme, ist mathematische Intuition... *fg*

    Code:
    import java.io.*;
    
    public class Gray
    {
    	public static void main (String[] args)
    	{
    		System.out.println ("Hallo Welt!");
    
    		int n = 2;
    
    		try
    		{
    			if (args.length >= 1)
    				n = Integer.parseInt (args[0]);
    		}
    		catch (Exception ex) {}
    
    		System.out.println ("n = " + n);
    
    		for (int i=0; i < (1 << n); i++)
    		{
    			int dec = 0;
    			int ii = i;
    			for (int b = n-1; b >= 0; b--)
    			{
    				if (0 != (ii & (1 << b)))
    				{
    					dec |= (1 << b);
    					ii ^= 0xffffff;
    				}
    			}
    			System.out.println ("[" + i + "] -> " + dec);
    		}
    	}
    }
    i Läuft von 0 bis 2^n und wird Gray-decodiert. Scheint zu stimmen

    In C sieht's dann genauso aus.

    Code:
    D:\java\sources>java -cp . Gray 4
    Hallo Welt!
    n = 4
    [0] -> 0
    [1] -> 1
    [2] -> 3
    [3] -> 2
    [4] -> 6
    [5] -> 7
    [6] -> 5
    [7] -> 4
    [8] -> 12
    [9] -> 13
    [10] -> 15
    [11] -> 14
    [12] -> 10
    [13] -> 11
    [14] -> 9
    [15] -> 8
    Disclaimer: none. Sue me.

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    hab auch gebastelt, komme aber mit meiner lösung zu spät. ausserdem ist sie nicht so elegant, und ob es funktioniert, konnte ich nur mit den wiki-beispielen testen.. -.-
    Code:
    #include <stdio.h>
    #include <conio.h> // nur fuer getch
    
    int main(void)
    {
      unsigned int i,pos=1,ergebnis=0,x=15;
      printf("Wert x=%d wird aufgeloest:\n",x);
      for(i=0;i<32;i++)
      {
        int v=((x&(1<<(31-i)))<<1);
        if(v)
        {
          v--;
          if(pos)ergebnis+=v;
          else ergebnis-=v;
          printf("%d=%d\n",i,v);
          pos=!pos;
        }
      }
      printf("ergebnis:%d\n",ergebnis);
      getch();
      return 0;
    }
    EDIT @sprinter-code:
    binär 1111 ist doch 15, da bekommst du 8 raus, in der Wiki steht 10..
    stimmt die Wiki nicht oder dein code? *fragend guck*

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Vielen Dank euch beiden, ich werde das mal ausgiebig testen
    So viele Treppen und so wenig Zeit!

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    @robocat: 15 (1111) wird abgebildet auf 8 (weiß-schwarz-schwarz=1000), wie im Wiki

    Ist wie gesagt die andere Richtung von dem, was Felix gesucht hat. Also x->gray(x) und nicht gray(x)->x
    Disclaimer: none. Sue me.

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    oh. ja. ich weiß nicht ob ichs so ganz versteh, aber ich bin auch schon etwas müde. ich glaube zu verstehen, dass ich die wandlung zum graycode nicht berücksichtigt habe.
    werde mir das morgen nochmal zu gemüte führen. nix für ungut.
    danke sprinterSB

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •