Oświadczenie: Kodowanie Levenshtein jest całkowicie niezwiązane z metryką odległości edycyjnej Levenshtein .
<Wstaw tutaj długą historię o tym, dlaczego należy obliczać kody Levenshteina.>
Kod
Kodowanie Levenshteina to system przypisywania kodów binarnych nieujemnym liczbom całkowitym, który zachowuje pewną dziwną właściwość, która prawdopodobnie nie jest istotna dla tego wyzwania. Będziemy oznaczać ten kod jako L ( n ). Wikipedia opisuje to jako pięciostopniowy proces:
- Zainicjuj zmienną liczby kroków C na 1.
- Napisz binarną reprezentację liczby bez prowadzenia
1
na początek kodu. - Niech M będzie liczbą bitów zapisanych w kroku 2.
- Jeśli M nie jest równe 0, zwiększ C , powtórz od kroku 2, wpisując M jako nowy numer.
- Napisz bity C
1
i a0
na początku kodu.
Kod można jednak również opisać rekurencyjnie:
- Jeśli liczba wynosi 0, to jej kod to
0
. - Napisz binarną reprezentację liczby bez prowadzenia
1
na początek kodu. - Niech M będzie liczbą bitów zapisanych w kroku 2.
- Napisz L ( M ) na początku kodu.
- Napisz
1
trochę na początku kodu.
Dla tych, którzy wolą przykłady, oto proces rekurencyjny dla L (87654321) z oznaczeniem konkatenacji:
Wyzwanie
Napisz program lub funkcję, która, biorąc pod uwagę liczbę n , wyprowadza ciąg bitów L ( n ) w dowolnym rozsądnym formacie (obejmuje to zwracanie liczby ze wspomnianymi bitami). Standardowe luki są, jak zawsze, niedozwolone.
Przykłady
Wejście: 5
Wynik: 1110001
Wejście: 30
Wynik: 111100001110
Wejście: 87654321
Wynik: 111110000101001001110010111111110110001
Wejście: 0
Wynik: 0
±
zamiast funkcjif
.