我试图使用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