Skośny system dwójkowy

Skośny system dwójkowy, binarne liczby skośne (ang. skew binary numbers) – system liczbowy, w którym liczby są reprezentowane w podobny, lecz nie identyczny, sposób do liczb dwójkowych.

W systemie binarnym kolejne cyfry (0 lub 1, licząc od prawej strony, czyli od najmniej znaczących) odpowiadają kolejnym potęgom liczby 2 (jest to system pozycyjny z bazą 2). Tak więc cyfra 1 na -tej pozycji, licząc od prawej i zaczynając numerację od 0, odpowiada liczbie

W systemie skośnym z kolei cyfra na -tej pozycji odpowiada liczbie Oprócz użycia cyfry 0 oraz 1, tak jak w zwykłych liczbach binarnych, pozwala się na użycie cyfry co odpowiada liczbie

Podsumowując liczba jest zapisana przy pomocy ciągu cyfr (zapisanych w kolejności malejącej ), a liczba którą reprezentują to

Na przykład liczba może zostać zapisana jako ponieważ

Kolejne cyfry (od prawej) odpowiadają liczbom: 1, 3, 7, 15, 31, 63, 127, 255, 1023, 2047,...

Niejednoznaczność reprezentacji i konwencja zapisu

W celu usunięcia niejednoznaczności (daną liczbę można zapisać na kilka sposobów), wprowadza się regułę: cyfra 2 może wystąpić tylko raz i musi być to cyfra, za którą jest tylko ciąg cyfr 0. Liczba 92 powyżej jest zapisana zgodnie z tą konwencją. Bez tej reguły można by napisać również: ponieważ

Początkowe liczby

Zapis początkowych 16 liczb przedstawiono w tabeli:

System dziesiętny System dwójkowy System skośny System trójkowy
0 0 0 0
1 1 1 1
2 10 2 2
3 11 10 10
4 100 11 11
5 101 12 12
6 110 20 20
7 111 100 21
8 1000 101 22
9 1001 102 100
10 1010 110 101
11 1011 111 102
12 1100 112 110
13 1101 120 111
14 1110 200 112
15 1111 1000 120

Operacje dodawania i usuwania jedynki

Pierwszym spostrzeżeniem jest, że

Tj. dodanie 1 do 2, powoduje pojawienie się 1 na następnym miejscu (przeniesienie) – o ile na następnej pozycji było wcześniej 0.

Tworzy to prostą regułę dodawania 1:

  • jeśli liczba w reprezentacji skośnej zawiera cyfrę 2 (zgodnie z konwencją jest tylko co najwyżej jedna taka cyfra), zmień ją na 0, a cyfrę następną (bardziej w lewo) zmień z 0 na 1, albo z 1 na 2. (przypadku z cyfrą 2 nie ma, ponieważ jest tylko co najwyżej jedna taka cyfra)
  • jeśli liczba w reprezentacji skośnej nie zawiera cyfry 2, zmień na pierwszej pozycji (najbardziej na prawo) cyfrę 0 na 1, albo 1 na 2.

W obu przypadkach, powstała liczba będzie zgodna z konwencją.

Przykład:

Warto zauważyć, że dodanie jedynki nie powoduje kaskadowego przenoszenia na dalsze pozycje, jak ma miejsce w normalnych systemach pozycyjnych w tym systemie dwójkowym.

Odejmowanie 1 wykonuje się w podobny (odwrotny) sposób.

Motywacja

Liczby skośne w reprezentacji rzadkiej umożliwiają dodawanie jedynki w czasie stałym. W systemie binarnym dodanie 1 do 1 powoduje wynik 0 na danej pozycji i przeniesienie 1 na następną pozycję, które z kolei znowu może wywołać nowe przeniesienia – w najgorszym przypadku trzeba przejść wszystkie cyfry, których jest

Rzadkie liczby binarne

