Talk:Dancing Links

From Wikipedia, the free encyclopedia
Jump to: navigation, search
WikiProject Computing  
WikiProject icon This article is within the scope of WikiProject Computing, a collaborative effort to improve the coverage of computers, computing, and information technology 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.
 ???  This article has not yet received a rating on the project's quality scale.
 ???  This article has not yet received a rating on the project's importance scale.
 

This should not be merged with linked list as they are not the same thing. Linked list is the general name for a programming practice of creating nodes that are linked together, while dancing links is a method of iterating through the links, or so i can gather. 212.179.254.74 04:29, 24 September 2005

  • I agree, this should not be merged with linked list. Dancing links is a way of removing elements from and re-inserting elements into a doubly-linked list, which is used in implementing an algorithm for trial-and-error searches for solutions to a problem. This article is about a different topic, and should be expanded on, but not merged. ralmin 20:37, 16 October 2005 (UTC)
  • Don't merge. I understand linked lists and was looking for information of dancing links, so I have no interest in reading through the lengthy article on linked lists to.
  • Don't merge. Whilst the Dancing Link exploits a particularly interesting characteristic of a category of linked list (the 4 way double linked list) that is the end of the similarity. This Dancing Link is an algorithm for solving a certain class of problem (exact cover problem) whereas a link list is a data structure. Those who want to learn about this algorithm will not want to trawl though lots of information on Linked Lists -- Andy Hedges
  • Don't merge. The above positions say it all. --asmodai 11:16, 12 November 2005 (UTC)

Dancing links and Algorithm X[edit]

I've read Knuth's paper, and in its current state, this article discusses two aspects:

Knuth's Algorithm X (vaguely) Converting a Sudoku board for use by Algorithm X

The only place in this article where Dancing Links are correctly referred to is where it states that Dancing Links is an algorithm using linked lists. Overall this article is grossly misleading. Read Knuth's paper (linked from the article) to see what I'm talking about.

I think I'll rewrite this even though I'm no expert on the subject; it certainly can't turn out worse.

... Done. The new Algorithm X page will show up... when wikipedia updates their database or whatever needs to happen.

Eneg 19:41, 5 January 2006 (UTC)

It seems to me that we're inventing the term "Algorithm X" for this page; is that true? That might not be the best idea (not doing original research, etc). Glasser 04:35, 8 January 2006 (UTC)

Glasser, please read the original article before making assertions like this. Eneg 19:32, 8 January 2006 (UTC)

You're right, it had been a while since I read the article and only remembered DLX. Sorry. Glasser 21:54, 12 January 2006 (UTC)

I've implemented this algorithm in ML (using only wiki and it didn't take very long...!) but it seems that the sentence "Finally, remove each column (...) in which the selected row has a 1" should also advise writers to remove rows in which the removed columns have a 1 as these rows cannot be in the solution 87.81.240.123 00:06, 19 January 2006 (UTC)

I've edited to clarify this point. --Syperk (talk) 23:13, 18 September 2011 (UTC)

Example needed[edit]

Would it be possible to get an example of how a Sudoku puzzle is represented by a matrix? I suppose I could try to figure it out and post it and see if it lasts.

  • I think this is a good idea. But I think it makes the most sense to include this as part of a Sudoku example in the exact cover article. See my question/suggestion below about reorganizing related articles. --Rob Zako 17:37, 27 June 2006 (UTC)
  • I have done this programmatically, and I should warn you that these matrices are kind of, erm, large. Ish. Shinobu 11:57, 22 November 2006 (UTC)
  • Yes, the matrix is large. See the exact cover article for an abbreviated version of this matrix. --Rob Zako 07:31, 3 December 2006 (UTC)

Reorganize Exact cover, Algorithm X and Dancing Links articles?[edit]

The exact cover, Algorithm X and Dancing Links articles all discuss similar ideas. The exact cover problem is an NP-complete problem; Algorithm X is a brute-force algorithm that finds all solutions to the exact cover problem; and Dancing Links is a computer implementation of Algorithm X. These related topics have received a lot of interest recently because Dancing Links is the preferred technique for solving Sudoku puzzles quickly by computer. I suggest that all three topics be reoganized so that most of the information about concepts and examples is in the exact cover articles, with the other two articles focusing just on the particulars of the algorithm or the computer implementation. --Rob Zako 16:56, 27 June 2006 (UTC)

Note on the Perl example linked[edit]

While I'm flattered (the "Perl example" slide presentation linked was mine), that presentation has nothing at all to do with DLX/Algorithm-X. It was a much more general talk about solving Sudoku in Perl. However, I actually did write an article about using Algorithm-X to solve and generate Sudoku using exact cover in an issue of The Perl Review, a print magazine. I think that I replace the link to the slides with a reference to that print publication. Note, however that it only relates to the exact cover Sudoku solver component of Knuth's paper, and does not employ DLX in any way. 74.109.0.116 14:06, 9 January 2007 (UTC) (fishbot)

Slight adjustment of algorithm description needed[edit]

As the poster at IP 87.81.240.123 observed, it is necessary to finally remove every row containing a 1 in **any** of the columns that the chosen row contains a 1, to avoid conflict (i.e., multiple 1s in a column). Could someone change the text please? (Otherwise I will have a go myself in a few days...) —The preceding unsigned comment was added by 130.123.128.114 (talk) 07:29, 7 April 2007 (UTC).

I have also noticed the incorrect description in the "Exploring" section. I will be happy to reword this myself once I clarify my thoughts a little. Pauldoo (talk) 14:48, 16 July 2009 (UTC)

I've edited the algorithm description to correct / clarify this point. --Syperk (talk) 23:14, 18 September 2011 (UTC)

Reverse arrow?[edit]

What does the reverse arrow (←) mean?  —CobraA1 01:58, 17 June 2008 (UTC)

It appears to mean that the variable on the left hand side is being assigned the value on the right. Most modern programming languages use an equal sign for this, but it's rather different from mathematical equality so some writers prefer other notations such as this one. —David Eppstein (talk) 04:43, 17 June 2008 (UTC)
It should changed, I was confused by it too. I thought it meant traversing a pointer. (i.e. C/C++/etc pointer notation) --Voidvector (talk) 05:53, 30 October 2008 (UTC)
This should not be changed by any means. It's a very common notation in algorithms literature. We should at most point out to a glossary, or mention that somewhere in the text. --NIC1138 (talk) 01:07, 10 May 2011 (UTC)

A tutorial for an external link?[edit]

I had a hard time finding good tutorials on dancing links algorithm and its relation with sodoku that explains it clearly, so I wrote one, after I managed to gather the picture from fragments of information I found. Would someone check the quality of my tutorial, and if it's good enough? If its not formal enough or wrong, feel free to remove!
http://cgi.cse.unsw.edu.au/~xche635/dlx_sodoku/
A non-official informal tutorial on solving sodoku with dancing links with example C implementation. —Preceding unsigned comment added by 60.240.25.12 (talk) 15:39, 24 July 2009 (UTC)

Difficult to understand, and suggestions for expansion[edit]

For some reason, I find that this article (combined with the Algorithm X article) difficult to understand, and does not give me quite sufficient details to implement DLX in my own codes. On the other hand, Knuth's paper is to the point, contains sufficient examples, making it easily understandable for me to implement DLX. My suggestion is to merge the two pages, and to reproduce the pseudocode from Knuth's paper on this page.

Further, the following two links could contain additional information that allows this article to be expanded:

--unkx80 (talk) 14:01, 13 November 2009 (UTC)