# Talk:De Bruijn sequence

WikiProject Computer science (Rated C-class, Mid-importance)
This article is within the scope of WikiProject Computer science, a collaborative effort to improve the coverage of Computer science related articles on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
C  This article has been rated as C-Class on the project's quality scale.
Mid  This article has been rated as Mid-importance on the project's importance scale.
WikiProject Mathematics (Rated C-class, Low-importance)
This article is within the scope of WikiProject Mathematics, a collaborative effort to improve the coverage of Mathematics on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
Mathematics rating:
 C Class
 Low Importance
Field:  Discrete mathematics

to create a de-bruijn sequance, "find an Eularian cycle on a de-bruijn graph" is wrong, because Eularian cycle has to use every "edge" once, but to create a de-bruijn sequance need to use every "node" once on a de-bruijn graph.

the article is correct and you are wrong, 'to create a de-bruijn sequance need to use every "node" once on a de-bruijn graph' is incorrect.

I think that the article, which now says "by taking an Hamiltonian cycle of a complete graph of order ${\displaystyle k^{n}}$", is wrong. A Hamiltonian cycle over the complete graph is just an ordering of the ${\displaystyle k^{n}}$ sequences, but since only some orderings give a de Bruijn sequence, this is meaningless. It should rather say "by taking a Hamiltonian cycle of an ${\displaystyle n}$-dimensional de Bruijn graph over ${\displaystyle k}$ symbols. Am I wrong? --fudo 14:29, 10 July 2006 (UTC)
I was wondering the same thing. Since no-one else seems to have objected here over the past 2+ months, I'll be bold and commit it. —JLD 20:31, 28 September 2006 (UTC)

As I understand it, you do use every EDGE exactly once. Michael Hardy 22:26, 28 September 2006 (UTC)

... and now I've added a diagram and an accompanying explanation of why it's Eulerian and not Hamiltonian. Michael Hardy 23:43, 28 September 2006 (UTC)

Everything you said is correct, except for that "not". In fact, by following an Eulerian cycle over an ${\displaystyle n}$-dimensional de Bruijn graph, you obtain a de Bruijn sequence of order ${\displaystyle n+1}$. Since it's easy to prove (by the definition) that the ${\displaystyle n+1}$-dimensional de Bruijn graph is just the line graph of the ${\displaystyle n}$-dimensional one, an Eulerian cycle over the first corresponds exactly to a Hamiltonian cycle over the second one. Try it by yourself. I'll modify slightly the article, leaving your example (which is perfect) as is. --fudo 13:05, 4 October 2006 (UTC)

The early on sentence: "Taking A = {0,1}, there are two distinct B(2,3): 00010111 and 00011101, one being the reverse of the other." Those two sequences are not the reverse of each other. Either a) this should say there are 4 distinct, 00010111 and 00011101 and these two reversed, which appears correct to me or b.) the part about "one being the reverse of the other" should be taken out. 17:18, 5 November 2006 (UTC)

They are reverses of each other if you mod out by cyclic shifts. Michael Hardy 20:15, 6 November 2006 (UTC)

The initial example given (A={0,1}) does not contain the subsequence 110 (although its claimed "reverse" does). So what's going on?

Oh never mind -- it is cyclic, so the sequence is "properly" viewed including the wrap-around from back to front. So the initial B(2,3) contains 110 via the "final" ones + the "initial" zero.

I think the use of the term "subsequence" in the first paragraph is wrong. It should be changed into "substring" or something (Mathworld sais "subrange"), since the elements of a subsequence need not be consecutive in the original sequence. —Preceding unsigned comment added by 85.73.195.2 (talk) 12:27, 16 December 2007 (UTC)

### Capitals

Why is "de Bruijn sequence" not written as "De Bruijn sequence", with capital D? At least in Dutch, the first character of a name has to be a capital, even if it is something like "de" or "van" (so meneer (mister) De Bruijn, but Nicolaas Govert de Bruijn) and I never learned that that's different in English. And after all, De Bruijn was a Dutchman.DaanAlberga 13:15, 8 June 2006 (UTC)

