อ่าน 13 นาที
ลำดับเดอ บรูอิน
ใน คณิตศาสตร์ เชิงการจัด เรียง ลำดับ เดอ บรูอิน (de Bruijn sequence ) อันดับ n บน ตัวอักษร A ขนาด k คือ ลำดับวัฏจักร ที่สตริงความยาว n ทุก สตริง ที่เป็นไปได้ บน A...
ลำดับเดอ บรูอิน

ในคณิตศาสตร์เชิงการจัด เรียง ลำดับเดอ บรูอิน (de Bruijn sequence ) อันดับn บน ตัวอักษรAขนาดkคือลำดับวัฏจักรที่สตริงความยาวn ทุก สตริง ที่เป็นไปได้ บนAปรากฏเพียงครั้งเดียวในฐานะสตริงย่อย (กล่าวคือ ในฐานะลำดับย่อยที่ต่อเนื่องกัน ) ลำดับดังกล่าวเขียนแทนด้วยB ( k , n )และมีความยาวk<sub> n</sub>ซึ่งเป็นจำนวนสตริงที่แตกต่างกันที่มีความยาวnบนAสตริงที่แตกต่างกันแต่ละสตริง เมื่อนำมาเป็นสตริงย่อยของB ( k , n )จะต้องเริ่มต้นที่ตำแหน่งที่แตกต่างกัน เนื่องจากสตริงย่อยที่เริ่มต้นที่ตำแหน่งเดียวกันจะไม่แตกต่างกัน ดังนั้นB ( k , n )ต้องมี สัญลักษณ์ อย่างน้อยk<sub> n </sub> ตัว และเนื่องจากB ( k , n )มี สัญลักษณ์ k<sub> n</sub>ตัวพอดีลำดับเดอ บรูอินจึงสั้นที่สุดเมื่อพิจารณาจากคุณสมบัติที่ว่ามีสตริงความยาวn ทุกสตริง อย่างน้อยหนึ่งครั้ง
จำนวนลำดับ de Bruijn ที่แตกต่างกันB ( k , n )คือ
สำหรับอักษรไบนารี จะได้ลำดับดังนี้สำหรับค่าบวก: 1, 1, 2, 16, 2048, 67108864... ((ลำดับA016031ในOEIS ))
ลำดับเหล่านี้ตั้งชื่อตามนักคณิตศาสตร์ชาวดัตช์Nicolaas Govert de Bruijnซึ่งเขียนเกี่ยวกับลำดับเหล่านี้ในปี 1946 [ 1 ]ดังที่เขาเขียนไว้ในภายหลัง[ 2 ]การมีอยู่ของลำดับ de Bruijn สำหรับแต่ละลำดับพร้อมกับคุณสมบัติข้างต้นได้รับการพิสูจน์ ครั้งแรก สำหรับกรณีของตัวอักษรที่มีสององค์ประกอบโดย Camille Flye Sainte-Marie ( 1894 ) การขยายไปสู่ตัวอักษรที่ใหญ่กว่านั้นเป็นผลงานของTatyana van Aardenne-Ehrenfestและ de Bruijn ( 1951 ) ออโตมาตาสำหรับการจดจำลำดับเหล่านี้เรียกว่าออโตมาตา de Bruijn
ในการใช้งานหลายๆ กรณีA = {0,1}
ประวัติศาสตร์
ตัวอย่างที่เก่าแก่ที่สุดของลำดับเดอ บรูอิน (de Bruijn sequence) มาจากฉันทลักษณ์ภาษาสันสกฤตซึ่งนับตั้งแต่ผลงานของปิงคลา (Pingala ) รูปแบบสามพยางค์ที่เป็นไปได้ของพยางค์ยาวและสั้นแต่ละแบบจะได้รับชื่อเรียก เช่น 'y' สำหรับสั้น-ยาว-ยาว และ 'm' สำหรับยาว-ยาว-ยาว เพื่อช่วยในการจดจำชื่อเหล่านี้ จึงใช้คำช่วยจำว่าyamātārājabhānasalagāmซึ่งแต่ละรูปแบบสามพยางค์จะปรากฏขึ้นโดยเริ่มจากชื่อของมัน: 'yamātā' มีรูปแบบสั้น-ยาว-ยาว 'mātārā' มีรูปแบบยาว-ยาว-ยาว และอื่นๆ ไปจนถึง 'salagām' ซึ่งมีรูปแบบสั้น-สั้น-ยาว ตัวช่วยจำนี้เทียบเท่ากับลำดับ de Bruijn บนคู่ไบนารี 3 ตัว มีอายุเก่าแก่ไม่แน่ชัด แต่มีอายุอย่างน้อยเท่ากับหนังสือเกี่ยวกับฉันทลักษณ์ภาษาสันสกฤตของCharles Philip Brown ในปี 1869 ที่กล่าวถึงและถือว่าเป็น "บรรทัดโบราณที่เขียนโดย Pāṇini " [ 3 ]
ในปี พ.ศ. 2437 A. de Rivière ได้ตั้งคำถามในวารสารปัญหาภาษาฝรั่งเศสL'Intermédiaire des Mathématiciensเกี่ยวกับการมีอยู่ของการจัดเรียงแบบวงกลมของศูนย์และหนึ่งที่มีขนาดซึ่งประกอบด้วยลำดับไบนารีทั้งหมดที่มีความยาวปัญหาได้รับการแก้ไข (ในเชิงบวก) พร้อมกับการนับจำนวนคำตอบที่แตกต่างกันโดย Camille Flye Sainte-Marie ในปีเดียวกัน[ 2 ]เรื่องนี้ถูกลืมไปเป็นส่วนใหญ่ และMartin (1934)ได้พิสูจน์การมีอยู่ของวงจรดังกล่าวสำหรับขนาดตัวอักษรทั่วไปแทนที่จะเป็น 2 พร้อมกับอัลกอริทึมสำหรับการสร้างวงจรเหล่านั้น ในที่สุด เมื่อในปี พ.ศ. 2487 Kees Posthumus ตั้งข้อสันนิษฐานเกี่ยวกับการนับลำดับไบนารี de Bruijn ได้พิสูจน์ข้อสันนิษฐานในปี พ.ศ. 2489 ซึ่งทำให้ปัญหานี้เป็นที่รู้จักกันดี[ 2 ]
Karl Popperได้อธิบายวัตถุเหล่านี้โดยอิสระในหนังสือ The Logic of Scientific Discovery (1934) ของเขา โดยเรียกวัตถุเหล่านี้ว่า "ลำดับที่สั้นที่สุดที่คล้ายกับการสุ่ม" [ 4 ]
ตัวอย่าง
- เมื่อกำหนดให้A = {0, 1} จะมีB (2, 3) ที่แตกต่างกันสองค่า ได้แก่ 00010111 และ 11101000 โดยค่าหนึ่งเป็นค่าผกผันหรือค่าปฏิเสธของอีกค่าหนึ่ง
- ในบรรดาตัวอักษร B (2, 4) ที่เป็นไปได้ 16 ตัว มีสองตัวคือ 0000100110101111 และ 0000111101100101
- ในบรรดาตัวอักษร B (2, 5) ที่เป็นไปได้ 2048 ตัวในอักษรเดียวกัน มีสองตัวคือ 00000100011001010011101011011111 และ 00000101001000111110111001101011
การก่อสร้าง

