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 }
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()) } }