XOR連結リスト

XOR連結リスト: XOR linked list)は、プログラミングにおけるデータ構造の一種。ビット毎排他的論理和 (XOR) の特徴を生かして、双方向連結リストに必要なメモリ量を削減する。なお、以下ではXOR演算を ⊕ と記述する。

概要

通常の双方向連結リストは、リスト上の前後のノードのアドレスを各ノードに格納する。従って、アドレス格納フィールドを2つ必要とする。

  ...  A       B         C         D         E  ...
           –>  next –>  next  –>  next  –>
           <–  prev <–  prev  <–  prev  <–

XOR連結リストでは、同じ情報を1つのアドレスフィールドに圧縮する。このとき、"prev" と "next" のアドレスについてビット毎のXOR演算を行った値をそのフィールドに格納する。

  ...  A        B         C         D         E  ...
          <–>  A⊕C  <->  B⊕D  <->  C⊕E  <->

このリストを左から右に走査するとして、現在 C を見ているとすると、前に走査した B のアドレスが分かっており、同時に C のリンクフィールドの値 (B⊕D) も分かっている。これらの情報から D のアドレスが求められ、リストの走査を続行できる。逆方向からの走査も同様である。

リスト上のある位置からどちらかの方向に走査を開始するには、連続する2つのノードのアドレスを知る必要がある。ひとつのノードのアドレスが分かっているだけでは、リスト上を移動できない。2つのノードがリスト上どういう順序で連結されているかが分からないと、どちらの方向に走査しているのか分からなくなる。

XOR連結リストは、以下のような問題を抱えている。

  • 汎用的なデバッガはXOR連結リストを追うことができないので、デバッグが難しくなる。
  • メモリ使用量を削減するのと引き換えにコードの複雑性が増し、コード保守が大変になる。
  • 多くのガベージコレクション手法では、実際のポインタでないとうまく機能しない。
  • ポインタ型のXOR演算は定義されていないことがある(例えば、C言語)ので、ポインタ型と整数型の間で型変換が必要となる。
  • リスト上を走査する場合、常に1つ前のノードのアドレスを保持していないと、走査できない。
  • 例えば、別の構造体にXOR連結リスト上のノードのアドレスがある場合、その構造体からノードが得られても、そのノードをリストから外す操作やそのノードの次に別のノードを挿入する操作が不可能である。例えば、使用中のプロセス制御ブロック(PCB)を対応するプロセスの終了時に使用中リストからフリーリストに繋ぎ変えるといった場合、使用中PCBリストはXOR連結リストでは構成できない。

コンピュータのメモリは増大しているため、XOR連結リストは一部の組み込みシステムのようなメモリが限られている場合以外では無用となっている。組み込みシステムでも、Unrolled linked list の方がより実用的である(キャッシュヒット率を向上させ、ランダムアクセス性能が向上するという利点もある)。

特徴

  • リスト上の1つのノードだけが分かった状態では、そのリスト上の他のノードのアドレスは得られない。
  • あるノードから次のノードに移動(走査)していくには、XOR演算を2回行えばよく、どちらの方向でも同じ処理になる。{…B C D…} というリストがあって、レジスタ R1 には現在のノードのアドレス(例えば C)、レジスタ R2 には前のノード(例えば D)のアドレスと現在のノード(C)のアドレスを XOR したもの(C⊕D)が格納されているとする。このとき、次のノードのアドレスを得る処理を System/360 の命令で表すと次のようになる。
 X  R2,Link    R2 <- C⊕D ⊕ B⊕D (すなわち、B⊕C となる。"Link" は現在ノードのリンク
                                   フィールドであり、B⊕D が格納されている)
 XR R1,R2      R1 <- C ⊕ B⊕C    (すなわち、B が得られる)
  • リストの終端は次のノードのアドレスがゼロであるとしておく({0 A B C…})。すなわち、A のリンクフィールドは 0⊕B となる。従って、上記の命令列の後で得られたアドレスがゼロかどうかをチェックしなければならない。この場合、リストの先頭を保持するときに A のアドレスだけを保持すればよい(1つ前のアドレスがゼロであることが自明であるため)。
  • 別の方式として、リスト終端が走査に対して自動的に反射するようにもできる。この場合は端のノードのリンクフィールドをゼロにしておく。例えば、B から A の方向に移動してきたとき、A のリンクフィールドがゼロであれば、上記命令列を実施すると B のアドレスが得られる。ただしこの場合、リストの先頭を保持するときに A と B のアドレスを保持しておく必要がある(A だけでは次のノードのアドレスが全く分からないため)。