Dodawanie (oraz odejmowanie) jedynki w liczbach skośnych zajmuje O(1) czasu, jednak należy znać pozycję cyfry 2 jeśli występuje. Można oprócz liczby pamiętać gdzie ostatnio została zapisana cyfra 2. Jednak w przypadku języków funkcyjnych, nawet ze znajomością pozycji k nie da się dojść do tego elementu w czasie stałym jeśli liczba jest reprezentowana jako lista jedno kierunkowa (trzeba przejść k elementów, których pesymistycznie może być ). W celu łatwego dostępu, liczbę zapisuje się w postaci listy w której początek listy odpowiada cyfrom mniej znaczącym (normalnie prawa strona zapisu).

 [0, 0, 2, 1, 0, 1] + 1 = [0, 0, 0, 2, 0, 1]   = 2∙15 + 1∙63 = 93

W tym celu używa się reprezentacji rzadkiej (można ją też zastosować do innych systemów liczbowych). W liście nie przechowuje się elementów równych 0, a oprócz cyfr, przechowuje się wagi (lub pozycje). Cyfrę dwa przechowuje się jako podwójna cyfra 1.

 92 = [7, 7, 15, 63]
 92 + 1 = [7, 7, 15, 63] + 1 = [7+7+1, 15, 63] = [15, 15, 63] = 93

Zamiast wag można alternatywnie przechowywać wykładniki: 92 = [2, 2, 3, 5]. 93 = [3, 3, 5]. W celu oszczędności miejsca (obie reprezentacje są sobie równoważne).

Umożliwia to wykonywanie operacji inkrementacji (dodania 1) oraz dekrementacji (odjęcie 1), w czasie stałym, niezależnie od wielkości liczby.

Zastosowania

Z powodu swoich właściwości, skośne liczby dwójkowe wykorzystuje się w językach funkcyjnych, do implementacji takich struktur danych jak listy o dostępnie swobodnym. Operacje na takich listach mają złożoność przedstawioną w poniższej tabelce w porównaniu do innych funkcyjnych struktur:

Operacja Lista Zrównoważone BST Liczby skośne
head (odczyt pierwszego elementu listy)
cons (konstrukcja nowej listy z dodanym nowym pierwszym elementem)
tail (konstrukcja nowej listy bez pierwszego elementu)
index (i-ty element) – pesymistycznie

Liczby skośne mogą być również użyte do implementacji kolejek z dostępem swobodnym w językach funkcyjnych.

Przykład implementacji

Przykład operacji dodawania oraz konwersji na liczbę lub notację pozycyjną (implementacja w języku programowania Erlang). Używa formatu rzadkiej notacji wykładnikowej, np. 92 = [2,2,3,5].

zero() -> [].

% Operacja inc wykonuje się w czasie stałym!
inc([X,X|T]) -> [X+1|T];
inc([X|T])   -> [0,X|T];
inc([])      -> [0].

% [2,2,3,5] -> "101200".
to_display([]) -> [$0];
to_display(L)  -> to_display(L, [], false, 0).

to_display([X,X|T], Acc, _, X)  -> to_display(T, [$2 | Acc], false, X+1);
to_display([X|T], Acc, _, X)    -> to_display(T, [$1 | Acc], false, X+1);
to_display([_|_T]=L, Acc, _, X) -> to_display(L, [$0 | Acc], true, X+1);
to_display([], Acc, true, _X)   -> [$1 | Acc];
to_display([], Acc, false, _X)  -> Acc.

% [2,2,3,5] -> [7,7,15,63].
to_exps(L) -> [ (1 bsl (X+1)) - 1 || X <- L ].

% [7,7,15,63] -> "63+15+7+7".
to_sum([]) -> "0";
to_sum(L) -> string:join([ integer_to_list(P) || P <- to_exps(L) ], "+").

% [2,2,3,5] -> 92.
to_number(L)  -> lists:foldl(fun(X, Acc) -> Acc +  ((1 bsl (X+1)) - 1) end, 0, L).
%to_number2(L) -> lists:sum(to_exps(L)). % alternatywnie

% pokazuje pierwsze N liczb
first(N) -> lists:foldl(fun(I, X) ->
      io:format("~p:   \t~p     \t= ~s        \t= ~p     \t= ~s_skew~n", [I-1, X, to_sum(X), to_number(X), to_display(X)]),
      inc(X)
   end, zero(), lists:seq(1, N)).

