Kody i szyfry
2. Kody numeryczne i arytmetyka cyfrowa
2.16. Kody wagowe ze zmienną wagą
Kody wagowe ze zmienną wagą lub zapisy ze zmienną podstawą (ang Mixed Radix Notation lub Mixed Radix Representation) to kody liczbowe, zasadniczo służące do reprezentowania (czyli zapisu) liczb ze zbioru N ∪ {0}.
Przypomnijmy podstawowe twierdzenie umożliwiające konstruowanie kodów wagowych. Jest to jednocześnie zasadnicze twierdzenie, na którym opiera się definicja kodów wagowych ze zmienną wagą.
1) dla każdego i = 0,1,...k, ai ∈ {0,1...<em>m<sub>i </sub></em>−1} , ak ≠ 0
2) m = akmk−1mk−2 ⋅...⋅ m0 + ak−1mk−2mk−3⋅...⋅ m0 + a2m1m0 + a1m0 + a0
Oznaczmy Ai = {0,1...<em>m<sub>i </sub></em>−1} dla i = 0,1,2 i niech A = Ai oraz
B = A0 ∪ A0 × A1 ∪ A0 × A1 × A2 ∪... ∪ A0 × A1 × A2 × ... × Ak ∪ ...
Odwzorowanie K: N ∪ {0} ∋ m → K(m) = akak−1...a1a0 ∈ B (gdzie a ∈ Ai) określone na zbiorze N ∪ {0} i zdefiniowane w powyższym twierdzeniu nazywamy kodem wagowym ze zmienną wagą lub zapisem wagowym ze zmienną wagą (ang. mixed radix notation) przy czym przyjmujemy K(0) = 0. Ta przejrzysta i prosta definicja wymaga jednak kilku uwag.
Elementy zbioru A = Ai nazywamy cyframi i często utożsamiamy je, czy wiążemy z pewnymi symbolami np. pisanymi na papierze. Raz więc możemy na element ze zbioru A = Ai patrzeć jak na liczbę raz jak na symbol. Jest to w praktyce dosyć wygodne. Oczywiście byłoby lepiej gdyby A = Ai było zbiorem skończonym. Posługiwanie się nieskończonym zbiorem symboli jest bowiem wysoce niepraktyczne.
Zauważmy, że jeśli ciąg (mi)∞i=0 jest ograniczony to A = Ai jest zbiorem skończonym a więc alfabetem. Ponadto istnieje takie k, że mi ≤ mk dla każdego i = 0,1,2... oraz Ai ⊂ Ak = A dla każdego i = 0,1,2.... Istnieje więc taki alfabet A, że odwzorowanie K przyjmuje wartości z A* a więc kod wagowy ze zmienną wagą jest kodem w sensie przyjętej definicji kodu.
Jeśli ciąg (mi)∞i=0 nie jest ograniczony to A = Ai = N ∪ {0} a więc A nie jest zbiorem skończonym i formalnie rzecz biorąc zapis wagowy K ze zmienną wagą nie jest kodem w sensie przyjętej definicji. Jeśli jednak użyć jakiegokolwiek pomocniczego kodu numerycznego K': N ∪ {0} → V* do zapisywania liczb z ze zbioru A = Ai = N ∪ {0}, gdzie V jest jakimkolwiek alfabetem (np. K': N ∪ {0} → V* może być zwykłym zapisem dziesiętnym znanym ze szkoły) to łatwo odwzorowanie K': N ∪ {0} ∋ m → K(m) = akak−1...a1a0 ∈ B tak zmodyfikować by uzyskać odwzorowanie będące kodem. Wystarczy przyjąć:
: N ∪ {0} ∋ m → (m) = K'(ak), K'(ak−1), ...K'(a1), K'(a0) ∈ (V ∪ {,})*
Podobnie jak ma to miejsce w zapisie wagowym z ustaloną wagą W, możemy w zapisie ze zmienną wagą reprezentować również liczby ułamkowe „wprowadzając kropkę”.
Zapis ze zmienną wagą jest wykorzystywany w jednym z algorytmów konwersji zapisu RNS na zapis wagowy.