www.wikidata.de-de.nina.az
Das Hamming Gewicht einer Zeichenkette ist definiert als die Anzahl der vom Nullzeichen des verwendeten Alphabets verschiedenen Zeichen Es ist aquivalent mit dem Hamming Abstand zum Nullvektor einer gleich langen Zeichenkette die nur aus Nullzeichen besteht Fur den klassischen Fall einer binaren Zeichenfolge ist dies die Anzahl der gesetzten Bits dieser Zeichenfolge und wird auch population countoder popcountgenannt 1 und kann als die Ziffernsumme der binaren Darstellung einer gegebenen Zahl bzw als die ℓ Norm eines Bitvektors verstanden werden Die Darstellung von Grafiken ist aktuell auf Grund eines Sicherheitsproblems deaktiviert Graphische Darstellung des Hamming Gewichts der Zahlen von 0 bis 256 in Binardarstellung Inhaltsverzeichnis 1 Geschichte 2 Anwendungsbeispiele 3 Effiziente Implementierung 4 Pseudocode 5 Sprachunterstutzung 6 Prozessorunterstutzung 7 EinzelnachweiseGeschichte BearbeitenDas Hamming Gewicht ist benannt nach Richard Hamming obwohl dieser den Begriff nicht pragte 2 Im Zusammenhang mit binaren Zahlen wurde er bereits 1899 von J W L Glaisher verwendet um eine Formel fur die Anzahl der ungeraden Binomialkoeffizienten in einer einzelnen Reihe des Pascalschen Dreiecks anzugeben 3 Und Irving S Reed fuhrte 1954 ein Konzept ein das dem Hamming Gewicht fur binare Zahlen ahnlich ist 4 Anwendungsbeispiele BearbeitenDas Hamming Gewicht wird unter anderem in der Informationstheorie der Kodierungstheorie und der Kryptographie verwendet Beispiele fur Anwendungen des Hamming Gewichts sind Bei der binaren Modulo Exponentiation ist die Anzahl der modularen Multiplikationen die fur einen Exponenten e erforderlich sind log2 e Gewicht e Dies ist der Grund dafur dass fur den offentlichen Schlusselwert e der in RSA verwendet wird typischerweise eine Zahl mit niedrigem Hamming Gewicht gewahlt wird Das Hamming Gewicht bestimmt die Pfadlangen zwischen den Knoten in Chords verteilten Hash Tabellen 5 Die Suche in biometrischen Datenbanken zur Iris Erkennung wird typischerweise so implementiert dass der Hamming Abstand zu jedem gespeicherten Datensatz berechnet wird Bei Computerschach Programmen die eine Bitboard Darstellung verwenden gibt das Hamming Gewicht eines Bitboards die Anzahl der Figuren eines gegebenen Typs die im Spiel verbleiben oder die Anzahl der Quadrate des Bretts die von den Figuren eines Spielers gesteuert werden wieder und stellt einen wichtigen Faktor bei der Berechnung des Werts einer Position dar Das Hamming Gewicht kann verwendet werden um mittels der Identitat ffs x pop x x in effizienter Art und Weise das erste gesetzte Bit zu finden find first set Dies ist auf Plattformen wie SPARC nutzlich die Hardware Instruktionen fur das Hamming Gewicht aufweisen aber keine Hardware Instruktionen um das erste gesetzte Bit zu finden 6 Die Berechnung des Hamming Gewichts kann als die Umrechnung vom Unarsystem zu binaren Zahlen interpretiert werden 7 Effiziente Implementierung BearbeitenDas Hamming Gewicht einer Bitkette Bitstring wird oft in der Kryptographie und bei anderen Anwendungen benotigt Der Hamming Abstand zweier Worter A und B kann als das Hamming Gewicht von A xor B berechnet werden Das Problem wie man die Berechnung des Hamming Gewichts effizient implementieren kann wurde grundlich untersucht Einige Prozessoren haben einen einzelnen Befehl um es zu berechnen und andere haben parallele Operationen auf Bitvektoren Fur Prozessoren denen diese Eigenschaften fehlen basieren die besten Losungen auf dem Addieren von Abzahlungen in einem Baummuster Um zum Beispiel die Anzahl der 1er bits in dieser 16 bitting binaren Zahl a 0110 1100 1011 1010 zu berechnen konnen die folgenden Berechnungen durchgefuhrt werden Ausdruck Binar Dezimal Kommentara 01 10 11 00 10 11 10 10 die ursprungliche Zahl ab0 a gt gt 0 amp 01 01 01 01 01 01 01 01 01 00 01 00 00 01 00 00 1 0 1 0 0 1 0 0 jedes zweite Bit aus ab1 a gt gt 1 amp 01 01 01 01 01 01 01 01 00 01 01 00 01 01 01 01 0 1 1 0 1 1 1 1 die verbleibenden Bits aus ac b0 b1 01 01 10 00 01 10 01 01 1 1 2 0 1 2 1 1 Liste mit Anzahl der 1 in jedem 2 bit Segment aus ad0 c gt gt 0 amp 0011 0011 0011 0011 0001 0000 0010 0001 1 0 2 1 jede zweite Anzahl aus cd2 c gt gt 2 amp 0011 0011 0011 0011 0001 0010 0001 0001 1 2 1 1 die verbleibenden Anzahlen aus ce d0 d2 0010 0010 0011 0010 2 2 3 2 Liste mit Anzahl der 1 in jedem 4 bit Segment aus af0 e gt gt 0 amp 00001111 00001111 00000010 00000010 2 2 jede zweite Anzahl aus ef4 e gt gt 4 amp 00001111 00001111 00000010 00000011 2 3 die verbleibenden Anzahlen aus eg f0 f4 00000100 00000101 4 5 Liste mit Anzahl der 1 in jedem 8 bit Segment aus ah0 g gt gt 0 amp 0000000011111111 0000000000000101 5 jede zweite Anzahl aus gh8 g gt gt 8 amp 0000000011111111 0000000000000100 4 die verbleibenden Anzahlen aus gi h0 h8 0000000000001001 9 das Ergebnis fur das 16 bit WortHier wurden die Operationen wie in der C Programmiersprache verwendet X gt gt Y bedeutet also X um Y bit nach rechts zu verschieben X amp Y bedeutet das bitweise UND von X und Y und ist die gewohnliche Addition Pseudocode BearbeitenDie folgende Pseudocode zeigt eine Funktion zur Berechnung des Hamming Gewichts der eingegebenen Zeichenkette In der while Schleife werden schrittweise alle Bits der Zeichenkette rechts nach links durchlaufen und gepruft ob sie gesetzt sind function hammingGewicht int zeichenkette hammingGewicht 0 while zeichenkette lt gt 0 Solange noch nicht alle gesetzten Bits herausgeschoben wurden if das Bit ganz rechts von zeichenkette ist gesetzt hammingGewicht hammingGewicht 1 Summe um 1 erhohen verschiebe die Bits von zeichenkette um 1 nach rechts return hammingGewicht Sprachunterstutzung BearbeitenEinige C Compiler bieten intrinsische Funktionen die Bit Zahlfunktionen anbieten Zum Beispiel enthalt der GCC ab Version 3 4 im April 2004 eine eingebaute Funktion builtin popcount die eine Prozessoranweisung falls verfugbar oder ansonsten eine effiziente Bibliotheksimplementierung verwendet 8 Der LLVM GCC bietet diese Funktion ab der Version 1 5 im Juni 2005 9 In der C Standard Template Library C STL hat die Bit Array Datenstruktur bitset eine count Methode die die Anzahl der gesetzten Bits zahlt Seit C 20 gibt es die Tempalte Funktion std popcount T die fur alle standard Integer Typen explizit spezialisiert ist In Java hat die Bit Array Datenstruktur BitSet eine BitSet cardinality Methode die die Anzahl der gesetzten Bits zahlt Daruber hinaus gibt es die Funktionen Integer bitCount int und Long bitCount long um Bits in primitiven 32 Bit und 64 Bit Integern zu zahlen Auch die BigInteger Klasse fur grosse Genauigkeit hat eine BigInteger bitCount Methode die Bits zahlt In Common Lisp gibt die Funktion logcount bei einer nicht negativen Ganzzahl die Anzahl der 1 Bits zuruck fur negative Ganzzahlen gibt sie die Anzahl der 0 Bits in der 2er Komplement Notation zuruck In beiden Fallen kann die Ganzzahl ein BIGNUM sein Beginnend mit GHC 7 4 hat das Haskell Basispaket eine popCount Funktion die auf allen Typen verfugbar ist die Instanzen der Bits Klasse sind verfugbar aus dem Data Bits Modul 10 Die MySQL Version der SQL Sprache bietet BIT COUNT als Standardfunktion 11 Ab Version 3 10 bietet Python die Methode int bit count 12 Prozessorunterstutzung BearbeitenCray Supercomputer boten fruhzeitig eine popcount Maschineninstruktion an und es gibt Geruchte dass diese speziell von der National Security Agency der US amerikanischen Regierung fur Anwendungen zur Kryptoanalyse angefordert wurde Einige der Maschinen der Control Data Corporation CYBER 70 170 Serie enthielten eine popcount Instruktion in COMPASS wurde diese Instruktion als CXi kodiert AMDs Barcelona Architektur fuhrte den abm advanced bit manipulation Befehlssatz ein und brachte die POPCNT Instruktion als Teil der SSE4a Erweiterung mit Intel Core Prozessoren fuhrten eine POPCNT Instruktion mit der SSE4 2 Befehlssatzerweiterung ein die zuerst in dem im November 2008 veroffentlichten Nehalem basierten Core i7 Prozessor verfugbar war Compaqs Alpha 21264A veroffentlicht im Jahr 1999 war das erste CPU Design der Alpha Serie das die Zahl Erweiterung CIX hatte Donald E Knuths Modellcomputer MMIX der MIX in seinem Buch The Art of Computer Programming ersetzen wird hat eine SADD Instruktion SADD a b c zahlt alle Bits die 1 sind in b und 0 in c und schreibt das Ergebnis nach a Die ARM Architecture fuhrte die VCNT Instruktion als Teil der Advanced SIMD NEON Erweiterung ein Einzelnachweise Bearbeiten Donald E Knuth Bitwise tricks amp techniques Binary Decision Diagrams In The Art of Computer Programming Band 4 Fascicle 1 Addison Wesley Professional 2009 ISBN 0 321 58050 8 Entwurf PostScript 1 2 MB abgerufen am 23 Februar 2017 Thomas M Thompson From Error Correcting Codes through Sphere Packings to Simple Groups In The Carus Mathematical Monographs Nr 21 The Mathematical Association of America 1983 S 33 James Whitbread Lee Glaisher On the residue of a binomial theorem coefficient with respect to a prime modulus In The Quarterly Journal of Pure and Applied Mathematics Nr 30 1899 S 150 156 gdz sub uni goettingen de abgerufen am 23 Februar 2017 Irving S Reed A Class of Multiple Error Correcting Codes and the Decoding Scheme In I R E I E E E PGIT Nr 4 1954 S 38 Ion Stoica Robert Morris David Karger M Frans Kaashoek and Hari Balakrishnan Chord A scalable peer to peer lookup service for internet applications In Proceedings of the 2001 conference on Applications technologies architectures and protocols for computer communications ACM New York 2001 S 149 160 doi 10 1145 383059 383071 SPARC International Inc Hrsg The SPARC architecture manual Prentice Hall Englewood Cliffs N J 1992 ISBN 0 13 825001 4 S 231 gaisler com PDF Version 8 David Blaxell Computer Science and Statistics Tenth Annual Symposium on the Interface In David Hogben Dennis W Fife Hrsg NBS Special Publication Nr 503 U S Department of Commerce National Bureau of Standards Februar 1978 S 146 156 google books com GCC 3 4 Release Notes GNU Project LLVM 1 5 Release Notes LLVM Project GHC 7 4 1 release notes Abgerufen im 1 Januar 1 12 11 Bit Functions MySQL 5 0 Reference Manual Abgerufen im 1 Januar 1 What s New In Python 3 10 Python 3 10 6 documentation Abgerufen am 14 August 2022 Abgerufen von https de wikipedia org w index php title Hamming Gewicht amp oldid 232265541