对数组进行排序的“插入”的最小数量

Lai Yu-Hsuan

假设有一个无序列表。我们唯一可以做的操作是移动一个元素并将其插入到任何位置。对整个列表进行排序需要多少步?

我想答案是size of the list - size of longest ordered sequence,但是我不知道如何证明这一点。

伯恩哈德·巴克(Bernhard Barker)

首先要注意的是,移动元素不会改变元素的相对顺序,除了要移动的元素之外。

考虑最长非递减子(有密切关系最长递增子-找到它们是类似的方式)。

通过只移动不在此序列中的元素,很容易看到我们最终得到了一个排序列表,因为此序列中的所有元素都已经相对于彼此进行了排序。

如果我们不移动此序列中的任何元素,则保证此子序列中两个元素之间的任何其他元素大于或大于或小于较小的元素(如果不正确,则它本身将位于最长的序列),因此需要移动它。
(例如,参见下文)

是否需要不减少?是的。考虑此序列中的两个连续元素是否正在减少。在这种情况下,不移动这两个元素就不可能对列表进行排序。

为了最大程度地减少所需的移动次数,如上所述,选择尽可能长的序列就足够了。

因此,所需的移动总数为列表的大小减去最长的非递减子序列的大小。

一个示例,说明不在上述非递减子序列中的元素的值:

考虑最长的非递减子序列1 x x 2 x x 2 x 4x的是某些元素,不属于序列的一部分)。

现在考虑x介于2之间的可能值4

如果是2、3或4,则最长的子序列将包含该元素。如果大于4或小于2,则需要移动它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找交换的最小数量以对数组进行排序

来自分类Dev

使用插入排序对数组进行排序

来自分类Dev

基于最小值的索引对数组进行排序?

来自分类Dev

javascript根据最小-最大位置对数组进行排序

来自分类Dev

列对数组进行排序?

来自分类Dev

如何对数组进行排序

来自分类Dev

以升序对数组进行排序

来自分类Dev

无法对数组进行排序

来自分类Dev

如何找到最小数量的开关以升序对给定排列(例如1-10)进行排序

来自分类Dev

使用插入排序仅对数组的一部分进行排序

来自分类Dev

对数组进行排序并检索排序的索引

来自分类Dev

JSONata 对数组进行排序/排序

来自分类Dev

在对象数组中插入新元素并对数组进行排序

来自分类Dev

Perl:如何按外观数量对数组中的项进行排序和转换

来自分类Dev

如何按可创建的唯一组数量对数组进行排序

来自分类Dev

如何用名称,日期和数量对数组进行排序?的PHP

来自分类Dev

按匹配数量对数组进行排序,然后将最适合的放在 php 中

来自分类Dev

如何找到在JavaScript中按降序对数字数组进行排序所需的最小交换次数

来自分类Dev

用最小和最大值交替对数组进行排序

来自分类Dev

如何以最小的相邻元素交换对数组进行排序

来自分类Dev

在Python中对数组数组进行排序

来自分类Dev

用相应的数组对数组进行排序

来自分类Dev

按数组元素对数组进行排序

来自分类Dev

插入排序算法,使用小数组

来自分类Dev

PHP按名称对数组进行排序

来自分类Dev

JavaScript与PHP对数组进行排序

来自分类Dev

用最少的移动对数组进行排序

来自分类Dev

Swift:使用NSRange对数组进行排序

来自分类Dev

laravel按日期对数组进行排序

Related 相关文章

热门标签

归档