Sorting 算法/复杂性-最有效的解决方法
所以问题是这个。我将以下内容作为示例输入 |ID | A | B| |2 | 100 | 200| |3 | 110 | 190| |4 | 105 | 145| |1 | 90 | 150| |5 | 102 | 198| 目标如下。对于每个ID x,计算其他ID y的数量,其中y的A大于x的A,y的B小于x的B。因此,上面示例的输出应该是 |ID |计数| |3 | 0| |4 | 0| |1 | 1| |5 | 2| |2 | 3| 其中,ID 3的计数为0,因为它具有最大的A。显然,您可以执行O(n^2)穷举搜索,但这将是低效的 我的算法如下。对输入进行两次排序—一次按A排序,一次按B排序,得到 |ID | A | B | |1 | 90 | 150| |2 | 100 | 200| |5 | 102 | 198| |4 | 105 | 145| |3 | 110 | 190| 及 |ID | A | B| |2 | 100 | 200| |5 | 102 | 198| |3 | 110 | 190| |1 | 90 | 150| |4 | 105 | 145| 然后从第一个排序表中的第一个ID(ID=1)开始,并获得具有较大值的ID(即ID在其下方-2,5,4,3)然后在第二个排序表上查找ID=1,并查看它下面的ID,每次在原始ID集合中找到一个时,计数器都会递增-在这种情况下,第二个表中低于1的唯一ID是4,而4在{2,5,4,3}中,因此输出是1Sorting 算法/复杂性-最有效的解决方法,sorting,hashtable,complexity-theory,Sorting,Hashtable,Complexity Theory,所以问题是这个。我将以下内容作为示例输入 |ID | A | B| |2 | 100 | 200| |3 | 110 | 190| |4 | 105 | 145| |1 | 90 | 150| |5 | 102 | 198| 目标如下。对于每个ID x,计算其他ID y的数量,其中y的A大于x的A,y的B小于x的B。因此,上面示例的输出应该是 |ID |计数| |3 | 0| |4 | 0| |1 | 1| |5 | 2| |2 | 3| 其中,ID 3的计数为0,因为它具有最大的A。显然,您可
所以排序是O(nlogn),我相信其余的操作都是常量。有更好的方法吗?排序后的操作肯定不是常数。真的吗?对于第一个排序表中的每个ID,您将在其下方的哈希表中插入ID(常量),然后对于第二个排序表中当前ID下方的每个ID,您将执行哈希表查找(常量),如果查找发现值->递增计数器(常量).u可能是对的,因为您必须在第二个表的未排序ID列中搜索第一个表中的每个ID。