數據挖掘-agnes算法

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
vector<double> v[10010];
int n, k;
double average[10010]; 
int main() {
	cin >> n >> k;
	for(int i = 1; i <= n; i++) {
		cin >> average[i];
		v[i].push_back(average[i]);
	}
	double minn;
	int id1, id2;
	for(int t = 1; t <= n - k; t++) {
		minn = INF;
		for(int i = 1; i <= n; i++) {
			if(v[i].size() == 0) continue;
			for(int j = i + 1; j <= n; j++) {
				if(v[j].size() == 0) continue;
				if(fabs(average[i] - average[j]) < minn) {
					minn = fabs(average[i] - average[j]);
					id1 = i;
					id2 = j;
				}
			}
		}
		average[id1] = (1.0 * average[id1] * v[id1].size() + average[id2] * v[id2].size()) / (v[id1].size() + v[id2].size());
		for(int i = 0; i < v[id2].size(); i++) {
			v[id1].push_back(v[id2][i]);
		}
		v[id2].clear();
	}
	int i = 0;
	for(int j = 1; j <= n; j++) {
		if(v[j].size() == 0) continue;
		cout << ++i << ": ";
		for(int k = 0; k < v[j].size(); k++) cout << v[j][k] << " ";
		cout << endl;
	}
	return 0;
}
/*
8 2
1 2 3 4 5 6 7 8
7 3
5 1 3 6 7 5 9
*/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章