我正在尝试使用 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结构分离?
不负相思意
喵喔喔
杨魅力
相关分类