Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 算法/复杂性-最有效的解决方法_Sorting_Hashtable_Complexity Theory - Fatal编程技术网

Sorting 算法/复杂性-最有效的解决方法

Sorting 算法/复杂性-最有效的解决方法,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。显然,您可

所以问题是这个。我将以下内容作为示例输入

|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}中,因此输出是1


所以排序是O(nlogn),我相信其余的操作都是常量。有更好的方法吗?

排序后的操作肯定不是常数。真的吗?对于第一个排序表中的每个ID,您将在其下方的哈希表中插入ID(常量),然后对于第二个排序表中当前ID下方的每个ID,您将执行哈希表查找(常量),如果查找发现值->递增计数器(常量).u可能是对的,因为您必须在第二个表的未排序ID列中搜索第一个表中的每个ID。