ลำดับเดอ บรูอินสามารถสร้างได้โดยการใช้เส้นทางแฮมิลโท เนียน ของกราฟเดอ บรูอินnมิติเหนือ สัญลักษณ์ k ตัว (หรือเทียบเท่ากับวงจรออยเลอร์ของกราฟเดอ บรูอิน ( n − 1) มิติ) [ 5 ]
โครงสร้างทางเลือกอีกแบบหนึ่งเกี่ยวข้องกับการนำคำศัพท์ของ Lyndonทั้งหมดที่มีความยาวหาร n ลงตัวมาต่อ กันตาม ลำดับตัวอักษร[ 6 ]
สามารถใช้การแปลง Burrows–Wheelerผกผัน เพื่อสร้างคำศัพท์ Lyndon ที่ต้องการตามลำดับพจนานุกรมได้ [ 7 ]
ลำดับ de Bruijn สามารถสร้างได้โดยใช้รีจิสเตอร์เลื่อน[ 8 ]หรือผ่านฟิลด์จำกัด[ 9 ]
ตัวอย่างการใช้กราฟเดอ บรูอิน

เป้าหมาย: สร้าง ลำดับ B (2, 4) de Bruijn ที่มีความยาว 2 4 = 16 โดยใช้วงจรกราฟ Eulerian ( n − 1 = 4 − 1 = 3) วงจรกราฟ 3-D de Bruijn
แต่ละขอบในกราฟเดอ บรูอินสามมิตินี้ สอดคล้องกับลำดับของตัวเลขสี่หลัก: ตัวเลขสามหลักที่ระบุจุดยอดที่ขอบนั้นออกจาก ตามด้วยตัวเลขหนึ่งหลักที่ระบุขอบนั้น หากเราเดินทางผ่านขอบที่มีหมายเลข 1 จาก 000 เราจะไปถึง 001 ซึ่งบ่งชี้ว่ามีลำดับย่อย 0001 อยู่ในลำดับเดอ บรูอิน การเดินทางผ่านแต่ละขอบเพียงครั้งเดียว หมายถึงการใช้ลำดับตัวเลขสี่หลักทั้ง 16 ลำดับเพียงครั้งเดียว
ตัวอย่างเช่น สมมติว่าเราเคลื่อนที่ตามเส้นทางออยเลอร์ต่อไปนี้ผ่านจุดยอดเหล่านี้:
- 000, 000, 001, 011, 111, 111, 110, 101, 011,
- 110, 100, 001, 010, 101, 010, 100, 000.
นี่คือลำดับเอาต์พุตที่มีความยาวk :
- 0 0 0 0
- _ 0 0 0 1
- _ _ 0 0 1 1
ซึ่งสอดคล้องกับลำดับเดอ บรูอิน ดังต่อไปนี้:
- 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1
จุดยอดทั้งแปดจุดปรากฏในลำดับดังต่อไปนี้:
{0 0 0 0} 1 1 1 1 0 1 1 0 0 1 0 1 0 {0 0 0 1} 1 1 1 0 1 1 0 0 1 0 1 0 0 {0 0 1 1} 1 1 0 1 1 0 0 1 0 1 0 0 0 {0 1 1 1} 1 0 1 1 0 0 1 0 1 0 0 0 0 {1 1 1 1} 0 1 1 0 0 1 0 1 0 0 0 0 1 {1 1 1 0} 1 1 0 0 1 0 1 0 0 0 0 1 1 {1 1 0 1} 1 0 0 1 0 1 0 0 0 0 1 1 1 {1 0 1 1} 0 0 1 0 1 0 0 0 0 1 1 1 1 {0 1 1 0} 0 1 0 1 0 0 0 0 1 1 1 1 0 {1 1 0 0} 1 0 1 0 0 0 0 1 1 1 1 0 1 {1 0 0 1} 0 1 0 0 0 0 1 1 1 1 0 1 1 {0 0 1 0} 1 0 0 0 0 1 1 1 1 0 1 1 0 {0 1 0 1} 0} 0 0 0 1 1 1 1 0 1 1 0 0 {1 0 1 ... ... 0 0} 0 0 1 1 1 1 0 1 1 0 0 1 {0 1 ... ... 0 0 0} 0 1 1 1 1 0 1 1 0 0 1 0 {1 ... ...แล้วเราก็กลับไปยังจุดเริ่มต้น ลำดับตัวเลข 3 หลักทั้งแปดลำดับ (ซึ่งสอดคล้องกับจุดยอดทั้งแปดจุด) จะปรากฏขึ้นสองครั้ง และลำดับตัวเลข 4 หลักทั้งสิบหกลำดับ (ซึ่งสอดคล้องกับขอบทั้ง 16 เส้น) จะปรากฏขึ้นเพียงครั้งเดียว
ตัวอย่างการใช้การแปลงผกผันของ Burrows-Wheeler
ในทางคณิตศาสตร์การแปลง Burrows—Wheeler ผกผันบนคำwจะสร้างมัลติเซตของคลาสสมมูลที่ประกอบด้วยสตริงและการหมุนของสตริงเหล่านั้น[ 7 ]คลาสสมมูลของสตริงเหล่านี้แต่ละคลาสจะมีคำ Lyndonเป็นองค์ประกอบขั้นต่ำที่ไม่ซ้ำกัน ดังนั้นการแปลง Burrows—Wheeler ผกผันจึงถือได้ว่าเป็นการสร้างเซตของคำ Lyndon สามารถแสดงได้ว่าหากเราทำการแปลง Burrows—Wheeler ผกผันบนคำwที่ประกอบด้วยตัวอักษรขนาดkที่ทำซ้ำk n −1ครั้ง (เพื่อให้ได้คำที่มีความยาวเท่ากับลำดับ de Bruijn ที่ต้องการ) ผลลัพธ์ที่ได้จะเป็นเซตของคำ Lyndon ทั้งหมดที่มีความยาวหารn ลงตัว ดังนั้นการจัดเรียงคำ Lyndon เหล่านี้ตามลำดับพจนานุกรมจะให้ลำดับ de Bruijn B ( k , n ) และนี่จะเป็นลำดับ de Bruijn แรกในลำดับพจนานุกรม สามารถใช้วิธีต่อไปนี้ในการดำเนินการแปลงผกผันของ Burrows-Wheeler โดยใช้การเรียงสับเปลี่ยนมาตรฐาน :
- เรียงลำดับตัวอักษรในสตริงwเพื่อให้ได้สตริงใหม่w ′
- วางสตริงw ′ไว้เหนือสตริงwแล้วจับคู่ตำแหน่งของแต่ละตัวอักษรในw ′กับตำแหน่งในwโดยคงลำดับไว้ กระบวนการนี้กำหนดการเรียงสับเปลี่ยนมาตรฐาน (Standard Permutation )
- เขียนการเรียงสับเปลี่ยนนี้ในรูปแบบสัญกรณ์วงจรโดยให้ตำแหน่งที่เล็กที่สุดในแต่ละวงจรอยู่ลำดับแรก และเรียงลำดับวงจรจากน้อยไปมาก
- ในแต่ละรอบ ให้แทนที่ตัวเลขแต่ละตัวด้วยตัวอักษรที่ตรงกันจากสตริงw ′ในตำแหน่งนั้น
- แต่ละวัฏจักรได้กลายเป็นคำศัพท์ของลินดอนแล้ว และถูกจัดเรียงตามลำดับตัวอักษร ดังนั้นการตัดวงเล็บออกจะทำให้ได้ลำดับเดอ บรูอินชุดแรก
ตัวอย่างเช่น ในการสร้าง ลำดับ B (2,4) de Bruijn ที่เล็กที่สุดที่มีความยาว 2 4 = 16 ให้ทำซ้ำตัวอักษร (ab) 8 ครั้ง จะได้w =ababababababababเรียงลำดับตัวอักษรในwจะได้w ′ =aaaaaaaabbbbbbbbวางw ′ไว้เหนือwดังแสดงในรูป และจับคู่แต่ละองค์ประกอบในw ′กับองค์ประกอบที่สอดคล้องกันในwโดยการลากเส้น กำหนดหมายเลขคอลัมน์ดังแสดงในรูป เพื่อให้เราสามารถอ่านวัฏจักรของการเรียงสับเปลี่ยนได้:
เริ่มจากด้านซ้าย วงจรสัญกรณ์การเรียงสับเปลี่ยนมาตรฐานคือ: (1) (2 3 5 9) (4 7 13 10) (6 11) (8 15 14 12) (16) ( การเรียงสับเปลี่ยนมาตรฐาน )
จากนั้น แทนที่ตัวเลขแต่ละตัวด้วยตัวอักษรที่ตรงกันในw ′จากคอลัมน์นั้นจะได้ผลลัพธ์ดังนี้: (a)(aaab)(aabb)(ab)(abbb)(b )
นี่คือคำศัพท์ Lyndon ทั้งหมดที่มีความยาวหาร 4 ลงตัว เรียงตามลำดับตัวอักษร ดังนั้นการตัดวงเล็บออกจะได้B (2,4) = aaaabaabbababbbb
อัลกอริทึม
โค้ด Pythonต่อไปนี้คำนวณลำดับ de Bruijn โดยกำหนดkและnตามอัลกอริทึมจากการสร้างเชิงผสมของFrank Ruskey [ 10 ]
จากtyping นำเข้าIterable , Any def de_bruijn ( k : Iterable [ str ] | int , n : int ) -> str : """ลำดับเดอ บรูอินสำหรับตัวอักษร k และลำดับย่อยที่มีความยาว n """ # อินพุตตัวอักษรสองแบบ: จำนวนเต็มจะขยาย# เป็นรายการของจำนวนเต็มเป็นตัวอักษร.. ถ้าisinstance ( k , int ): alphabet = list ( map ( str , range ( k ))) else : # ในขณะที่รายการประเภทใด ๆ จะถูกนำไปใช้ตามที่เป็นอยู่alphabet = k k = len ( k )a = [ 0 ] * k * n ลำดับ= []def db ( t , p ): if t > n : if n % p == 0 : sequence . extend ( a [ 1 : p + 1 ]) else : a [ t ] = a [ t - p ] db ( t + 1 , p ) for j in range ( a [ t - p ] + 1 , k ): a [ t ] = j db ( t + 1 , t )db ( 1 , 1 ) ส่งคืน"" . join ( alphabet [ i ] for i in sequence )พิมพ์( de_bruijn ( 2 , 3 )) พิมพ์( de_bruijn ( "abcd" , 2 ))ซึ่งพิมพ์
00010111 aabacadbbcbdccdd
โปรดสังเกตว่าลำดับเหล่านี้เข้าใจได้ว่า "วนรอบ" เป็นวัฏจักร ตัวอย่างเช่น ลำดับแรกประกอบด้วย 110 และ 100 ในลักษณะนี้
การใช้งาน
วงจรเดอ บรูอินมีประโยชน์โดยทั่วไปในการทดลองทางประสาทวิทยาและจิตวิทยาที่ตรวจสอบผลของลำดับการกระตุ้นต่อระบบประสาท[ 11 ]และสามารถสร้างขึ้นมาเป็นพิเศษเพื่อใช้กับการถ่ายภาพด้วยคลื่นแม่เหล็กไฟฟ้าเชิงฟังก์ชัน [ 12 ]
การตรวจจับมุม
สัญลักษณ์ของลำดับ de Bruijn ที่เขียนรอบวัตถุทรงกลม (เช่น ล้อของหุ่นยนต์ ) สามารถใช้เพื่อระบุมุม ได้ โดยการตรวจสอบ สัญลักษณ์ nตัวที่ต่อเนื่องกันซึ่งหันหน้าเข้าหาจุดคงที่ ปัญหาการเข้ารหัสมุมนี้เรียกว่า "ปัญหาดรัมหมุน" [ 13 ]รหัส Grayสามารถใช้เป็นกลไกการเข้ารหัสตำแหน่งแบบหมุนที่คล้ายกัน ซึ่งเป็นวิธีการที่พบได้ทั่วไปในตัวเข้ารหัสแบบหมุน
การค้นหาบิตชุดที่มีนัยสำคัญน้อยที่สุดหรือมากที่สุดในคำ
ลำดับ de Bruijn สามารถใช้เพื่อค้นหาดัชนีของบิตที่ตั้งค่าที่มีนัยสำคัญน้อยที่สุด ("1 ขวาสุด") หรือบิตที่ตั้งค่าที่มีนัยสำคัญมากที่สุด ("1 ซ้ายสุด") ในคำโดยใช้การดำเนินการบิตและการคูณ[ 14 ]ตัวอย่างต่อไปนี้ใช้ลำดับ de Bruijn เพื่อกำหนดดัชนีของบิตที่ตั้งค่าที่มีนัยสำคัญน้อยที่สุด (เทียบเท่ากับการนับจำนวนบิต '0' ที่ต่อท้าย) ในจำนวนเต็ม 32 บิตที่ไม่มีเครื่องหมาย :
uint8_t lowestBitIndex ( uint32_t v ) { static const uint8_t BitPositionLookup [ 32 ] = // ตารางแฮช{ 0 , 1 , 28 , 2 , 29 , 14 , 24 , 3 , 30 , 22 , 20 , 15 , 25 , 17 , 4 , 8 , 31 , 27 , 13 , 23 , 21 , 19 , 16 , 7 , 26 , 12 , 18 , 6 , 11 , 5 , 10 , 9 } ; return BitPositionLookup [(( uint32_t )(( v & - v ) * 0x077CB531U )) >> 27 ]; }ฟังก์ชัน นี้lowestBitIndex()จะส่งคืนดัชนีของบิตที่มีค่าต่ำที่สุดในvหรือศูนย์หากvไม่มีบิตใดถูกตั้งค่า ค่าคงที่ 0x077CB531U ในนิพจน์คือ ลำดับ B (2, 5) 0000 0111 0111 1100 1011 0101 0011 0001 (เพิ่มช่องว่างเพื่อความชัดเจน) การดำเนินการนี้(v & -v)จะตั้งค่าบิตทั้งหมดเป็นศูนย์ ยกเว้นบิตที่มีค่าต่ำที่สุด ทำให้ได้ค่าใหม่ที่เป็นกำลังของ 2 กำลังของ 2 นี้จะถูกคูณ (เลขคณิตโมดูลัส 2 32 ) ด้วยลำดับ de Bruijn ทำให้ได้ผลคูณ 32 บิต โดยที่ลำดับบิตของ 5 MSB จะมีเอกลักษณ์เฉพาะสำหรับแต่ละกำลังของ 2 5 MSB จะถูกเลื่อนไปยังตำแหน่ง LSB เพื่อสร้างรหัสแฮชในช่วง [0, 31] ซึ่งจะถูกใช้เป็นดัชนีในตารางแฮช BitPositionLookup ค่าตารางแฮชที่เลือกคือดัชนีบิตของบิตที่ตั้งค่าไว้ที่มีค่าน้อยที่สุดใน v
ตัวอย่างต่อไปนี้แสดงวิธีการหาดัชนีของบิตที่มีค่ามากที่สุดในจำนวนเต็ม 32 บิตที่ไม่มีเครื่องหมาย:
uint32_t keepHighestBit ( uint32_t n ) { n |= ( n >> 1 ); n |= ( n >> 2 ); n |= ( n >> 4 ); n |= ( n >> 8 ); n |= ( n >> 16 ); return n - ( n >> 1 ); }uint8_t highestBitIndex ( uint32_t v ) { static const uint8_t BitPositionLookup [ 32 ] = { // ตารางแฮช0 , 1 , 16 , 2 , 29 , 17 , 3 , 22 , 30 , 20 , 18 , 11 , 13 , 4 , 7 , 23 , 31 , 15 , 28 , 21 , 19 , 10 , 12 , 6 , 14 , 27 , 9 , 5 , 26 , 8 , 25 , 24 , }; return BitPositionLookup [( keepHighestBit ( v ) * 0x06EB14F9U ) >> 27 ]; }ในตัวอย่างข้างต้น มีการใช้ลำดับเดอ บรูอินทางเลือก (0x06EB14F9U) พร้อมกับการเรียงลำดับค่าในอาร์เรย์ใหม่ที่สอดคล้องกัน การเลือกใช้ลำดับเดอ บรูอินนี้เป็นไปโดยพลการ แต่ค่าในตารางแฮชจะต้องเรียงลำดับให้ตรงกับลำดับเดอ บรูอินที่เลือกkeepHighestBit()ฟังก์ชันจะตั้งค่าบิตทั้งหมดเป็นศูนย์ ยกเว้นบิตที่มีค่ามากที่สุด ทำให้ได้ค่าที่เป็นกำลังของ 2 ซึ่งจะถูกประมวลผลต่อไปเช่นเดียวกับในตัวอย่างก่อนหน้า
การโจมตีระบบล็อกด้วยกำลังดุร้าย

| B{10,3} โดยอ่านตัวเลขจากบนลงล่างแล้วจากซ้ายไปขวา[ 15 ]การเพิ่ม "00" จะทำให้ได้สตริงสำหรับใช้การเดาแบบ Brute-force เพื่อถอดรหัสรหัส 3 หลัก | |||||||||
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 001 | |||||||||
| 002 | |||||||||
| 003 | |||||||||
| 004 | |||||||||
| 005 | |||||||||
| 006 | |||||||||
| 007 | |||||||||
| 008 | |||||||||
| 009 | |||||||||
| 011 | |||||||||
| 012 | 112 | ||||||||
| 013 | 113 | ||||||||
| 014 | 114 | ||||||||
| 015 | 115 | ||||||||
| 016 | 116 | ||||||||
| 017 | 117 | ||||||||
| 018 | 118 | ||||||||
| 019 | 119 | ||||||||
| 021 | |||||||||
| 022 | 122 | ||||||||
| 023 | 123 | 223 | |||||||
| 024 | 124 | 224 | |||||||
| 025 | 125 | 225 | |||||||
| 026 | 126 | 226 | |||||||
| 027 | 127 | 227 | |||||||
| 028 | 128 | 228 | |||||||
| 029 | 129 | 229 | |||||||
| 031 | |||||||||
| 032 | 132 | ||||||||
| 033 | 133 | 233 | |||||||
| 034 | 134 | 234 | 334 | ||||||
| 035 | 135 | 235 | 335 | ||||||
| 036 | 136 | 236 | 336 | ||||||
| 037 | 137 | 237 | 337 | ||||||
| 038 | 138 | 238 | 338 | ||||||
| 039 | 139 | 239 | 339 | ||||||
| 041 | |||||||||
| 042 | 142 | ||||||||
| 043 | 143 | 243 | |||||||
| 044 | 144 | 244 | 344 | ||||||
| 045 | 145 | 245 | 345 | 445 | |||||
| 046 | 146 | 246 | 346 | 446 | |||||
| 047 | 147 | 247 | 347 | 447 | |||||
| 048 | 148 | 248 | 348 | 448 | |||||
| 049 | 149 | 249 | 349 | 449 | |||||
| 051 | |||||||||
| 052 | 152 | ||||||||
| 053 | 153 | 253 | |||||||
| 054 | 154 | 254 | 354 | ||||||
| 055 | 155 | 255 | 355 | 455 | |||||
| 056 | 156 | 256 | 356 | 456 | 556 | ||||
| 057 | 157 | 257 | 357 | 457 | 557 | ||||
| 058 | 158 | 258 | 358 | 458 | 558 | ||||
| 059 | 159 | 259 | 359 | 459 | 559 | ||||
| 061 | |||||||||
| 062 | 162 | ||||||||
| 063 | 163 | 263 | |||||||
| 064 | 164 | 264 | 364 | ||||||
| 065 | 165 | 265 | 365 | 465 | |||||
| 066 | 166 | 266 | 366 | 466 | 566 | ||||
| 067 | 167 | 267 | 367 | 467 | 567 | 667 | |||
| 068 | 168 | 268 | 368 | 468 | 568 | 668 | |||
| 069 | 169 | 269 | 369 | 469 | 569 | 669 | |||
| 071 | |||||||||
| 072 | 172 | ||||||||
| 073 | 173 | 273 | |||||||
| 074 | 174 | 274 | 374 | ||||||
| 075 | 175 | 275 | 375 | 475 | |||||
| 076 | 176 | 276 | 376 | 476 | 576 | ||||
| 077 | 177 | 277 | 377 | 477 | 577 | 677 | |||
| 078 | 178 | 278 | 378 | 478 | 578 | 678 | 778 | ||
| 079 | 179 | 279 | 379 | 479 | 579 | 679 | 779 | ||
| 081 | |||||||||
| 082 | 182 | ||||||||
| 083 | 183 | 283 | |||||||
| 084 | 184 | 284 | 384 | ||||||
| 085 | 185 | 285 | 385 | 485 | |||||
| 086 | 186 | 286 | 386 | 486 | 586 | ||||
| 087 | 187 | 287 | 387 | 487 | 587 | 687 | |||
| 088 | 188 | 288 | 388 | 488 | 588 | 688 | 788 | ||
| 089 | 189 | 289 | 389 | 489 | 589 | 689 | 789 | 889 | |
| 091 | |||||||||
| 092 | 192 | ||||||||
| 093 | 193 | 293 | |||||||
| 094 | 194 | 294 | 394 | ||||||
| 095 | 195 | 295 | 395 | 495 | |||||
| 096 | 196 | 296 | 396 | 496 | 596 | ||||
| 097 | 197 | 297 | 397 | 497 | 597 | 697 | |||
| 098 | 198 | 298 | 398 | 498 | 598 | 698 | 798 | ||
| 099 | 199 | 299 | 399 | 499 | 599 | 699 | 799 | 899 | (00) |
ลำดับเดอ บรูอิน (de Bruijn sequence) สามารถใช้เพื่อลดระยะการโจมตีแบบบรูทฟอร์ซ (brute-force attack)บน ระบบล็อกรหัสแบบ PINที่ไม่มีปุ่ม "enter" และยอมรับ ตัวเลข n หลักสุดท้าย ที่ป้อน ตัวอย่างเช่นระบบล็อกประตูแบบดิจิทัลที่มีรหัส 4 หลัก (แต่ละหลักมี 10 ตัวเลือก ตั้งแต่ 0 ถึง 9) จะมี คำตอบ B (10, 4) คำตอบ โดยมีความยาวเท่ากับ10,000ดังนั้น อย่างมากที่สุดก็แค่เท่านั้น10,000 + 3 =ต้องกด 10,003 ครั้ง(เนื่องจากวิธีแก้ปัญหาเป็นแบบวนซ้ำ) เพื่อเปิดล็อค ในขณะที่การลองรหัสทั้งหมดแยกกันจะต้องใช้ 4 ครั้ง10,000 =40,000 เครื่องกด

ลำดับเดอ บรูอินแบบ f-fold
ลำดับเดอ บรูอินแบบ n-ary f เท่าเป็นส่วนขยายของแนวคิด ลำดับเดอ บรูอินแบบ n -ary โดยที่ลำดับที่มีความยาว n จะมี ลำดับย่อยที่เป็นไปได้ทั้งหมดที่มีความยาวnอยู่fครั้ง ตัวอย่างเช่น สำหรับลำดับวัฏจักร 11100010 และ 11101000 เป็นลำดับเดอ บรูอินแบบไบนารีสองเท่า จำนวนลำดับเดอ บรูอินสองเท่าสำหรับคือส่วนจำนวนอื่นๆ ที่ทราบ[ 16 ]คือ, , และ
เดอ บรูอิน ทอรัส
ทอรัสเดอ บรูอินคืออาร์เรย์รูปทรงทอรัสที่มีคุณสมบัติว่า เมทริกซ์ k - ary m -by -n ทุกตัว จะปรากฏเพียงครั้งเดียวเท่านั้น
สามารถใช้รูปแบบดังกล่าวสำหรับการเข้ารหัสตำแหน่งสองมิติในลักษณะที่คล้ายคลึงกับที่อธิบายไว้ข้างต้นสำหรับการเข้ารหัสแบบหมุน ตำแหน่งสามารถกำหนดได้โดยการตรวจสอบ เมทริกซ์ขนาด m x nที่อยู่ติดกับเซ็นเซอร์โดยตรง และคำนวณตำแหน่งของเมทริกซ์นั้นบนทอรัสเดอ บรูอิน
การถอดรหัสของเดอ บรูอิน
การคำนวณตำแหน่งของทูเปิลหรือเมทริกซ์ที่ไม่ซ้ำกันเฉพาะในลำดับหรือทอรัสของเดอ บรูอิน เรียกว่าปัญหาการถอดรหัสเดอ บรูอิน อั ลกอริทึมการ ถอดรหัสที่มีประสิทธิภาพมีอยู่สำหรับลำดับพิเศษที่สร้างขึ้นแบบเรียกซ้ำ[ 17 ]และขยายไปยังกรณีสองมิติ[ 18 ]การถอดรหัสเดอ บรูอินมีความน่าสนใจ เช่น ในกรณีที่ใช้ลำดับหรือทอรัสขนาดใหญ่สำหรับการเข้ารหัสตำแหน่ง
ดูเพิ่มเติม
หมายเหตุ
- ^เดอ บรูอิน (1946 )
- ^ a b c de Bruijn (1975) .
- ^บราวน์ (1869) ;สไตน์ (1963) ;คัก (2000) ;คนูธ (2006) ;ฮอลล์ (2008) .
- ^ป็อปเปอร์ (2002 )
- ^ไคลน์ (2013 )
- ^ตามที่ Berstel & Perrin (2007) กล่าวไว้ ลำดับที่สร้างขึ้นด้วยวิธีนี้ได้รับการอธิบายครั้งแรก (ด้วยวิธีการสร้างที่แตกต่างกัน) โดย Martin (1934)และความเชื่อมโยงระหว่างลำดับนี้กับคำศัพท์ของ Lyndon ได้รับการสังเกตโดย Fredricksen & Maiorana (1978 )
- ^ a b Higgins (2012) .
- ^กอร์สกีและแคลปเปอร์ (2012 )
- ^ราลสตัน (1982)หน้า 136–139
- ↑ "ลำดับเดอ บรุยน์" . ปราชญ์สืบค้นเมื่อ2023-03-07 .
- ^ Aguirre, Mattar & Magis-Weinberg (2011) .
- ^ "เครื่องกำเนิดวัฏจักรเดอ บรูอิน"เก็บถาวรจากต้นฉบับเมื่อ 2016-01-26 เรียกดูเมื่อ2015-09-15
- ^แวน ลินท์ และ วิลสัน (2001 )
- ^แอนเดอร์สัน (1997–2009) ;บุช (2009)
- ↑ "ลำดับเดอ บรุ ยน์ (DeBruijn) (K=10, n=3)"
- ^โอซิปอฟ (2016 )
- ^ทูเลียนี (2001 )
- ^เฮอร์ลเบิร์ตและไอแซค (1993 )
ลิงก์ภายนอก
- ไวส์สไตน์, เอริก ดับเบิลยู. "de Bruijn Sequence" . แมทเวิลด์ .
- ลำดับ OEIS A166315 (ลำดับไบนารีเดอบรูจินที่เล็กที่สุดในพจนานุกรม)
- ลำดับ De Bruijn เก็บถาวร 11-04-2011 ที่Wayback Machine
- เครื่องกำเนิดภาพ CGI
- ตัวสร้างแอปเพล็ต
- ตัวสร้างและถอดรหัส JavaScriptการนำอัลกอริทึมของ J. Tuliani มาใช้
- ระบบล็อคประตูด้วยรหัส
- อาร์เรย์ขั้นต่ำที่ประกอบด้วยชุดค่าผสมย่อยทั้งหมดของสัญลักษณ์: ลำดับเดอ บรูอิน และทอรัส
- http://debruijnsequence.orgมีลำดับ de Bruijn หลายประเภท
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ลำดับเดอ บรูอิน
ใน คณิตศาสตร์ เชิงการจัด เรียง ลำดับ เดอ บรูอิน (de Bruijn sequence ) อันดับ n บน ตัวอักษร A ขนาด k คือ ลำดับวัฏจักร ที่สตริงความยาว n ทุก สตริง ที่เป็นไปได้ บน A...
ประวัติศาสตร์
ตัวอย่างที่เก่าแก่ที่สุดของลำดับเดอ บรูอิน (de Bruijn sequence) มาจาก ฉันทลักษณ์ภาษาสันสกฤต ซึ่งนับตั้งแต่ผลงานของ ปิงคลา (Pingala ) รูปแบบสามพยางค์ที่เป็นไปได้ของพยางค์ยาวและสั้นแต่ละแบบจะได้รับชื่อเรียก เช่น 'y' สำหรับสั้น-ยาว-ยาว และ 'm' สำหรับยาว-ยาว-ยาว...
ตัวอย่าง
เมื่อกำหนดให้ A = {0, 1} จะมี B (2, 3) ที่แตกต่างกันสองค่า ได้แก่ 00010111 และ 11101000 โดยค่าหนึ่งเป็นค่าผกผันหรือค่าปฏิเสธของอีกค่าหนึ่ง ในบรรดาตัวอักษร B (2, 4) ที่เป็นไปได้ 16 ตัว มีสองตัวคือ 0000100110101111 และ 0000111101100101 ในบรรดาตัวอักษร B (2, 5)...
การก่อสร้าง
ลำดับเดอ บรูอินสามารถสร้างได้โดยการใช้ เส้นทางแฮมิลโท เนียน ของ กราฟเดอ บรูอิน n มิติเหนือ สัญลักษณ์ k ตัว (หรือเทียบเท่ากับ วงจรออยเลอร์ ของกราฟเดอ บรูอิน ( n − 1) มิติ) [ 5 ]