面试题:实现KNN,给定各个点之间的距离,返回某个点的k个neighbor。
思路: 考虑到A家喜欢问海量数据,所以用heap,复杂度O(nlogk)。 当时是自己实现的heap。后来发现可以直接调用STL中的set 或者multiset来实现。
Mulitiset: STL中 set 和multiset
set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。(本例中使用距离作为比较元素,而距离是很有可能)
typedef struct{
int index;
double length;
}Info;
typedef struct{
bool operator()(const Info& info1, const Info& info2){
if ((info1.length - info2.length) > 0)
return true;
return false;
}
}Comp;
typedef multiset<Info,Comp> intSet;
void GetLeastNumbers(const vector<Info