设置:
假设E[1 .. n]是一个n不同数字的数组。
设i,j为数组 E 中元素的索引。
如果1 ? i < j ? n和E[i] > E[j],则这对索引(i, j)称为数组 E 的反转。
问题:
在具有集合元素的所有数组中{1, 2, …, n}:
1. 哪个数组的反转最多?
2. 它有多少个反转?
我的想法:
我最初的想法是,如果数组元素按顺序排列,是否意味着数组已排序,因此反转计数为0?如果数组按降序排序,则反转计数是最大值,因此第一个元素应该具有 n-1 反转,第二个是 n-2 反转,直到最后一个元素,2 具有 1 个反转计数。所以我加起来 (n-1) + (n-2) + (n-3) +...+ 1 = n(n-1)/2。我想问一下这个问题问有什么命令吗?我的想法正确吗?我该如何解决?
是的,你的推理是正确的——数组反向排序时获得最大反转次数。您可以通过归纳法正式证明它(如果您确实愿意)。
对于包含两个元素的数组,例如{1, 2},请选中这两个选项。
对于具有n 个元素的数组,反转次数可以分为归因于最小元素的反转次数和归因于其余元素的反转次数。根据归纳假设,当数组(也许除了最后一个元素)按相反顺序排序时,可以获得其余元素的反转。当最小元素位于最后时,其反转次数最多。