2017-01-25 154 views
1

現在我正在研究我的D.Kuth DLX算法/數據結構的實現。Donald Knuth跳舞鏈接特殊指針實現

我知道什麼是確切的封面以及跳舞鏈接是如何工作的。但我有一個問題his paper:

在第5頁,他描述了算法的實現。在那裏,他的「數據對象x」節點具有「C字段」,該字段指向 到相關列的開頭的列對象。但我不完全明白他爲什麼需要它以及他如何使用它? 「列對象」的「C字段」也是如此。

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; 
+0

這不是堆棧溢出的工作原理。閱讀[問];一次**特定**問題。如果oyu有重大問題的理解,退一步,因爲你可能錯過了一些先決條件的知識。 – Olaf

+1

謝謝你回覆我解決了這個問題。 – DeadBigHead

+0

此問題可能更適合http://cs.stackexchange.com/ –

回答

1

你在談論點,這是我們用來表示有多少個對象中有列的標題對象的指針(等同於多少1S是在矩陣的該列)。這是爲了使算法能夠啓發式地確定在「確定性地選擇列」步驟中選擇哪個列,因爲您可能想要執行類似於「選擇其中具有最少條目的列」的內容。 C字段可以方便地在矩陣中拼接一行時更新列標題:對於每個刪除的條目,按照C指針指向列標題並在那裏遞減計數器;對於重新插入的每個條目,請按照指向列標題的C指針並在那裏增加計數器。

+0

「列對象」的「C字段」如何?我沒有找到他使用它的方式。他是否將它用作此列的頭指針? – DeadBigHead