Go to work で実装された DisjointSets データ構造 (Cormen から取得) がありint64
ます。
type DisjointSets struct {
ranks map[int64]int64
p map[int64]int64
}
// New returns a new DisjointSets
func NewDisjointSets() *DisjointSets {
d := DisjointSets{map[int64]int64{}, map[int64]int64{}}
return &d
}
// MakeSet adds element x to the disjoint sets in its own set
func (d *DisjointSets) MakeSet(x int64) {
d.p[x] = x
d.ranks[x] = 0
}
// Link assigns x to y or vice versa, depending on the rank of each
func (d *DisjointSets) Link(x, y int64) {
if d.ranks[x] > d.ranks[y] {
d.p[y] = x
} else {
d.p[x] = y
if d.ranks[x] == d.ranks[y] {
d.ranks[y] += 1
}
}
}
// FindSet returns the set in which an element x sits
func (d *DisjointSets) FindSet(x int64) int64 {
if x != d.p[x] {
d.p[x] = d.FindSet(d.p[x])
}
return d.p[x]
}
// Union combines two elements x and y into one set.
func (d *DisjointSets) Union(x, y int64) {
d.Link(d.FindSet(x), d.FindSet(y))
}
float64
、などでこの構造を使用するためのインクリメンタル コードをできるだけ少なく書きたいのですがstring
、どうすればよいですか?
これまでに試したこと
インターフェイスについてできる限りのことを読みましたが、型ごとに完全な実装を書かなくてもそれを適用する方法を理解していないようです。