[r-t] Big searches
mike.ovenden at homecall.co.uk
Mon Jan 7 22:41:37 UTC 2008
That loop looks exactly like mine (except that for MUG, items 4 and 6 amount
to the same thing). I guess the difference lies in what we each do for item
Mine's basically the FKM algorithm (see below) with some pruning for
falseness. Here's what happens when I put in a length constraint (20
eights) and comment out the falseness checking. Obviously the touches
aren't of much interest...
Depth InternalNodes Branches
1 1 2
2 2 3
3 3 5
4 5 8
5 8 14
6 14 23
7 23 41
8 41 71
9 71 127
10 127 226
11 226 412
12 412 747
13 747 1377
14 1377 2538
15 2538 4720
16 4720 8800
17 8800 16510
18 16510 31042
19 31042 58636
20 58636 111013
InternalNodes Branches Comps
125303 236315 775
You can look up the third column in the On-Line Encyclopedia of Integer
Sequences to discover that it's A062692 - the Number of irreducible
polynomials over F_2 of degree at most n. Doesn't mean anything much to me,
but I gather that it's the same as the number of binary pre-necklaces of
length n, which is what I expect.
Since this is one of the means I used to validate my program, you can
probably understand my focus on exact values. Not that it matters as long
as you know what you're doing and I (think I) know what I'm doing!
>From gordon at csse.uwa.edu.au Thu Jun 3 02:41:25 2004
From: gordon at csse.uwa.edu.au (Gordon Royle)
Date: Thu Jan 5 13:04:19 2006
Subject: [GAP Forum] Lyndon words in GAP
In-Reply-To: <40BE60C4.80100 at mindspring.com>
References: <40BE60C4.80100 at mindspring.com>
Message-ID: <1086226885.20359.7.camel at ekaltadeta>
The FKM algorithm is very easy to implement, and one can extract the
Lyndon words from the output. I gave it to my students as an assignment
question so could give you up to 8 different programs to do it.
However these are not trying to be super-efficient, but just
implementing the algorithm using GAP lists to represent the words..
Proceed as follows to generate length n Lyndon words over an alphabet of
k symbols (0,1,... k-1).
Start with w = [0,0,...,0]
Find the largest index i such that w[i] < k-1
Increase w[i] by 1, and then replace the remainder of the list (w[i+1]
..w[n]) by as many copies of w...w[i] as will fit.
- if i = n, the word is a Lyndon word,
- if i | n, the word is a periodic necklace,
- otherwise the word is a pre-necklace (prefix of some longer
----- Original Message -----
From: "Mark Davies" <mark at snowtiger.net>
To: <ringing-theory at bellringers.net>
Sent: Sunday, January 06, 2008 11:09 AM
Subject: [r-t] Big searches
> Mike Ovenden writes,
>> So I suppose your node count is pretty much my branch count, but I'm
>> wondering how come we're 1% apart.
> I don't think this is very surprising - there are several ways to write an
> inner loop of a search engine, and various places to put the counter
> increment, depending on whether it is before or after various tests for
> inclusion of the current node. My code appears to do the following:
> 1. Use current call to load pointer to next node.
> 2. Is next node null? (Implies this call not allowed from current node)
> Yes -> jump out to try next call.
> 3. Next node is valid, increment node pointer.
> 4. Check to see if node has been visited before. Yes -> jump out to try
> next call.
> 5. Check to see if composition too long with new node. Yes -> jump out.
> 6. Check to see if node is false against anything visited before. Yes ->
> jump out.
> 7. Node OK, mark it as visited.
> 8. Prepare for next iteration, jump to Loop top.
> This is a very simplistic version of the loop, with no pruning, however it
> shows that I count all nodes considered for inclusion, even if they may be
> false or already included in the comp.
> ringing-theory mailing list
> ringing-theory at bellringers.net
More information about the ringing-theory