Donald Knuth Dancing链接特殊指针实现

时间:2017-01-25 18:38:48

标签: c algorithm knuth

目前我正致力于实施D.Kuth DLX算法/数据结构。

我知道什么是确切的封面以及Dancing链接的工作原理。但我对his paper:

有疑问

在第5页,他描述了算法的实现。在那里,他的数据对象x"节点有" C字段"那点 到相关列开头的列对象。但我不完全理解他为什么需要它以及他如何使用它?同样适用于" C提交的#34;对于"列对象"。

typedef struct Data{
  struct Data *left, *right, *up, *down;
  struct Column *c;
} Data;

typedef struct Column{
  struct Column *left, *right, *up, *down;
  struct Data *c;
  int size, name;
} Column;

1 个答案:

答案 0 :(得分:3)

您正在谈论的指针指向一个标题对象,该标题对象用于指示列中有多少个对象(相当于矩阵的该列中有多少个1)。这样使用,以便算法可以启发式地确定在“确定性地选择列”步骤中选择哪个列,因为您可能想要执行类似“选择其中包含最少条目的列”的操作。当你从矩阵中拼出一行时,C字段可以很容易地更新列标题:对于每个被删除的条目,按照C指针指向列标题并在那里减少计数器;对于重新插入的每个条目,按照C指针指向列标题并在那里递增计数器。