Wynik działania:

 first(101).
 0:    []              = 0             = 0             =      0_skew
 1:    [0]             = 1             = 1             =      1_skew
 2:    [0,0]           = 1+1           = 2             =      2_skew
 3:    [1]             = 3             = 3             =     10_skew
 4:    [0,1]           = 3+1           = 4             =     11_skew
 5:    [0,0,1]         = 3+1+1         = 5             =     12_skew
 6:    [1,1]           = 3+3           = 6             =     20_skew
 7:    [2]             = 7             = 7             =    100_skew
 8:    [0,2]           = 7+1           = 8             =    101_skew
 9:    [0,0,2]         = 7+1+1         = 9             =    102_skew
 10:   [1,2]           = 7+3           = 10            =    110_skew
 11:   [0,1,2]         = 7+3+1         = 11            =    111_skew
 12:   [0,0,1,2]       = 7+3+1+1       = 12            =    112_skew
 13:   [1,1,2]         = 7+3+3         = 13            =    120_skew
 14:   [2,2]           = 7+7           = 14            =    200_skew
 15:   [3]             = 15            = 15            =   1000_skew
...
 90:   [0,0,1,2,3,5]   = 63+15+7+3+1+1 = 90            = 101112_skew
 91:   [1,1,2,3,5]     = 63+15+7+3+3   = 91            = 101120_skew
 92:   [2,2,3,5]       = 63+15+7+7     = 92            = 101200_skew
 93:   [3,3,5]         = 63+15+15      = 93            = 102000_skew
 94:   [4,5]           = 63+31         = 94            = 110000_skew
 95:   [0,4,5]         = 63+31+1       = 95            = 110001_skew
 96:   [0,0,4,5]       = 63+31+1+1     = 96            = 110002_skew
 97:   [1,4,5]         = 63+31+3       = 97            = 110010_skew
 98:   [0,1,4,5]       = 63+31+3+1     = 98            = 110011_skew
 99:   [0,0,1,4,5]     = 63+31+3+1+1   = 99            = 110012_skew
 100:  [1,1,4,5]       = 63+31+3+3     = 100           = 110020_skew

Zobacz też

Referencje

Read other articles:

Mappa del Burkina Faso con indicati i suoi confini. Mappa del Togo. Il confine tra il Burkina Faso e il Togo descrive la linea di demarcazione tra questi due stati. Ha una lunghezza di 126 km. Caratteristiche La linea di confine interessa la parte sud-orientale del Burkina Faso e quella settentrionale del Togo. Ha un andamento generale da ovest verso est. Inizia alla triplice frontiera tra Burkina Faso, Ghana e Togo[1] e termina alla triplice frontiera tra Benin, Burkina Faso e Togo&#...

 

 

Para personil yang menggunakan pakaian hazmat Pakaian hazmat (hazmat adalah singkatan dari hazardous materials atau bahan-bahan berbahaya), atau dikenal juga dengan nama pakaian dekontaminasi,[1] adalah perlengkapan perlindungan pribadi yang terdiri dari bahan yang impermeabel dan digunakan untuk proteksi melawan material berbahaya, termasuk patogen, kuman dan penyakit berbahaya lainnya agar tidak mencapai bagian dalam tubuh manusia yang rentan.[2] Bahan pakaian ini—menurut ...

 

 

Alex AionoAiono pada SWR3 New Pop Festival 2017LahirMartin Alexander Aiono[1]16 Februari 1996 (umur 28)Utah,[2] Amerika SerikatPekerjaan Penyanyi pemeran Tahun aktif2011–sekarangKarier musikGenre Pop R&B LabelBecome RecordsSitus webalexaiono.comInformasi YouTubeKanal AlexAiono Tahun aktif2011–sekarangPelanggan5.75 juta[3]Total tayang1.03 miliar[3] Penghargaan Kreator 100.000 pelanggan 1.000.000 pelanggan Diperbarui: 14 Januari 2024 ...

Ini adalah nama Melayu; nama Shirlin merupakan patronimik, bukan nama keluarga, dan tokoh ini dipanggil menggunakan nama depannya, Rosnah. Yang Berhormat DatukRosnah Abdul Rashid Shirlin Deputi Menteri Pekerjaan MalaysiaPetahanaMulai menjabat 16 Mei 2013MenteriFadillah Yusof PendahuluYong Khoon SengPenggantiPetahanaAnggota Parlemen Malaysiadapil Papar, SabahPetahanaMulai menjabat 2004 PendahuluOsu SukamPenggantiPetahanaDeputi Menteri Kesehatan MalaysiaMasa jabatan10 April 2009 �...

 

 

