好的,我一直在坚持这里的复杂性。有一系列元素,比如A[n]
。需要查找所有对,以便A[i]>A[j]
和i < j
。
因此,如果是{10, 8, 6, 7, 11}
,则对将是(10,8) (10, 6), (10,7) and so on...
我在nlogn时间进行了合并排序,然后在nlogn中再次搜索整个数组,以获取排序数组中元素的索引。
所以sortedArray={6 7 8 10 11}
和index={3 2 0 1 4}
无论我尝试什么,当我开始循环比较时,我在复杂性中不断获得n^2
时间。我的意思是,如果我从第一个元素开始,即10,它是index[2]
,这意味着有2个元素比它少。因此,如果index[2]<index[i]
可以接受它们,但这会增加复杂性。有什么想法吗?我不想要代码,只是在正确的方向上提示会有所帮助。
感谢。我在C和时间复杂度方面所做的一切都很重要c
答案 0 :(得分:4)
您无法在O(N^2)
下执行此操作,因为当原始数组按降序排序时,算法将生成的对数为N(N-1)/2
。您只能在O(N^2)
时间内生成O(N*LogN)
个结果。
答案 1 :(得分:2)
结果由O(n ^ 2)个元素组成,因此迭代遍历所有对的任何尝试都将为O(n ^ 2)。