From f8672c00fd93ae8e175509bae589761178fa4f12 Mon Sep 17 00:00:00 2001 From: facat Date: Tue, 9 Dec 2014 00:24:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=98=E6=B2=A1=E5=86=99=E5=AE=8C=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=88=9D=E5=A7=8B=E9=9B=86=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: facat --- pam.go | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/pam.go b/pam.go index 8a09dea..1645a80 100644 --- a/pam.go +++ b/pam.go @@ -3,6 +3,7 @@ package main import ( "fmt" + "math" "math/rand" "time" ) @@ -15,6 +16,11 @@ const ( clusterN = 3 ) +type Ctx struct { + data [][]float64 + SetS map[int]interface{} +} + func initData() [][]float64 { //初始数据集 src := rand.NewSource(time.Now().UnixNano()) rnd := rand.New(src) @@ -29,7 +35,66 @@ func initData() [][]float64 { //初始数据集 return r } +func copyIntMap(src map[int]interface{}, dst map[int]interface{}) { + for k, v := range src { + dst[k] = v + } +} + +func minDistance(vec []float64, mat [][]float64) float64 { + var r float64 + r = 1e20 + var t float64 + for m := 0; m < len(mat); m++ { + t = 0 + for v := 0; v < len(vec); v++ { + t += math.Pow(vec[v]-mat[m][v], 2) + } + t = math.Sqrt(t) + if t < r { + r = t + } + } + return r +} + +func subData(set map[int]interface{}, ctx *Ctx) [][]float64 { + r := make([][]float64, len(set)) + ind := 0 + for k, _ := range set { + r[ind] = ctx.data[k] + ind++ + } +} + +func selectInitCluster(ctx *Ctx) { + for clusterI := 0; clusterI < clusterN-1; clusterI++ { + for cluster := 0; cluster < dataN; cluster++ { + if _, has := ctx.SetS[cluster]; has { + continue + } + //选一个候选数据 + cddtI := cluster + cadSetS := make(map[int]interface{}) + copyIntMap(cadSetS, ctx.SetS) + cadSetS[cddtI] = nil + Cij := 0.0 + for J := 0; J < dataN; J++ { + if _, has := cadSetS[J]; has { + continue + } + d := ctx.data[J] + //寻找最短距离 + + } + } + } +} + func main() { - initData() + ctx := Ctx{} + ctx.data = initData() + ctx.SetS = make(map[int]interface{}) + ctx.SetS[1] = nil fmt.Println("Hello World!") }