อ่าน 4 นาที
ระบบเลขฐานสองแบบเบี่ยงเบน
ระบบเลขฐานสองแบบเบี่ยงเบน (Skew Binary)เป็นระบบเลขฐานที่ไม่เป็นมาตรฐานโดยที่หลักที่nจะมีค่าเป็นจำนวนเท่าของหลักนั้น (หลักต่างๆ เริ่มนับจาก 0) แทนที่จะ เป็นจำนวนเท่าของ...
ระบบเลขฐานสองแบบเบี่ยงเบน
ระบบเลขฐานสองแบบเบี่ยงเบน (Skew Binary)เป็นระบบเลขฐานที่ไม่เป็นมาตรฐานโดยที่หลักที่nจะมีค่าเป็นจำนวนเท่าของหลักนั้น (หลักต่างๆ เริ่มนับจาก 0) แทนที่จะ เป็นจำนวนเท่าของ หลักอื่นๆเหมือนใน เลขฐานสอง แต่ละหลักจะมีค่าเป็น 0, 1 หรือ 2 เลขหนึ่งๆ สามารถเขียนได้หลายแบบในระบบเลขฐานสองแบบเบี่ยงเบน ตัวอย่างเช่น เลขฐานสิบ 15 สามารถเขียนได้เป็น 1000, 201 และ 122 แต่ละเลขสามารถเขียนได้ในรูปแบบมาตรฐานของระบบเลขฐานสองแบบเบี่ยงเบนได้อย่างไม่ซ้ำกัน โดยจะมี หลัก 2 ปรากฏ ได้มากที่สุด เพียง ครั้งเดียว ซึ่งต้องเป็น หลักที่ไม่ใช่ศูนย์ที่ มีค่าน้อยที่สุดในกรณีนี้ 15 เขียนในรูปแบบมาตรฐานได้เป็น 1000
ตัวอย่าง
ตารางต่อไปนี้แสดงการแสดงเลขฐานสองแบบเบี่ยงเบนมาตรฐานของตัวเลขตั้งแต่ 0 ถึง 15: [ 1 ]
| ทศนิยม | ไบนารี | ไบนารีแบบเบี่ยงเบน | ไตรภาค |
|---|---|---|---|
| 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 |
| 16 | 10000 | 1001 | 121 |
การดำเนินการทางคณิตศาสตร์
ข้อดีของเลขฐานสองแบบเฉียงคือ การเพิ่มค่าแต่ละครั้งสามารถทำได้โดยใช้ การ ทดค่า ไม่เกินหนึ่งครั้ง ซึ่งใช้ประโยชน์จากข้อเท็จจริงที่ว่าการเพิ่มค่าเลขฐานสองแบบเฉียงทำได้โดยการตั้งค่าเลขสองตัวแรกให้เป็นศูนย์ และเพิ่มค่าเลขหลักถัดไปจากศูนย์เป็นหนึ่ง หรือจากหนึ่งเป็นสอง เมื่อเลขถูกแทนด้วยรูปแบบ การเข้ารหัสแบบ รัน-เลิร์ต (run-length encoding)ในรูปของลิสต์เชื่อมโยงของเลขหลักที่ไม่ใช่ศูนย์ การเพิ่มค่าและการลดค่าสามารถทำได้ในเวลาคงที่
การดำเนินการทางคณิตศาสตร์อื่นๆ อาจทำได้โดยการสลับระหว่างการแสดงเลขฐานสองแบบเฉียงและการแสดงเลขฐานสอง[ 2 ]
การแปลงระหว่างเลขฐานสิบและเลขฐานสองแบบบิดเบี้ยว
ในการแปลงเลขฐานสิบเป็นเลขฐานสองแบบเฉียง สามารถใช้สูตรต่อไปนี้ได้: [ 3 ]
กรณีพื้นฐาน :
กรณีศึกษาการเหนี่ยวนำ :
ขอบเขต :
ในการแปลงเลขฐานสองแบบเบี่ยงเบนเป็นเลขฐานสิบ สามารถใช้คำจำกัดความของเลขฐานสองแบบเบี่ยงเบนได้ดังนี้:
โดยที่บิตที่มีค่าน้อยที่สุด (lsb) คือ 2
โค้ด C++ สำหรับแปลงเลขฐานสิบเป็นเลขฐานสองแบบเฉียง
#include <iostream> #include <cmath> #include <algorithm> #include <iterator>การใช้namespace std ;long dp [ 10000 ];//ใช้สูตร a(0) = 0; สำหรับ n >= 1, a(2^n-1+i) = a(i) + 10^(n-1) สำหรับ 0 <= i <= 2^n-1, //นำมาจากสารานุกรมลำดับจำนวนเต็มออนไลน์ (https://oeis.org/A169683)แปลงค่าไบนารีแบบคลาดเคลื่อนยาว( เลขฐานสิบยาว){int maksIndex = 0 ; ยาวมาก= 1 ; ในขณะที่( maks < ทศนิยม){ maks *= 2 ; maksIndex ++ ; }สำหรับ( int j = 1 ; j <= maksIndex ; j ++ ) { long power = pow ( 2 , j ); สำหรับ( int i = 0 ; i <= power - 1 ; i ++ ) dp [ i + power - 1 ] = pow ( 10 , j - 1 ) + dp [ i ]; }return dp [ decimal ]; } int main () { std :: fill ( std :: begin ( dp ), std :: end ( dp ), -1 ); dp [ 0 ] = 0 ; //สามารถเปรียบเทียบกับตัวเลขที่ให้ไว้ใน//https://oeis.org/A169683 ได้ for ( int i = 50 ; i < 125 ; i ++ ) { long current = convertToSkewbinary ( i ); cout << current << endl ; }ส่งคืนค่า0 ; }โค้ด C++ สำหรับแปลงเลขฐานสองที่ไม่ตรงแนวให้เป็นเลขฐานสิบ
#include <iostream> #include <cmath>การใช้namespace std ;// เลขฐานสิบ = (0|1|2)*(2^N+1 -1) + (0|1|2)*(2^(N-1)+1 -1) + ... // + (0|1|2)*(2^(1+1) -1) + (0|1|2)*(2^(0+1) -1) // // อินพุตที่คาดหวัง: จำนวนเต็มบวก/long ที่มีตัวเลขเป็น 0, 1 หรือ 2 โดยที่บิต/ตัวเลขที่ไม่ใช่ศูนย์ที่มีค่าน้อยที่สุดคือ 2 เท่านั้น// long convertToDecimal ( long skewBinary ){int k = 0 ; long decimal = 0 ; while ( skewBinary > 0 ) { int digit = skewBinary % 10 ; skewBinary = ceil ( skewBinary / 10 ); decimal += ( pow ( 2 , k + 1 ) - 1 ) * digit ; k ++ ; } return decimal ; } int main () {int test [] = { 0 , 1 , 2 , 10 , 11 , 12 , 20 , 100 , 101 , 102 , 110 , 111 , 112 , 120 , 200 , 1000 };for ( int i = 0 ; i < sizeof ( test ) / sizeof ( int ); i ++ ) cout << convertToDecimal ( test [ i ]) << endl ;;ส่งคืนค่า0 ; }จากการแสดงเลขฐานสองแบบเบี่ยงเบนไปสู่การแสดงเลขฐานสอง
เมื่อกำหนดเลขฐานสองที่ไม่สมมาตร ค่าของมันสามารถคำนวณได้โดยใช้ลูป โดยคำนวณค่าที่ต่อเนื่องกันของและบวกค่าดังกล่าวหนึ่งหรือสองครั้งสำหรับแต่ละค่าจนกระทั่งหลักที่ เป็น 1 หรือ 2 ตามลำดับ ต่อไปนี้จะนำเสนอวิธีการที่มีประสิทธิภาพมากกว่า โดยใช้เพียงการแสดงผลแบบบิตและการลบเพียงครั้งเดียว
เลขฐานสองแบบเบี่ยงเบนที่มีรูปแบบที่ไม่มี 2 และมี1 จะเท่ากับเลขฐานสองลบด้วยโดยให้แทนจำนวนหลักที่ซ้ำกัน เลขฐานสองแบบเบี่ยงเบนที่ มีรูปแบบ ที่มี 1 จะเท่ากับเลขฐานสองลบด้วย
จากการแสดงผลแบบไบนารีไปสู่การแสดงผลแบบไบนารีแบบเบี่ยงเบน
เช่นเดียวกับในส่วนก่อนหน้า เลขฐานสองในรูปแบบที่มี1 เท่ากับเลขฐานสองแบบเฉียงบวกกับโปรดทราบว่าเนื่องจากการบวกไม่ได้ถูกนิยามไว้ การบวกจึงเทียบเท่ากับการเพิ่มค่าตัวเลขขึ้น 1 ครั้งอย่างไรก็ตาม ค่าถูกจำกัดด้วยลอการิทึมของและการเพิ่มค่าใช้เวลาคงที่ ดังนั้นการแปลงเลขฐานสองเป็นเลขฐานสองแบบเฉียงจึงใช้เวลาเชิงเส้นตามความยาวของตัวเลข
แอปพลิเคชัน
เลขฐานสองแบบเฉียงได้รับการพัฒนาโดยEugene Myersในปี 1983 สำหรับโครงสร้างข้อมูลเชิงฟังก์ชันล้วนๆที่อนุญาตให้ดำเนินการกับชนิดข้อมูลนามธรรมของสแต็กและยังอนุญาตให้มีการจัดทำดัชนีอย่างมีประสิทธิภาพในลำดับขององค์ประกอบสแต็ก[ 4 ]ต่อมาได้มีการนำไปใช้กับฮีปแบบไบโนเมียลเฉียง ซึ่ง เป็นรูปแบบหนึ่งของฮีปแบบไบโนเมียลที่รองรับการดำเนินการแทรกในกรณีที่เลวร้ายที่สุดโดยใช้เวลาคงที่[ 5 ]
ดูเพิ่มเติม
หมายเหตุ
- ^ Sloane, N. J. A. (บรรณาธิการ). "ลำดับ A169683" . สารานุกรมลำดับจำนวนเต็มออนไลน์ . มูลนิธิ OEIS.
- ^ Elmasry, Amr; Jensen, Claus; Katajainen, Jyrki (2012). "ระบบตัวเลขไบนารีแบบเบี่ยงเบนสองระบบและการประยุกต์ใช้งานหนึ่งอย่าง" (PDF)ทฤษฎีระบบการคำนวณ 50 : 185– 211. doi : 10.1007 /s00224-011-9357-0 . S2CID 253736860 .
- ^สารานุกรมออนไลน์ของลำดับจำนวนเต็ม"เลขฐานสองเบี่ยงเบนมาตรฐาน "
- ^ Myers, Eugene W. (1983). "An applicative random-access stack". Information Processing Letters . 17 (5): 241– 248. doi : 10.1016/0020-0190(83)90106-0 . MR 0741239 .
- ^ Brodal, Gerth Stølting; Okasaki, Chris (พฤศจิกายน 1996). "คิวลำดับความสำคัญเชิงฟังก์ชันบริสุทธิ์ที่เหมาะสมที่สุด"วารสารการเขียนโปรแกรมเชิงฟังก์ชัน 6 ( 6): 839– 857. doi : 10.1017/s095679680000201x .
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ระบบเลขฐานสองแบบเบี่ยงเบน
ระบบเลขฐานสองแบบเบี่ยงเบน (Skew Binary)เป็นระบบเลขฐานที่ไม่เป็นมาตรฐานโดยที่หลักที่nจะมีค่าเป็นจำนวนเท่าของหลักนั้น (หลักต่างๆ เริ่มนับจาก 0) แทนที่จะ เป็นจำนวนเท่าของ...
ตัวอย่าง
ตารางต่อไปนี้แสดงการแสดงเลขฐานสองแบบเบี่ยงเบนมาตรฐานของตัวเลขตั้งแต่ 0 ถึง 15: [ 1 ]
การดำเนินการทางคณิตศาสตร์
ข้อดีของเลขฐานสองแบบเฉียงคือ การเพิ่มค่าแต่ละครั้งสามารถทำได้โดยใช้ การ ทดค่า ไม่เกินหนึ่งครั้ง ซึ่งใช้ประโยชน์จากข้อเท็จจริงที่ว่าการเพิ่มค่าเลขฐานสองแบบเฉียงทำได้โดยการตั้งค่าเลขสองตัวแรกให้เป็นศูนย์ และเพิ่มค่าเลขหลักถัดไปจากศูนย์เป็นหนึ่ง...
การแปลงระหว่างเลขฐานสิบและเลขฐานสองแบบบิดเบี้ยว
ในการแปลงเลขฐานสิบเป็นเลขฐานสองแบบเฉียง สามารถใช้สูตรต่อไปนี้ได้: [ 3 ]