func (this *CentriodPriorityQueue) compare(centroid1 types.Centroid, centroid2 types.Centroid) int {
	id1 := centroid1.GetID()
	id2 := centroid2.GetID()
	if id1 > id2 {
		return 1
	} else if id1 < id2 {
		return -1
	}
	return 0
}
Exemplo n.º 2
0
func (this *KHHCentroidCounter) Add(centroid types.Centroid) {
	this.count++
	count := this.AddLong(centroid.GetID(), 1)
	delete(this.frequentItems, centroid.GetID())
	probed := this.frequentItems[centroid.GetID()]

	for i := 0; i < centroid.GetIDs().Length(); i++ {
		if probed != nil {
			break
		}
		if centroid.GetIDs().Get(int64(i)) {
			delete(this.frequentItems, int64(i))
			probed = this.frequentItems[int64(i)]
		}
	}

	if probed == nil {
		this.countlist[centroid.GetID()] = count
		this.frequentItems[centroid.GetID()] = centroid
		this.priorityQueue.Enqueue(centroid)
	} else {
		//If we are going to search everytime we need a different data struct
		this.priorityQueue.Dequeue() //this.priorityQueue.Dequeue(probed);
		probed.UpdateVector(centroid.Centroid())
		probed.GetIDs().AddAll(centroid.GetIDs())
		this.frequentItems[probed.GetID()] = probed
		this.countlist[probed.GetID()] = count + 1
		this.priorityQueue.Enqueue(probed)
	}

	if this.priorityQueue.Size() > this.k {
		removed := this.priorityQueue.Poll()
		delete(this.frequentItems, removed.GetID())
		delete(this.countlist, removed.GetID())
	}
}