我如何最好地输入这个 Go DisjointSets 数据结构?

我有一个 DisjointSets 数据结构(从 Cormen 中提取),在 Go 中实现以使用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等等。我该怎么办呢?


到目前为止我尝试过的


我已经阅读了有关接口的所有内容,但我似乎不明白如何在不必为每种类型编写完整实现的情况下应用它。


慕尼黑的夜晚无繁华
浏览 168回答 3
3回答

慕斯709654

Go 没有模板,所以我认为没有一种优雅的方法可以做到这一点。您可以尝试将类更改为 takeinterface{}而不是 int64。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go