드 브뤼옌 수열
de Bruijn sequence조합 수학에서, 크기-k 알파벳 A의 de Bruijn 순서 n은 A의 가능한 모든 길이-n 문자열이 정확히 한 번 하위 문자열(즉, 연속적인 연속 문자열로서) 발생하는 주기적 순서다. 그러한 순서는 B(k, n)로 표시되며 길이 k가n 있는데, 이는 또한 A에서 길이 n의 구별되는 문자열의 수입니다. B(k, n)의 하위 문자열로 취했을 때, 이러한 각각의 구별되는 문자열은 동일한 위치에서 시작하는 하위 문자열은 구별되지 않기 때문에 다른 위치에서 시작해야 한다. 따라서 B(k, n)에는 최소한 kn 기호가 있어야 한다. 그리고 B(k, n)는 정확히n k 기호를 가지고 있기 때문에, De Bruijn 시퀀스는 최소한 한 번 길이 n의 모든 줄을 포함하는 속성에 관해서 최적으로 짧다.
Bruijn 시퀀스 B(k, n)의 수는 다음과 같다.
이 시퀀스들은 네덜란드 수학자 니콜라스 고베르 드 브루옌의 이름을 따서 지어졌다. 그는 1946년에 이 시퀀스에 대해 썼다. 나중에 그가 썼듯이,[1] 위의 성질과 함께 각 주문에 대한 데 브루옌 시퀀스의 존재는 카밀 플라이 세인테 마리(1894)에 의해 두 가지 원소를 가진 알파벳의 경우에 대해 처음으로 증명되었다. 더 큰 알파벳에 대한 일반화는 타티아나 판 아덴 에흐렌페스트와 데 브루옌(1951년) 때문이다. 이러한 시퀀스를 인식하는 오토마타는 de Bruijn automata로 표시되며 일부 시간 지연 신경망과 위상적으로 유사하다.[2]
대부분의 애플리케이션에서 A = {0,1}.
역사
데 브루옌 수열의 가장 초기 알려진 예는 산스크리트 프로소디에서 왔는데, 핑갈라의 작업 이후 각각의 가능한 3음절의 긴 음절과 짧은 음절의 패턴이 짧은 음절의 'y'와 긴 음절의 'm'과 같은 이름이 주어진다. 이 이름들을 기억하기 위해, '야마타'라는 이름에서 출발하여 각각 3음절의 패턴이 발생하는 니모닉 야마타자바자르아살람을 사용한다: '야마타'는 짧은 길이의 패턴을 가지고 있고, '마타자'는 짧은 길이의 패턴을 가지고 있는 '살람'까지 긴 패턴을 가지고 있다. 이 니모닉은 2진법 3쌍에 대한 데 브루옌 순서에 해당하는 것으로, 고대는 알 수 없으나 적어도 찰스 필립 브라운의 산스크리트 프로소디에 관한 1869년 저서 '파지니가 쓴 고대사'[3]만큼 오래되었다.
1894년 A. de Rivier는 프랑스 문제 저널 L'Intermédiaire des Mathématiciens'에 의 길이 n n}의 이진 시퀀스를 포함하는 0과 크기 displaystylement의 존재에 대해 문제를 제기했다. 같은 해 Camille Flye Sainte-Marie에 의해 (긍정적으로) 2 n -- 1 - {\2^{n-1개별 해결책이 나왔다.[1] 이것은 대체로 잊혀졌고, 마틴(1934)은 2 대신에 일반 알파벳 크기에 대한 그러한 사이클의 존재를, 그것들을 구성하는 알고리즘으로 증명했다. 마침내 1944년 키즈 사데우스가 이진 시퀀스에 대한 카운트 - 1- 1 - 2을 추측했을 때, 드 브루이진은 1946년에 그 추측을 증명했고, 그 과정을 통해 문제가 잘 알려지게 되었다.[1]
Karl Popper는 그의 과학탐구의 논리(1934년)에서 이러한 사물을 "가장 짧은 무작위적인 순서"[4]라고 부르며 독립적으로 묘사한다.
예
- A = {0, 1}을(를) 취하면 두 개의 뚜렷한 B(2, 3)가 있는데, 00010111과 11101000이 있는데, 하나는 다른 B의 역순 또는 부정이다.
- 같은 알파벳에서 가능한 16개의 B(2, 4) 중 2개는 0000100110101111과 000011111100101이다.
- 같은 알파벳에서 가능한 2048년 B(2, 5) 중 2개는 00000100011000010100111011011011111과 00000101001000111111111110011010101110111011101110111011101110111101111011110111101011이다.
건설
de Bruijn 시퀀스는 k 기호(또는 동등하게 (n - 1)차원 de Bruijn 그래프)에 n차원 bruijn 그래프의 해밀턴 경로를 취함으로써 구성할 수 있다.[5]
대안적인 구조는 사전순으로, 길이가 n으로 나뉘는 모든 린든 단어들을 연결시키는 것을 포함한다.[6]
역 버로우스-휠러 변환을 사용하여 사전 사전순으로 필요한 린든 단어를 생성할 수 있다.[7]
De Bruijn 시퀀스는 또한 시프트 레지스터를[8] 사용하거나 유한한 필드를 통해 구성될 수 있다.[9]
de Bruijn 그래프 사용 예제
목표: 오일러니안(n - 1 = 4 - 1 = 3) 3-D de Bruijn 그래프 주기를 사용하여 길이4 2 = 16의 B(2, 4) de Bruijn 시퀀스를 구성한다.
이 3차원 de Bruijn 그래프의 각 가장자리는 네 자릿수 순서에 해당한다. 가장자리가 떠나는 정점에 레이블을 붙인 세 자리와 가장자리에 레이블을 붙인 자리. 000에서 1로 표시된 가장자리를 가로지르면 001에 도착하며, 따라서 de Bruijn 순서에 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
이는 다음 de Bruijn 순서에 해당한다.
- 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1
8개의 꼭지점은 다음과 같은 방식으로 시퀀스에 나타난다.
{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 ... 그리고 다시 출발점으로 돌아간다 8개의 3자리 시퀀스(정점 8개에 대응)가 각각 정확히 두 번 나타나고, 16개의 4자리 시퀀스(가장자리 16개에 대응)가 각각 정확히 한 번 나타난다.
역 버로우스 사용 예제 -휠러 변환
수학적으로, 역 버로우스-w 단어의 휠러 변환은 문자열과 그 회전으로 구성된 동등성 클래스의 다중 집합을 생성한다.[7] 이러한 문자열의 등가 등급은 각각 고유한 최소 요소로서 린든 단어를 포함하므로 역 버로우스-휠러 변환은 일련의 린든 단어를 생성하는 것으로 간주될 수 있다. 우리가 역 버로우스를 수행한다면-K번 반복된 k번n-1 size-k 알파벳으로 구성된 w 단어의 휠러 변환(그래서 원하는 de Bruijn 순서와 동일한 길이의 단어를 생성함), 그러면 그 결과는 길이가 n으로 나누어진 모든 린든 단어의 집합이 될 것이다. 이 린돈어들을 사전순으로 배열하면 드 브루옌어 서열 B(k,n)가 나오고, 이것이 첫 번째 드 브루옌 서열이 된다. 다음 방법을 사용하여 역 버로우스를 수행할 수 있다.표준 순열을 사용하는 휠러 변환:
- 문자열 w의 문자를 정렬하여 새 문자열 w'를 생성하십시오.
- 문자열 w'를 문자열 w 위에 놓고, 순서를 유지하면서 w'에 있는 각 문자의 위치를 w의 위치에 매핑한다. 이 과정은 표준 순열을 정의한다.
- 이 순열은 각 사이클에서 가장 작은 위치를 가진 사이클 표기법으로 먼저 작성하고 사이클은 증가 순서에 따라 정렬한다.
- 각 사이클에서 각 숫자를 해당 위치에 있는 문자열 w'의 해당 문자로 교체하십시오.
- 각 사이클은 이제 린든어(Lyndon)가 되었고, 사전순으로 배열되어 있으므로 괄호를 떨어뜨리면 첫 번째 드 브뤼옌 순서가 나온다.
예를 들어 길이 24 = 16의 가장 작은 B(2,4) de Bruijn 시퀀스를 구성하려면 알파벳(ab)을 w=abababababababababababababababbababbabababbabbabbab)으로 8번 반복하십시오. 문자를 w'=aaaaabbbb로 구분하십시오. 그림과 같이 w'를 w 위에 놓고, w'의 각 원소를 w의 해당 원소에 선을 그려 매핑한다. 순열의 주기를 읽을 수 있도록 그림과 같이 열에 번호를 매긴다.
왼쪽부터 표준 순열 표기 주기는 (1) (2 3 5 9) (4 7 13 10) (6 11) (8 15 14 12) (16)이다. (표준 순열)
그런 다음 각 숫자를 해당 열의 해당 문자로 교체하면 다음과 같은 결과가 나온다. (a)(aab)(abb)(b)
이것은 모두 린다온어로서 길이가 4로 나누어진 어휘들이므로 괄호를 떨어뜨리면 B(2,4) = aaaababbabbb가 된다.
알고리즘.
다음 파이톤 코드는 프랭크 러스키의 콤비네토리얼 제너레이션의 알고리즘에 기초하여 주어진 k와 n으로 주어진 de Bruijn 시퀀스를 계산한다.[10]
로부터 타자 치기 수입하다 반복할 수, 유니온, 아무거나 반항하다 de_jijn(k: 유니온[반복할 수[아무거나], 인트로], n: 인트로) -> 발을 동동 구르다: """de Bruijn sequence for 알파벳 k" 그리고 길이 n의 부분. """ # 두 종류의 알파벳 입력: 정수 확장 # 알파벳 정수의 리스트에.. 만일 현시점(k, 인트로): 알파벳의 = 리스트를 작성하다(지도를 그리다(발을 동동 구르다, 범위(k))) 다른: # 어떤 종류의 리스트가 있는 그대로 사용되는 동안 알파벳의 = k k = 렌(k) a = [0] * k * n 순서를 매기다 = [] 반항하다 db(t, p): 만일 t > n: 만일 n % p == 0: 순서를 매기다.연장하다(a[1 : p + 1]) 다른: a[t] = a[t - p] db(t + 1, p) 을 위해 j 에 범위(a[t - p] + 1, k): a[t] = j db(t + 1, t) db(1, 1) 돌아오다 "".합류하다(알파벳의[i] 을 위해 i 에 순서를 매기다) 인쇄하다(de_jijn(2, 3)) 인쇄하다(de_jijn("abcd", 2)) 어느 것이 인화되는지.
00010111 aabadibbcbdccdddd.
이러한 시퀀스는 사이클에서 "랩 어라운드"로 이해된다는 점에 유의하십시오. 예를 들어, 첫 번째 시퀀스는 110과 100을 이런 방식으로 포함하고 있다.
사용하다
| B{10,3} 위아래로 판독된 자릿수 그리고 왼쪽에서 오른쪽으로;[11] "00" 산출량 추가 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) |
이 시퀀스는 "입력" 키가 없고 입력한 마지막 n자리 숫자를 수락하는 PIN과 같은 코드 잠금 장치에 대한 브루트 포스 공격을 단축하는 데 사용할 수 있다. 예를 들어, 4자리 코드(0부터 9까지의 각 자릿수)가 있는 디지털 도어락에는 길이 10000의 B(10, 4) 솔루션이 있을 것이다. 따라서 잠금 장치를 열기 위해서는 최대 10000 + 3 = 10003(해결 방법이 순환이기 때문에)만 누를 필요가 있다. 모든 코드를 개별적으로 시도하려면 4 × 10000 = 4만 프레스가 필요하다.
원형 물체(로봇의 바퀴 등) 둘레에 쓰여진 de Bruijn 수열의 기호를 사용하여 고정점을 향한 n개의 연속 기호를 조사함으로써 그 각도를 식별할 수 있다. 이 각도 인코딩 문제는 "회전 드럼 문제"[12]로 알려져 있다. 회색 코드는 유사한 회전 위치 인코딩 메커니즘으로 사용될 수 있다.
De Bruijn cycle은 자극질서가 신경계에 미치는 영향을 조사하는 신경과학 및 심리학 실험에서 일반적으로 사용되며,[13] 기능적 자기 공명 영상과 함께 사용하기 위해 특별히 제작할 수 있다.[14]
de Bruijn 시퀀스를 사용하여 비트 연산(bitwise operation)을 사용하여 단어에서 가장 중요도가 낮은 세트 비트("최우측 1") 또는 가장 중요한 세트 비트("최우측 1")의 인덱스를 신속하게 찾을 수 있다.[15] 32비트 부호 없는 정수에서 최하위 비트의 인덱스를 반환하는 예는 비트 조작과 곱셈을 사용하여 아래에 제시되어 있다.
서명이 없는 인트로 v; 인트로 r; 정태의 경시하다 인트로 MultiDeBruijnBitPosition[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 }; r = MultiDeBruijnBitPosition[((uint32_t)((v & -v) * 0x077CB531u)) >> 27]; v에서 LSB의 인덱스는 r에 저장되며, v에 설정된 비트가 없으면 작업이 0을 반환한다. 상수, 0x077CB531U, 표현식에는 B(2, 5) 시퀀스 0000 0111 0111 1100 1011 0101 0011 0001(명확하게 하기 위해 스페이스 추가)이 있다.
32비트 부호 없는 정수에서 가장 중요한 비트 집합의 인덱스를 반환하는 예는 비트 조작과 곱셈을 사용하여 아래에 제시되어 있다.
uint32_t keep BostBit( uint32_t n ) { n = (n >> 1); n = (n >> 2); n = (n >> 4); n = (n >> 8); n = (n >> 16); 돌아오다 n - (n >> 1); } uint8_t 최고 비트색인( uint32_t b ) { 정태의 경시하다 uint32_t 드브린 매직 = 0x06EB14F9; 정태의 경시하다 uint8_t 드브루이진테이블[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, }; 돌아오다 드브루이진테이블[(keep BostBit(b) * 드브린 매직) >> 27]; } F-폴드 드 브루옌 시퀀스
'f-fold n-ary de Bruijn sequence'는 n-ary de Bruijn 개념의 연장선으로, 길이 n 의 순서에 길이 n의 가능한 모든 연속성이 정확하게 포함되어 있다. 예를 들어, = 의 경우 순환 시퀀스 11100010과 11101000은 두 배의 이진 de Bruijn 시퀀스다. The number of two-fold de Bruijn sequences, for is , the other known numbers[16] are , , and .
드 브뤼옌 토루스
de Bruijn torus는 모든 k-ary m-by-n 행렬이 정확히 한 번 발생하는 특성을 가진 토로이드 배열이다.
그러한 패턴은 로터리 인코딩에 대해 위에서 설명한 것과 유사한 방식으로 2차원 위치 인코딩에 사용될 수 있다. 위치는 센서에 직접 인접한 m-by-n 매트릭스를 검사하고, 드 브루옌 토러스에서의 위치를 계산하여 결정할 수 있다.
드 브뤼옌 해독
de Bruijn 시퀀스 또는 torus에서 특정한 독특한 튜플 또는 매트릭스의 위치를 계산하는 것은 de Bruijn 디코딩 문제로 알려져 있다. 효율적인 log ) 디코딩 알고리즘이 존재하며, 2차원 사례로 확장된다[17].[18] De Bruijn 디코딩은 예를 들어 위치 인코딩에 큰 시퀀스나 토리가 사용되는 경우에 관심이 있다.
참고 항목
메모들
- ^ a b c 데 브루옌(1975년).
- ^ Giles, C. Lee; Horne, Bill G.; Lin, Tsungnan (1995). "Learning a class of large finite state machines with a recurrent neural network" (PDF). Neural Networks. 8 (9): 1359–1365. doi:10.1016/0893-6080(95)00041-0.
- ^ 브라운(1869), 스타인(1963), 카크(2000), 크누스(2006); 홀(2008년).
- ^ 포퍼(2002년).
- ^ 클라인(2013년).
- ^ 베르스텔&페린(2007)에 따르면, 이런 식으로 생성된 순서는 마틴(1934년)에 의해 (다른 세대법으로) 처음 기술되었고, 그것과 린든어 사이의 연관성은 프레드릭슨&마오라나(1978년)에 의해 관찰되었다.
- ^ a b 히긴스(2012년).
- ^ Goresky & Klapper (2012년).
- ^ 랄스턴(1982), 페이지 136–139.
- ^ "De Bruijn sequences". Sage. Retrieved 2016-11-03.
- ^ "De Bruijn (DeBruijn) sequence (K=10, n=3)".
- ^ 반 린트 & 윌슨(2001)이다.
- ^ 아귀레, 마타 & 매기스 와인버그(2011년).
- ^ "De Bruijn cycle generator".
- ^ Anderson(1997–2009); 부쉬 (2009)
- ^ 오시포프(2016년).
- ^ 툴리아니(2001년).
- ^ 헐버트 & 이사악(1993)이다.
참조
- van Aardenne-Ehrenfest, Tanja; de Bruijn, Nicolaas Govert (1951). "Circuits and trees in oriented linear graphs" (PDF). Simon Stevin. 28: 203–217. MR 0047311.
- Aguirre, G. K.; Mattar, M. G.; Magis-Weinberg, L. (2011). "de Bruijn cycles for neural decoding". NeuroImage. 56 (3): 1293–1300. doi:10.1016/j.neuroimage.2011.02.005. PMC 3104402. PMID 21315160.
- Anderson, Sean Eron (1997–2009). "Bit Twiddling Hacks". Stanford University. Retrieved 2009-02-12.
- Berstel, Jean; Perrin, Dominique (2007). "The origins of combinatorics on words" (PDF). European Journal of Combinatorics. 28 (3): 996–1022. doi:10.1016/j.ejc.2005.07.019. MR 2300777.
- Brown, C. P. (1869). Sanskrit Prosody and Numerical Symbols Explained. p. 28.
- de Bruijn, Nicolaas Govert (1946). "A combinatorial problem" (PDF). Proc. Koninklijke Nederlandse Akademie V. Wetenschappen. 49: 758–764. MR 0018142, Indagationes Mathematicae 8: 461–467CS1 maint: 포스트스크립트(링크)
- de Bruijn, Nicolaas Govert (1975). "Acknowledgement of Priority to C. Flye Sainte-Marie on the counting of circular arrangements of 2n zeros and ones that show each n-letter word exactly once" (PDF). T.H.-Report 75-WSK-06. Technological University Eindhoven. Cite 저널은 필요로 한다.
journal=(도움말) - Busch, Philip (2009). "Computing Trailing Zeros HOWTO". Retrieved 2015-01-29.
- Flye Sainte-Marie, Camille (1894). "Solution to question nr. 48". L'Intermédiaire des Mathématiciens. 1: 107–110.
- Goresky, Mark; Klapper, Andrew (2012). "8.2.5 Shift register generation of de Bruijn sequences". Algebraic Shift Register Sequences. Cambridge University Press. pp. 174–175. ISBN 978-1-10701499-2.
- Hall, Rachel W. (2008). "Math for poets and drummers" (PDF). Math Horizons. 15 (3): 10–11. doi:10.1080/10724117.2008.11974752. S2CID 3637061. Archived from the original (PDF) on 2012-02-12. Retrieved 2008-10-22.
- Higgins, Peter (November 2012). "Burrows-Wheeler transforms and de Bruijn words" (PDF). Retrieved 2017-02-11.
- Hurlbert, Glenn; Isaak, Garth (1993). "On the de Bruijn torus problem". Journal of Combinatorial Theory. Series A. 64 (1): 50–62. doi:10.1016/0097-3165(93)90087-O. MR 1239511.
- Kak, Subhash (2000). "Yamātārājabhānasalagāṃ an interesting combinatoric sūtra" (PDF). Indian Journal of History of Science. 35 (2): 123–127. Archived from the original (PDF) on 2014-10-29.
- Klein, Andreas (2013). Stream Ciphers. Springer. p. 59. ISBN 978-1-44715079-4.
- Knuth, Donald Ervin (2006). The Art of Computer Programming, Fascicle 4: Generating All Trees – History of Combinatorial Generation. Addison–Wesley. p. 50. ISBN 978-0-321-33570-8.
- Fredricksen, Harold; Maiorana, James (1978). "Necklaces of beads in k colors and k-ary de Bruijn sequences". Discrete Mathematics. 23 (3): 207–210. doi:10.1016/0012-365X(78)90002-X. MR 0523071.
- Martin, Monroe H. (1934). "A problem in arrangements" (PDF). Bulletin of the American Mathematical Society. 40 (12): 859–864. doi:10.1090/S0002-9904-1934-05988-3. MR 1562989.
- Osipov, Vladimir (2016). "Wavelet Analysis on Symbolic Sequences and Two-Fold de Bruijn Sequences". Journal of Statistical Physics. 164 (1): 142–165. arXiv:1601.02097. Bibcode:2016JSP...164..142O. doi:10.1007/s10955-016-1537-5. ISSN 1572-9613. S2CID 16535836.
- Popper, Karl (2002) [1934]. The logic of scientific discovery. Routledge. p. 294. ISBN 978-0-415-27843-0.
- Ralston, Anthony (1982). "de Bruijn sequences—a model example of the interaction of discrete mathematics and computer science". Mathematics Magazine. 55 (3): 131–143. doi:10.2307/2690079. JSTOR 2690079. MR 0653429.
- Stein, Sherman K. (1963). "Yamátárájabhánasalagám". The Man-made Universe: An Introduction to the Spirit of Mathematics. pp. 110–118. Benjamin의 Wardhaugh에서 재인쇄(2012), A Beat of Numbers: 프린스턴 대학 출판부의 500년 인기 수학 글쓰기집 139-144페이지.
- Tuliani, Jonathan (2001). "de Bruijn sequences with efficient decoding algorithms". Discrete Mathematics. 226 (1–3): 313–336. doi:10.1016/S0012-365X(00)00117-5. MR 1802599.
- van Lint, J. H.; Wilson, Richard Michael (2001). A Course in Combinatorics. Cambridge University Press. p. 71. ISBN 978-0-52100601-9.