Then why is the initial d in lower case at [[1]]? Michael Hardy 23:52, 12 June 2006 (UTC)
The initial d only is in lower case when it is _not_ the first letter of his name. In "a de Bruijn sequence", the d _is_ the initial letter of his name. In your reference, the Dutch page about De Bruijn, one can see that as well. When it says "Nicolaas de Bruijn" or something like that, the d is in lower case, and when it just says "De Bruijn", the d is a capital. DaanAlberga 09:31, 13 June 2006 (UTC)
Regardless of use in Dutch, reliable sources capitalize as "de Bruijn sequences". One source is the classic "Shift Register Sequences", Golumb, 1967 p131: "Henceforth, maximum-length shift register sequences are referred to as de Bruijn sequences." Searching Google Books yields dozens of other sources. So I'm going to be bold and change the capitalization on the Wikipedia page to match standard mathematical usage. KenShirriff (talk) 06:09, 12 March 2017 (UTC)
I agree; I can confirm that this capitalization is what Knuth uses too: Volume 4A: many such “de Bruijn cycles” exist (p. 142), A de Bruijn cycle..., Such cycles are commonly called m-ary de Bruijn cycles etc. (p. 302), Our first construction of de Bruijn cycles etc. (pp. 304–308), many places in the book. He also uses "de Bruijn" for the name itself, in Volume 3: In the latter paper, de Bruijn proved that (p. 670), See also de Bruijn’s theorem (p. 671). Shreevatsa (talk) 17:14, 14 March 2017 (UTC)

### Possitional encoding improvements

