Example #1
0
void print_list(list lst) {
	int i;
	for (i = 0; i < lst.size(); i++) {
		cout << lst.get(i);
	}
	cout << endl;
}
Example #2
0
void kmeans(list<article_entry*> &l) {
	// Normalize vectors
	printf("Normalizing vectors\n");
	for(int i=0; i<l.size(); i++)
		normalize(l.get(i));
	clusterize(CLUSTERS, l);
}
Example #3
0
void computeCentroid(vector& centroid, const list<vector*> &vectors) {
	if(vectors.size() == 0)
		return;
	list<iter*> iters;
	for(int i=0; i<vectors.size(); i++) {
		iter *it = new iter;
		it->size = vectors.get(i)->size;
		iters.add(it);
	}

	int stop = 0;
	while(!stop) {
		int min_key = 1 << 30;
		stop = 1;
		for(int i=0; i<iters.size(); i++) {
			iter& it = *(iters.get(i));
			int key = vectors.get(i)->keys[it.index];
			if(key < min_key && it.index < it.size) {
				stop = 0;
				min_key = key;
			}
		}
		if(stop)
			break;

		expandVector(centroid);
		centroid.keys[centroid.size - 1] = min_key;

		double value = 0;
		for(int i=0; i<iters.size(); i++) {
			iter& it = *(iters.get(i));
			int key = vectors.get(i)->keys[it.index];
			double val = vectors.get(i)->values[it.index];
			if(key == min_key && it.index < it.size) {
				value += val;
				it.index++;
			}
		}

		centroid.values[centroid.size - 1] = value;
	}

	for(int i=0; i<centroid.size; i++)
		centroid.values[i] /= vectors.size();
	for(int i=0; i<iters.size(); i++)
		delete iters.get(i);
}