บทความนี้ไม่มีจาก |
รางการโยงXOR (อังกฤษ: XOR Linked list) เป็นโครงสร้างข้อมูลที่ใช้ในการโปรแกรมคอมพิวเตอร์ โดยใช้ประโยชน์จากการทำ XOR (จะแทนด้วยเครื่องหมาย⊕) เพื่อลดการใช้พื้นที่ของ doubly linked list โดย doubly linked list ตามปกติจะเก็บค่าที่อยู่ของ node ที่อยู่ก่อนหน้าและ node ที่อยู่ถัดไปของแต่ละ node ซึ่งต้องเสียพื้นที่ในการเก็บ2ที่
XOR linked list จะทำการเก็บข้อมูลทั้งสองอย่างในที่เดียวโดยการทำ bit wise XOR ที่อยู่ของ node ที่อยู่ก่อนหน้าและที่อยู่ของ node ที่อยู่ถัดไป
จากรูป เมื่อตรวจของใน list จากซ้ายไปขวา เมื่ออยู่ที่ C ก็จะรู้ที่อยู่ของ node ที่อยุ่ก่อนหน้าคือ B เมื่อนำที่อยู่ของ B ไป XOR กับค่า link ของ C (ฺB ⊕ D) ก็จะได้ค่าที่อยุ่ของ D ทำให้สามารถไปทางขวาต่อได้ ซึ่งการทำแบบนี้สามารถทำได้ในทางกลับกันด้วยเพื่อจะตรวจค่าใน list ไม่ว่าจะทางไหน จำเป็นต้องรู้ค่าที่อยู่ของ 2 node ที่อยู่ติดกันก่อน ไม่สามารถทำได้โดยรู้แค่ค่าเดียว และถ้าเรียงสลับกันก็จะตรวจไปในทางตรงข้าม
บางครั้งก็ไม่ควรใช้ XOR linked list:
- การ debug ทำได้ยาก เพราะเครื่องมือในการ debug จะตามสายการ XOR ไม่ได้
- เพื่อแลกกับการประหยัดพื้นที่ ทำให้ไปเพิ่มความยุ่งยากในส่วนของ code เป็นอย่างมาก ทำให้การดูแลทำได้ยาก
- XOR ของ pointer ทำไม่ได้ในบางภาษา
- ไม่สามารถอ่านค่า pointer ได้ถ้าไม่ได้มาจากการตรวจใน list เช่น ถูกชี้มาจากโครงสร้างข้อมูลอื่น
- ในขณะที่ตรวจค่าจำเป็นต้องจำที่อยู่ของ ของก่อนหน้า เพื่อจะคำนวณที่อยู่ของ node ถัดไป
คุณสมบัติ
ถ้ารู้ node ใน list แค่ node เดียวจะไม่สามารถเข้าถึงส่วนอื่นๆของ list ได้ ใช้การ XOR เพียง2ครั้งในการตรวจไปที่ node ต่อไป โดยให้ให้มีregister 2 ตัว ตัวหนึ่งเก็บค่าของที่อยู่ปัจจุบัน และอีกตัวเก็บค่าของที่อยู่ปัจจุบัน XOR กับที่อยู่ก่อนหน้า พิจารณา list ที่มี {...B C D...} จากขวาไปซ้าย และให้ R1 R2 เป็น register ให้ R1 เก็บค่าที่อยู่ปัจจุบัน (สมมติให้อยุ่ที่ C) และให้ R2 เก็บค่าของที่อยู่ปัจจุบัน XOR กับที่อยู่ก่อนหน้า (C ⊕ D) จะสามารถหาที่อยุ่ของ B ได้โดย R2⊕ค่า link ของ C (B ⊕ D) จะได้ C ⊕ D ⊕ B ⊕ D = B ⊕ C แล้วนำไป XOR กับ R1 จะได้ B ⊕ C ⊕ C= B
X R2,Link R2 <- C⊕D ⊕ B⊕D XR R1,R2 R1 <- C ⊕ B⊕C
ที่ปลายของ list จะให้ทำเหมือนมี node ที่มีที่อยู่เป็น 0 วางติดอยู่ที่ปลายเหมือน {0 A B C...} ค่า link ที่เก็บที่ A จะเป็น 0⊕B โดยจะต้องเพิ่มคำสั่งเพื่อตรวจสอบด้วยว่าค่าที่อยู่ต่อไปเป็น 0 หรือไม่ และที่ปลายของ list สามารถทำสะท้อนได้โดยให้เก็บ link เป็น 0 (จะเหมือน node ที่อยู่ทางซ้ายกับขวาเป็น node เดียวกัน XOR ของของที่เหมือนกันจะได้ 0)
ทำงานได้อย่างไร
จากคุณสมบัติ
X⊕X=0
X⊕0=X
X⊕Y=Y⊕X
(X⊕Y) ⊕Z=X⊕ (Y⊕Z)
register R2 จะเก็บค่า XOR ของ ที่อยู่ปัจจุบันและที่อยู่ก่อนหน้าเสมอ และค่า link จะเก็บXOR ของทางซ้ายและทางขวา ทำให้ค่า XOR ของ R2 และ link ถ้าแทนซ้ายด้วย L ขวาด้วย R ปัจจุบันด้วย C และ ตัวก่อนหน้าด้วย P จะได้ค่า R2 ⊕ link = C ⊕ P ⊕ L ⊕ R
ถ้ามาจากทางซ้าย P=L จะได้เป็น C ⊕ R
ถ้ามาจากทางขวา P=R จะได้เป็น C ⊕ L
ซึ่งเป็นค่า XOR ของที่อยู่ปัจจุบัน กับที่ที่อยู่ถัดไป
รูปแบบต่างๆ
โดยใช้หลักการเดียวกับ XOR linked list สามารถนำไปใช้กับการทำอื่นๆที่สามารถทำกลับได้ โดยแทนที่ XOR ด้วยการบวก หรือ การลบ
Addition linked list
list ชนิดนี้จะใกล้เคียงกับ XOR Linked list ยกเว้นค่า link เป็น 0 จะไม่ได้หมายถึงการสะท้อน การหา node ต่อไปทำได้โดยนำค่า link ลบกับที่อยู่ของ node ก่อนหน้า
Subtraction linked list
list ชนิดนี้จะต่างจาก XOR ตรงที่ การตรวจไปข้างหน้า กับการตรวจย้อนกลับจะใช้วิธีหาที่อยู่ของ node ต่อไป ต่างกันโดยเมื่อไปข้างหน้า จะทำการ บวกค่า link กับที่อยู่ของ node ก่อนหน้า แต่ถ้าย้อนกลับจะทำการลบที่อยู่ของ node ก่อนหน้า กับค่า link ข้อดีของ list ประเภทนี้คือสามารถ relocate ได้โดยไม่ต้องแก้ค่า link ใหม่
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
bthkhwamniimmikarxangxingcakaehlngthimaidkrunachwyprbprungbthkhwamni odyephimkarxangxingaehlngthimathinaechuxthux enuxkhwamthiimmiaehlngthimaxacthukkhdkhanhruxlbxxk eriynruwacanasaraemaebbnixxkidxyangiraelaemuxir rangkaroyngXOR xngkvs XOR Linked list epnokhrngsrangkhxmulthiichinkaropraekrmkhxmphiwetxr odyichpraoychncakkartha XOR caaethndwyekhruxnghmay ephuxldkarichphunthikhxng doubly linked list ody doubly linked list tampkticaekbkhathixyukhxng node thixyukxnhnaaela node thixyuthdipkhxngaetla node sungtxngesiyphunthiinkarekb2thi XOR linked list cathakarekbkhxmulthngsxngxyanginthiediywodykartha bit wise XOR thixyukhxng node thixyukxnhnaaelathixyukhxng node thixyuthdip cakrup emuxtrwckhxngin list caksayipkhwa emuxxyuthi C kcaruthixyukhxng node thixyukxnhnakhux B emuxnathixyukhxng B ip XOR kbkha link khxng C B D kcaidkhathixyukhxng D thaihsamarthipthangkhwatxid sungkarthaaebbnisamarththaidinthangklbkndwyephuxcatrwckhain list imwacathangihn caepntxngrukhathixyukhxng 2 node thixyutidknkxn imsamarththaidodyruaekhkhaediyw aelathaeriyngslbknkcatrwcipinthangtrngkham bangkhrngkimkhwrich XOR linked list kar debug thaidyak ephraaekhruxngmuxinkar debug catamsaykar XOR imidephuxaelkkbkarprahydphunthi thaihipephimkhwamyungyakinswnkhxng code epnxyangmak thaihkarduaelthaidyakXOR khxng pointer thaimidinbangphasaimsamarthxankha pointer idthaimidmacakkartrwcin list echn thukchimacakokhrngsrangkhxmulxuninkhnathitrwckhacaepntxngcathixyukhxng khxngkxnhna ephuxcakhanwnthixyukhxng node thdipkhunsmbtitharu node in list aekh node ediywcaimsamarthekhathungswnxunkhxng list id ichkar XOR ephiyng2khrnginkartrwcipthi node txip odyihihmiregister 2 tw twhnungekbkhakhxngthixyupccubn aelaxiktwekbkhakhxngthixyupccubn XOR kbthixyukxnhna phicarna list thimi B C D cakkhwaipsay aelaih R1 R2 epn register ih R1 ekbkhathixyupccubn smmtiihxyuthi C aelaih R2 ekbkhakhxngthixyupccubn XOR kbthixyukxnhna C D casamarthhathixyukhxng B idody R2 kha link khxng C B D caid C D B D B C aelwnaip XOR kb R1 caid B C C B pre X R2 Link R2 lt C D B D XR R1 R2 R1 lt C B C pre thiplaykhxng list caihthaehmuxnmi node thimithixyuepn 0 wangtidxyuthiplayehmuxn 0 A B C kha link thiekbthi A caepn 0 B odycatxngephimkhasngephuxtrwcsxbdwywakhathixyutxipepn 0 hruxim aelathiplaykhxng list samarththasathxnidodyihekb link epn 0 caehmuxn node thixyuthangsaykbkhwaepn node ediywkn XOR khxngkhxngthiehmuxnkncaid 0 thanganidxyangircakkhunsmbti X X 0 X 0 X X Y Y X X Y Z X Y Z register R2 caekbkha XOR khxng thixyupccubnaelathixyukxnhnaesmx aelakha link caekbXOR khxngthangsayaelathangkhwa thaihkha XOR khxng R2 aela link thaaethnsaydwy L khwadwy R pccubndwy C aela twkxnhnadwy P caidkha R2 link C P L R thamacakthangsay P L caidepn C R thamacakthangkhwa P R caidepn C L sungepnkha XOR khxngthixyupccubn kbthithixyuthdiprupaebbtangodyichhlkkarediywkb XOR linked list samarthnaipichkbkarthaxunthisamarththaklbid odyaethnthi XOR dwykarbwk hrux karlb Addition linked list list chnidnicaiklekhiyngkb XOR Linked list ykewnkha link epn 0 caimidhmaythungkarsathxn karha node txipthaidodynakha link lbkbthixyukhxng node kxnhna Subtraction linked list list chnidnicatangcak XOR trngthi kartrwcipkhanghna kbkartrwcyxnklbcaichwithihathixyukhxng node txip tangknodyemuxipkhanghna cathakar bwkkha link kbthixyukhxng node kxnhna aetthayxnklbcathakarlbthixyukhxng node kxnhna kbkha link khxdikhxng list praephthnikhuxsamarth relocate idodyimtxngaekkha link ihm