For a flat (not wraped application of possitional detection. Arrange for the sequence of zeros to be at one end and ones at the other. i.e. for the sequence from the article 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 change the point where it would but does not wrap so the sequence reads. 1 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0

Now you can extend the sequence with e.g. (1 1 1 1 1...) 1 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0 (0 0 0 0 0...) Now if the senser detects it is in an all zero or all one regon it knows it is off the map and in which direction. Note: not worked things out for a 2d map but, if in corners it has a 50% chance of getting one axis incorrect, the corect axis will get it out of the corner where it will head back to the map.

—Preceding unsigned comment added by 204.193.45.69 (talk) 16:50, 11 January 2008 (UTC)

### Use in fMRI

GKA pointed out my info on its use with fMRI was a bit too complicated for the page, but I thought I'd put the info here, in case someone wanted to expand on it in future.

In an fMRI experiment, activity at certain frequencies is most easy to detect. By selecting the correct order of stimuli, the researcher can ensure the activity changes of interest vary at the most detectable frequency. A subset of the possible De Bruijn cycles will have this feature. In general the de Bruijn cycle allows the experimenter to maximise the statistical power of the experiment, without compromising on counterbalancing. The method also allows the signal caused by carry-over effects to be maximised, if required.

Thanks, Lionfish0 (talk) 10:26, 22 March 2012 (UTC)

I should also say that I'm happy with the changes GKA made, very nicely summarised :) Lionfish0 (talk) 10:28, 22 March 2012 (UTC)

## Misunderstanding

I read "Taking A = {0, 1}, there are two distinct B(2, 3): 00010111 and 11101000, one being the reverse or negation of the other." Maybe I do not understand De Bruijn sequence's definition, but 000, 001, 010, 011, 100, 101, 110 and 111 should all be substrings of 00010111 and 11101000, right? But I cannot find 100 in the 1st one, and I cannot find 001 in the 2nd one. Where is the mistake ? --Gloumouth1 12:29, 5 December 2013 (UTC)

Ok I think I understood. The sequence is cyclical. --Gloumouth1 12:32, 5 December 2013 (UTC)

## Bit Manipulation Example

I added an example of how a De Bruijn sequence can be used to get the index of the least significant set bit of a 32-bit unsigned integer which I obtained from this page. I added it to the Uses section. I am unsure whether this is acceptable. I know from studying chess engines that De Bruijn sequences are used in this way with bitboards to quickly obtain the position of material. Does anybody feel this example is too particularized; does it detract from the more general discussion of De Bruijn sequences? RawPotato (talk) 23:20, 24 May 2014 (UTC)

• I actually got to this page from the Bit Hacks page. I saw the De Bruijn sequence, and was curious how it'd work. I'd actually like to see an explanation of what it is actually doing. That explanation might make it less "particularized" because similar explanations could be adapted to other sequences. CmdrRickHunter (talk) 01:25, 7 October 2014 (UTC)

## yamātārājabhānasalagam

yamātārājabhānasalagam gives the linear sequence 1000101111 (0=ā, 1=a) which doesn't contain 110. It also gives the same value, 111, to n[asala] and s[alaga]. Kak writes yamātārājabhānasalagām i.e. 1000101110, which contains 110. So where is the mistake? --Episcophagus (talk) 11:54, 30 October 2014 (UTC)

In Sanskrit prosody, "gam" (like "gām", and unlike "ga") is a heavy syllable too, and so the last three syllables (sa-la-gam) correspond to 110 (in your notation), just as sa-la-gām would. This is admittedly not obvious from the brief description, but I find it intellectually dishonest of Kak to change the phrase just because it's harder to understand — or as Saki says, "A little inaccuracy sometimes saves tons of explanation". :-)
If you're interested in the detail, the convention adopted by the Sanskrit prosodists was to describe a long string of light-and-heavy (laghu-and-guru) syllables (strings over the alphabet ${\displaystyle \{L,G\}}$) in shorter words, by using a special name for each possible 3-letter string (e.g. 'ya' for 'LGG'; see also the Greek analogues), and then describing whatever is left over (if the length of the string was not divisible by 3).
For example, the string GGGGLLLLLGGLGGLGG would be segmented (purely for brevity) as GGG/GLL/LLL/GGL/GGL/GG and described as ma-bha-na-ta-ta-gam-gam. (Or ga-ga or gu-gu, but the point is that the final 'la' and 'ga' in the yamātārājabhānasalagam are not arbitrary syllables.) Independently the word "lagam" is used in many places, e.g. in Telugu.
Anyway it's unfortunate that Kak gave a wrong phrase (repeated in others who relied on him for reference), but we can do better and use the correct form. I'll edit the article in a few hours to make it clearer. Shreevatsa (talk) 23:31, 30 October 2014 (UTC)
Thanks for the explanation. It should be mentioned in the text, because it is not obvious for non sanskrit readers. --Episcophagus (talk) 12:50, 31 October 2014 (UTC)
Agreed. I have mentioned it briefly in the article now. Regards, Shreevatsa (talk) 13:58, 31 October 2014 (UTC)

## Code implementation

The link to the mercurial repository which is the source of the code is currently unreachable, and it's probably been unreachable since at least 2012 (according to Google Groups discussions). How can we fix that reference? Do you know an alternate link to the original content?

I have slightly modified the code removing an unneccessary import, adding compatibility with newer Python versions and making it a bit faster and more readable. I don't known whether it would have been better to ask about this before doing that edit, but when I saw that code I found it could be improved.

Bakuriu (talk) 15:33, 23 February 2015 (UTC)

I don't know what the official WP policy is on this, but would a code example in C or pseudo-code not be easier to understand for everyone? Python-specific constructs like "sequence.extend(a[1:p + 1])" aren't really intuitive to readers with a background in other langauges. (Or at least use less Pythonesque Python?) 62.205.85.95 (talk) 06:09, 14 February 2016 (UTC)

Hello fellow Wikipedians,

I have just added archive links to one external link on De Bruijn sequence. Please take a moment to review my edit. If necessary, add `{{cbignore}}` after the link to keep me from modifying it. Alternatively, you can add `{{nobots|deny=InternetArchiveBot}}` to keep me off the page altogether. I made the following changes:

• Added archive https://web.archive.org/20120425160903/http://hg.sagemath.org/sage-main/file/9e29a3d84c48/sage/combinat/debruijn_sequence.pyx to http://hg.sagemath.org/sage-main/file/9e29a3d84c48/sage/combinat/debruijn_sequence.pyx

When you have finished reviewing my changes, please set the checked parameter below to true to let others know.

You may set the `|checked=`, on this template, to true or failed to let other editors know you reviewed the change. If you find any errors, please use the tools below to fix them or call an editor by setting `|needhelp=` to your help request.

• If you have discovered URLs which were erroneously considered dead by the bot, you can report them with this tool.
• If you found an error with any archives or the URLs themselves, you can fix them with this tool.

If you are unable to use these tools, you may set `|needhelp=<your help request>` on this template to request help from an experienced user. Please include details about your problem, to help other editors.

Cheers.—cyberbot IITalk to my owner:Online 12:44, 10 January 2016 (UTC)

## Incorrect usage of "subsequence" (the correct term here is "substring")

The term "subsequence" is incorrectly used throughout the article (including in the picture and in the Python code). "Subsequence" does not mean "substring", which is the correct term here. (Unlike a susbstring, a subsequence need not be a contiguous block of symbols.) — r.e.s. (talk) 04:55, 21 May 2016 (UTC)

As a fix, I've edited the top section, replacing "subsequence" with either "substring" or "contiguous subsequence (i.e., substring)". — r.e.s. (talk) 21:43, 18 June 2016 (UTC)

Hello fellow Wikipedians,

I have just modified one external link on De Bruijn sequence. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:

When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.

You may set the `|checked=`, on this template, to true or failed to let other editors know you reviewed the change. If you find any errors, please use the tools below to fix them or call an editor by setting `|needhelp=` to your help request.

• If you have discovered URLs which were erroneously considered dead by the bot, you can report them with this tool.
• If you found an error with any archives or the URLs themselves, you can fix them with this tool.

If you are unable to use these tools, you may set `|needhelp=<your help request>` on this template to request help from an experienced user. Please include details about your problem, to help other editors.

Cheers.—InternetArchiveBot 00:33, 7 September 2017 (UTC)