Kerajaan WürttembergKönigreich Württemberg1806–1918 Bendera Lambang Semboyan: Furchtlos und treuLagu kebangsaan: Württemberger HymneStatusNegara Konfederasi Rhein(1806–1813)Negara Konfederasi Jerman(1815–1866)Negara federasi Kekaisaran Jerman(1871–1918)Ibu kotaStuttgartBahasa yang umum digunakanJerman SwabiaAgama Protestan, Katolik RomaPemerintahanMonarki konstitusionalRaja • 1806–1816 Frederick I• 1816–1864 William I• 1864–1891 Charl...

 

 

Violent action motivated by sexual behavior against another person without consent This article is about human sexual assault. For similar behavior in other animals, see Sexual coercion among animals. Medical conditionSexual assaultSpecialtyEmergency medicine Part of a series onViolence against women Killing Bride burning Dowry death Honor killing Femicide Infanticide Matricide Pregnant women Sati Sororicide Uxoricide Sexual assault and rape Causes of sexual violence Child sexual initiation E...

Xenosauridae Xenosaurus grandis Klasifikasi ilmiah Kerajaan: Animalia Filum: Chordata Kelas: Reptilia Ordo: Squamata Subordo: Lacertilia Famili: XenosauridaeCope, 1886 Genus: XenosaurusCope, 1886 Genus †Exostinus †Restes Xenosaurus Xenosauridae adalah keluarga kadal yang terdiri dari tiga genus. Namun hanya satu genus yaitu Xenosaurus yang masih hidup di zaman ini. Genus yang sudah punah yaitu Exostinus dan Restes. Seperti kadal lain pada umumnya, kadal-kadal ini membutuhkan sinar mataha...

 

 

追晉陸軍二級上將趙家驤將軍个人资料出生1910年 大清河南省衛輝府汲縣逝世1958年8月23日(1958歲—08—23)(47—48歲) † 中華民國福建省金門縣国籍 中華民國政党 中國國民黨获奖 青天白日勳章(追贈)军事背景效忠 中華民國服役 國民革命軍 中華民國陸軍服役时间1924年-1958年军衔 二級上將 (追晉)部队四十七師指挥東北剿匪總司令部參謀長陸軍�...

 

 

