我試圖使用Go實現聯合查找算法。我想執行不同的策略,如快速查找,快速聯盟和加權快速聯盟使用一個結構UnionFind
見下文。我把代碼放到一個包裝unionfind
如何組織代碼包
package unionfind
type Unionfind struct {
elements []int
}
func makeUnionfind(n int) Unionfind {
elements := make([]int, n)
for idx := range elements {
elements[idx] = idx
}
return Unionfind{elements}
}
接下來,我創建開始quick find
不同策略的功能。下面的例子不起作用。但我不知道在哪裏放置策略特定的代碼,如何命名包以及如何導入公共結構類型。
// create a separate package for each strategy?
package quickfind
// import the structure locally?
import ufp "./unionfind"
// prefer methods over functions for convenience?
func (uf *ufp.Unionfind) union(a int, b int) {
aroot := uf.elements[a]
broot := uf.elements[b]
for k, v := range uf.elements {
if v == aroot {
uf.elements[k] = broot
}
}
}
func (uf *ufp.Unionfind) connected(a int, b int) bool {
return uf.elements[a] == uf.elements[b]
}
我應如何組織我的代碼獲得快速找到算法工作,但已在UnionFind
結構分開嗎?
你確定這些是源文件的保存版本?這個錯誤表明'quickfind.go'文件說'package quickfind'(實際上,它看起來像你粘貼了同一個文件兩次。什麼是quickfind.go?) – JimB
@JimB謝謝,我複製了第一個文件兩次。現在應該是正確的。 – sschmeck
你不能在同一個文件夾中有兩個包。請閱讀https://golang.org/doc/code.html – fl0cke