Talk:De Bruijn sequence
This article is rated C-class on Wikipedia's content assessment scale. It is of interest to the following WikiProjects: | ||||||||||||||||||||||||||||
|
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 ", is wrong. A Hamiltonian cycle over the complete graph is just an ordering of the 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 -dimensional de Bruijn graph over 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 -dimensional de Bruijn graph, you obtain a de Bruijn sequence of order . Since it's easy to prove (by the definition) that the -dimensional de Bruijn graph is just the line graph of the -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
[edit]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
[edit]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
[edit]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
[edit]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
[edit]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
[edit]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 ) 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)
- 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)
Code implementation
[edit]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)
- I wrote a C version based on the Python code. It takes two parameters, an alphabet (length k) and an n value, and writes the sequence directly to stdout as it goes. For example,
./de_bruijn "abcd" 2
outputsaabacadbbcbdccdd
. I'm not too familiar with Python ranges, but my translation seems to work the same. It's still not really obvious how it works though... CountingPine (talk) 12:54, 22 April 2019 (UTC)#include <stdio.h> #include <stdlib.h> #include <string.h> unsigned char *a; unsigned const char *alphabet; int k, n; void db(int t, int p) { if (t > n) { if (n % p == 0) for (int j = 1; j <= p; j++) putchar(alphabet[a[j]]); } else { a[t] = a[t - p]; db(t + 1, p); for (int j = a[t - p] + 1; j < k; j++) { a[t] = j; db(t + 1, t); } } } int main(int arg_c, char *arg_v[]) { if (arg_c < 3) { printf("Usage: %s <alphabet> <n>\n", arg_v[0]); return 1; } alphabet = arg_v[1]; k = strlen(alphabet); n = atoi(arg_v[2]); a = calloc(k * n, 1); db(1, 1); free(a); printf("\n"); return 0; }
- I wrote a C version based on the Python code. It takes two parameters, an alphabet (length k) and an n value, and writes the sequence directly to stdout as it goes. For example,
External links modified
[edit]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.
This message was posted before February 2018. After February 2018, "External links modified" talk page sections are no longer generated or monitored by InternetArchiveBot. No special action is required regarding these talk page notices, other than regular verification using the archive tool instructions below. Editors have permission to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the RfC before doing mass systematic removals. This message is updated dynamically through the template {{source check}}
(last update: 5 June 2024).
- 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.
Cheers.—cyberbot IITalk to my owner:Online 12:44, 10 January 2016 (UTC)
Incorrect usage of "subsequence" (the correct term here is "substring")
[edit]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)
External links modified
[edit]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:
- Added archive https://web.archive.org/web/20141029120230/http://202.41.82.144/rawdataupload/upload/insa/INSA_2/200059d2_123.pdf to http://202.41.82.144/rawdataupload/upload/insa/INSA_2/200059d2_123.pdf
When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.
This message was posted before February 2018. After February 2018, "External links modified" talk page sections are no longer generated or monitored by InternetArchiveBot. No special action is required regarding these talk page notices, other than regular verification using the archive tool instructions below. Editors have permission to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the RfC before doing mass systematic removals. This message is updated dynamically through the template {{source check}}
(last update: 5 June 2024).
- 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.
Cheers.—InternetArchiveBot (Report bug) 00:33, 7 September 2017 (UTC)
B(2, 4) notation is never explained
[edit]And because of this none of the subsequent examples mean anything. 24.20.7.55 (talk) 15:33, 20 February 2022 (UTC)