安倍晋太郎安倍晋太郎(攝於1987年4月21日) 日本第112、113任外務大臣任期1982年11月27日—1986年7月22日总理中曾根康弘前任櫻内義雄继任倉成正 日本第42任通商產業大臣任期1981年11月30日—1982年11月27日总理鈴木善幸前任田中六助(日语:田中六助)继任山中貞則 日本第41任内閣官房長官任期1977年11月28日—1978年12月7日总理福田赳夫前任園田直继任田中六助(日语�...

4e session du Comité du patrimoine mondial Type Session Édition 4e Pays France Localisation Paris Organisateur Comité du patrimoine mondial Date Du 1er septembre 1980 au 5 septembre 1980 Site web whc.unesco.org/fr/sessions/04COM 3e session 1re session extraordinaire modifier  La 4e session du Comité du patrimoine mondial a eu lieu du 1er septembre 1980 au 5 septembre 1980 à Paris, en France. Participants Les membres du comité du patrimoine mondial sont représe...

 

 

莎拉·阿什頓-西里洛2023年8月,阿什頓-西里洛穿著軍服出生 (1977-07-09) 1977年7月9日(46歲) 美國佛羅里達州国籍 美國别名莎拉·阿什頓(Sarah Ashton)莎拉·西里洛(Sarah Cirillo)金髮女郎(Blonde)职业記者、活動家、政治活動家和候選人、軍醫活跃时期2020年—雇主內華達州共和黨候選人(2020年)《Political.tips》(2020年—)《LGBTQ國度》(2022年3月—2022年10月)烏克蘭媒�...

 

 

Critics organization Critics Choice AssociationFormation1995; 29 years ago (1995)LocationLos AngelesMembership 637 (September 2023)[1]PresidentJoey BerlinBoard of DirectorsJohn De SimioJim FergusonMark RamseySara VoorheesAffiliationsBroadcast Television Journalists Association (since 2011)Websitecriticschoice.comFormerly calledBroadcast Film Critics Association The Critics Choice Association (CCA), formerly the Broadcast Film Critics Association (BFCA) is an ass...

Group of Romani people in Wales Ethnic group KaleKalá, ValshanangeA Welsh Kale family, 1951Total population700 to 1,000[1] (1991, est.)Regions with significant populationsNorthwestern WalesLanguagesWelsh, English; historically Welsh RomaniReligionChristianityRelated ethnic groupsRomanichal Part of a series onRomani people Archaeology Cuisine Culture Dance Dress Folklore History Language Media Music Names People Religion Settlements Romani people by sub-group Arlije Bergitka Roma Burg...

 

 

Untuk jenis spesifik konservasi, lihat Konservasi (disambiguasi). Konservasionisme beralih ke halaman ini, yang bukan mengenai Konservatisme. Air terjun Hopetoun, Australia. Gerakan konservasi, yang juga dikenal sebagai pelestarian alam, adalah sebuah gerakan politik, lingkungan hidup dan sosial yang bertugas untuk melindungi sumber daya alam yang meliputi spesies hewan dan tumbuhan serta habitat mereka untuk masa depan. Gerakan konservasi awal meliputi perikanan dan manajemen kehidupan liar,...

 

 

Object or record accepted as payment For other uses, see Money (disambiguation). Banknotes and coins Money is any item or verifiable record that is generally accepted as payment for goods and services and repayment of debts, such as taxes, in a particular country or socio-economic context.[1][2][3] The primary functions which distinguish money are: medium of exchange, a unit of account, a store of value and sometimes, a standard of deferred payment. Money was historica...

2019 European Athletics U23 ChampionshipsTrack events100 mmenwomen200 mmenwomen400 mmenwomen800 mmenwomen1500 mmenwomen5000 mmenwomen10,000 mmenwomen100 m hurdleswomen110 m hurdlesmen400 m hurdlesmenwomen3000 msteeplechasemenwomen4 × 100 m relaymenwomen4 × 400 m relaymenwomenRoad events20 km walkmenwomenField eventsHigh jumpmenwomenPole vaultmenwomenLong jumpmenwomenTriple jumpmenwomenShot putmenwomenDiscus throwmenwomenHammer throwmenwomenJavelin throwmenwomenCombined eventsHeptathlonwome...

 

 

Slavery as practised within the pre-conquest central Mexican society This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Slavery in the Aztec Empire – news · newspapers · ...

 

 

Judas PriestJudas Priest di panggung pada Moline, Illinois.Informasi latar belakangAsalBirmingham, InggrisGenreHeavy metalTahun aktif1969–sekarangLabelEpic, Columbia, CMC, Koch, RCA, GullArtis terkaitTrapeze, Fight, The Flying Hat Band, Halford, 2wo, Racer X, Iced Earth, Al Atkins, Beyond FearSitus webOfficial websiteAnggotaRob HalfordGlenn TiptonK. K. DowningIan HillScott TravisMantan anggotaSee: Judas Priest mantan anggota Judas Priest adalah salah satu kelompok musik heavy metal paling b...

2008 video game This article is about the rhythm game series. For other uses, see Tap tap (disambiguation). 2008 video gameTap Tap RevengeTap Tap Revenge App Store iconDeveloper(s)TapulousPublisher(s)TapulousDesigner(s)Louie Mantia, Tino BediPlatform(s)iOSReleaseWW: July 11, 2008Genre(s)MusicMode(s)Single-player, multiplayer Tap Tap Revenge (also known as Tap Tap Revenge Classic) was a music game created by Nate True, and developed and published by Tapulous for iOS in July 2008. It is the fir...

 

 

This article is about only the executive branch, headed by the Prime minister. For all branches, see Politics of Mongolia.This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Government of Mongolia – news · newspapers · books · scholar · JSTOR (June 2024) (Learn how and when to remove this message) Government of ...