なぜうまくいくのか?

鍵となるのは、最初の命令と以下のようなXORの性質である。

  • X⊕X=0
  • X⊕0=X
  • X⊕Y=Y⊕X
  • (X⊕Y)⊕Z=X⊕(Y⊕Z)

R2 レジスタには、現在のノード C のアドレスと1つ前のノードのアドレス P の XOR、すなわち C⊕P が常に格納されている。ノードのリンクフィールドには、前後のノードのアドレスのXOR、すなわち L⊕R が格納されている。従って、R2 (C⊕P) と現在のリンクフィールド (L⊕R) の XOR を求めると C⊕P⊕L⊕R となる。

  • 1つ前のノードが L であった場合、P と L は同じなので打ち消しあい、C⊕R が残る。
  • 1つ前のノードが R であった場合、P と R は同じなので打ち消しあい、C⊕L が残る。

どちらの場合も、残るのは現在のアドレスと次のノードのアドレスの XOR である。これを R1 にある現在ノードのアドレスと XOR することで次のノードのアドレスだけが残る。このとき、R2 には新たな現在ノードと1つ前のノードのアドレスの XOR が残されている。

変種

XOR連結リストの考え方は、同様の性質を持つ任意の二項演算にも応用できる。XORを加算や減算に置換したものは、XORの場合とは微妙に異なるが、ほぼ同等な機能を持つ。

加算連結リスト

  ...  A        B         C         D         E  ...
          <–>  A+C  <->  B+D  <->  C+E  <->

この場合、次のノードのアドレスは、1つ前のノードのアドレスを現在ノードのリンクフィールドの値から減算することで得られる。XOR連結リストとほぼ同じだが、終端ノードのリンクフィールドをゼロにしても反射することはない。なお、加算によってオーバーフローを起こしても何ら問題はない。

減算連結リスト

  ...  A        B         C         D         E  ...
          <–>  C-A  <->  D-B  <->  E-C  <->

この場合、走査する方向によって処理が異なる。順方向の場合、現在のリンクフィールドの値に1つ前のノードのアドレスを加算することで、次のノードのアドレスが得られる。逆方向の場合、現在のリンクフィールドの値を1つ前のノードのアドレスから減算することで、次のノードのアドレスが得られる。

減算連結リストは、リスト全体をノード間の位置関係を保ったままメモリ上で移動させた場合、リンクフィールドに全く変更を加える必要がない。これはXOR連結リストにも普通の連結リストにもない利点である。また、C言語ではポインタ型を整数型にキャストする必要もない。C言語では2つのポインタの減算結果は自動的に整数[1]になるからである。

脚注

  1. ^ ただし、そのポインタが指す型に依った値になる。また、標準では1個の配列の中を指すポインタ同士でなければならないことになっている。

関連項目

Read other articles:

1997 studio album by Víctor ManuelleA Pesar de TodoStudio album by Víctor ManuelleReleasedJune 3, 1997RecordedNovember 1996 - May 1997Studio Powerlight, Puerto Rico Sir Sound, Inc., New York, NY GenreSalsaLength43:09LabelSony DiscosProducerSergio GeorgeVíctor Manuelle chronology Victor Manuelle(1996) A Pesar de Todo(1997) Ironías(1998) Singles from A Pesar de Todo Dile a EllaReleased: June 14, 1997 He TratadoReleased: September 13, 1997 Así es la MujerReleased: January 17, 1998 E...

 

Nomor telepon di Jepang terdiri dari kode area, nomor sentral, dan nomor pelanggan. Awalan panggilan 001, 00xx, 002xx, 0091xx Awalan pilihan operator 184 Awalan untuk menyembunyikan ID penelepon 186 Awalan untuk memberikan ID penelepon Jenis nomor 1xx Nomor khusus 001 dan 00xx Kode pilihan operator 0x 2 digit kode area geografis 0xx 3-digit kode area geografis 0xxx 4 digit kode area geografis 0xxxx 5 digit kode area geografis 0x0 3-digit kode area non-Geografis (kecuali 010) 0xx0 4 digit kode...

 

العلاقات الألمانية الليسوتوية ألمانيا ليسوتو   ألمانيا   ليسوتو تعديل مصدري - تعديل   العلاقات الألمانية الليسوتوية هي العلاقات الثنائية التي تجمع بين ألمانيا وليسوتو.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه الم...

Chronologie de la France ◄◄ 1767 1768 1769 1770 1771 1772 1773 1774 1775 ►► Chronologies Malesherbes, gravure du XIXe siècle.Données clés 1768 1769 1770  1771  1772 1773 1774Décennies :1740 1750 1760  1770  1780 1790 1800Siècles :XVIe XVIIe  XVIIIe  XIXe XXeMillénaires :-Ier Ier  IIe  IIIe Chronologies thématiques Art Architecture, Arts plastiques (Dessin, Gravure, Peinture et Sculpture), Littérature, Musique classiq...

 

Computer system with a dedicated function An embedded system on a plug-in card with processor, memory, power supply, and external interfaces An embedded system is a computer system—a combination of a computer processor, computer memory, and input/output peripheral devices—that has a dedicated function within a larger mechanical or electronic system.[1][2] It is embedded as part of a complete device often including electrical or electronic hardware and mechanical pa...

 

Inverso Pinascacomune Inverso Pinasca – VedutaIl municipio LocalizzazioneStato Italia Regione Piemonte Città metropolitana Torino AmministrazioneSindacoLuciano Bounous (lista civica Vivi Inverso Pinasca) dal 27-5-2019 TerritorioCoordinate44°56′44.3″N 7°13′06.29″E / 44.94564°N 7.218414°E44.94564; 7.218414 (Inverso Pinasca)Coordinate: 44°56′44.3″N 7°13′06.29″E / 44.94564°N 7.218414°E44.94564; 7.218414 (Inv...

Questa voce sull'argomento militari statunitensi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. David Dixon PorterNascitaChester, 8 giugno 1813 MorteWashington, 13 febbraio 1891 Dati militariPaese servito Messico Stati Uniti Unione Forza armata Armada de México United States Navy Union Navy Anni di servizio1825-1828 1829-1891 GradoMezzomarinaio (Armada de México) Ammiraglio (United Stat...

 

Pour les articles homonymes, voir Snap. Snap Informations Développé par Canonical Ltd. Dépôt github.com/snapcore Système d'exploitation GNU/Linux Type Gestionnaire de paquets Licence Licence publique générale GNU version 3 Site web snapcraft.io modifier - modifier le code - voir Wikidata (aide) Snap est un système d'empaquetage et de déploiement de logiciels développé par Canonical pour les systèmes d'exploitation utilisant le noyau Linux. Les paquets, appelés snaps, et l'outil ...

 

Imperatore dei RomaniStemma utilizzato dagli imperatori paleologi Nome originale(EL) Αὐτοκράτωρ Καῖσαρ Αὔγουστος, Βασιλεὺς τῶν Ῥωμαίων, Autokràtōr Kàisar Àugoustos, Basilèus tôn Rhōmàiōn(LA) Imperator Caesar Augustus, Imperator Romanorum StatoImpero romano d'OrienteImpero romano d'Occidente (per alcuni periodi) Istituito11 maggio 330 daCostantino I PredecessoreImperatore romano Soppresso29 maggio 1453 daMehmed II SuccessoreQaysar-ı Ru...

Salib menari. Salib menari (bahasa Inggris: the dancing cross) adalah sebuah konsep teologi salib yang berangkat dari konteks kekristenan di Bali. Salib menari adalah pemaknaan salib melalui pendekatan budaya dan karakter manusia Bali. Salib menari merupakan salah satu bagian dalam simbol atau logo Gereja Kristen Protestan di Bali (GKPB). Logo GKPB yang berisikan gambar salib menari ini, mulai digunakan pada tahun 1977. Logo GKPB dalam bentuk gambar dibuat oleh salah satu seniman Bali, I ...

 

Duta Besar Amerika Serikat untuk Papua NuginiSegel Kementerian Dalam Negeri Amerika SerikatDicalonkan olehPresiden Amerika SerikatDitunjuk olehPresidendengan nasehat Senat Berikut ini adalah daftar Duta Besar Amerika Serikat untuk Papua Nugini Daftar Mary S. Olmsted Harvey J. Feldman M. Virginia Schafer Paul Fisher Gardner Everett E. Bierman Robert William Farrand Richard W. Teare Arma Jane Karaer Susan S. Jacobs Robert W. Fitts Leslie V. Rowe Teddy B. Taylor[1] Walter E. North Cather...

 

New York City Subway expansion 7 Subway Extension The 7 and 7 Express (designated as <7> on rolling stock) services serve the entire 7 Subway Extension.OverviewOwnerCity of New YorkTerminiTimes Square34th Street–Hudson YardsStations1 constructed(1 proposed)ServiceTypeRapid transitSystemNew York City SubwayOperator(s)New York City Transit AuthorityHistoryOpenedSeptember 13, 2015; 8 years ago (2015-09-13)TechnicalLine length1.5 mi (2.4 km)Number of tracks2Cha...

Former university in Ingolstadt, Bavaria (1472–1800) 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: University of Ingolstadt – news · newspapers · books · scholar · JSTOR (December 2016) (Learn how and when to remove this message) University of IngolstadtGarden façade of the Alte Anatomie at the Universi...

 

Territorial legislature of the Northern Mariana Islands Northern Mariana Islands Commonwealth Legislature22nd LegislatureTypeTypeBicameral HousesSenate House of RepresentativesLeadershipPresident of the SenateEdith DeLeon Guerrero (D) since January 9, 2023 Speaker of the HouseEdmund Villagomez (I-D) since January 13, 2021 StructureSeats29 voting members 9 senators 20 representatives Senate political groups   Republican (4)   Independent (3)   Democratic (2)   Coali...

 

Hotel in Manhattan, New York This article is about the hotel in New York City. For the Native American reservation in upstate New York, sometimes known as St. Regis, New York, see St. Regis Mohawk Reservation. St. Regis New YorkThe hotel's Fifth Avenue facade in 2021General informationLocation2 East 55th StreetManhattan, New YorkCoordinates40°45′41″N 73°58′29″W / 40.76139°N 73.97472°W / 40.76139; -73.97472OpenedSeptember 4, 1904; 119 years ago&...

Surinamese footballer (born 1988) Tjaronn Chery Chery with NEC in 2024Personal informationFull name Tjaronn Inteff Chefren Chery[1]Date of birth (1988-06-04) 4 June 1988 (age 36)Place of birth Enschede, NetherlandsHeight 1.71 m (5 ft 7 in)Position(s) Attacking midfielderTeam informationCurrent team NECNumber 9Youth career UDI Enschede Victoria '282002–2008 TwenteSenior career*Years Team Apps (Gls)2008–2010 Twente 1 (0)2009 → Cambuur (loan) 15 (0)2009–2010 �...

 

وزارة البيئة والتخطيط العمراني والتغير المناخي (تركيا) تفاصيل الوكالة الحكومية البلد تركيا  تأسست 29 يونيو 2011  المركز أنقرة  الإدارة موقع الويب الموقع الرسمي  تعديل مصدري - تعديل   وزارة البيئة والتخطيط العمراني والتغير المناخي ( (بالتركية: Çevre, Şehircilik ve İklim Değişi...

 

Chemical compound Aluminium sulfate Names IUPAC name Aluminium sulfate Other names Aluminum sulfateAluminium sulphateCake alumFilter alumPapermaker's alumAlunogenitealuminium salt (3:2) Identifiers CAS Number 10043-01-3 Y7784-31-8 (octadecahydrate) Y 3D model (JSmol) Interactive image ChemSpider 23233 Y ECHA InfoCard 100.030.110 EC Number 233-135-0 E number E520 (acidity regulators, ...) PubChem CID 24850 RTECS number BD1700000 UNII I7T908772F YTCS9L00G8F (octade...

Group of stereoisomers MethastyridoneClinical dataATC codenoneIdentifiers IUPAC name 2,2-dimethyl-5-[(E)-2-phenylethenyl]-1,3-oxazolidin-4-one CAS Number721-19-7PubChem CID6083100ChemSpider4801920UNIIC1846N9AVWCompTox Dashboard (EPA)DTXSID60862388 Chemical and physical dataFormulaC13H15NO2Molar mass217.268 g·mol−13D model (JSmol)Interactive image SMILES CC1(C)NC(=O)C(O1)\C=C\c2ccccc2 InChI InChI=1S/C13H15NO2/c1-13(2)14-12(15)11(16-13)9-8-10-6-4-3-5-7-10/h3-9,11H,1-2H3,(H,14,15)/b9-8+K...

 

Questa voce sugli argomenti laghi d'Italia e Valle d'Aosta è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Lago di CignanaLac de TsignanazStato Italia Regione Valle d'Aosta ComuneValtournenche Coordinate45°52′52.8″N 7°35′22.25″E45°52′52.8″N, 7°35′22.25″E Altitudine2.149 m s.l.m. DimensioniSuperficie0,72[1] km² Profondità massima50,9[1] ...