algorithm - 证明存在 10 次交换的 O(n) 算法
问题描述
一个著名的问题是找到对数组进行排序的最小交换量。我的问题是我们有大小为 n 的数组,我们知道我们可以用 10 次交换对它进行排序(我们不知道移动,只知道移动的数量)。我想证明存在对这个数组进行排序的 O(n) 算法(时间)。
首先,为了证明这个陈述,我应该提供一些代码吗?我不知道如何证明它其次,这与排序数组的最小交换量有关吗?
谢谢你的帮助
解决方案
您的解决方案是自适应排序算法。
自适应排序算法的一个经典例子是直接插入排序。在这个排序算法中,我们从左到右扫描输入,反复寻找当前项目的位置,并将其插入到先前排序的项目数组中。
我们知道:
该算法的性能可以用输入中的反转次数来描述,然后
T(n)
将大致等于I(A)+(n-1)
,其中I(A)
是反转次数。
因此,与您的情况一样,反转次数是恒定的,该算法的复杂度将为Theta(n)
.
推荐阅读
- javascript - Jasmine 测试随机失败
- algorithm - 最近的点对算法总是准确的吗?
- redux-observable - Ideomatic store subscription in redux-observable
- javascript - 我如何使用连接 JavaScript
- javascript - 还有比这更好的在 Vue 中动态添加类的方法吗?
- react-redux - 如何将 NextJs 项目上传/部署到免费托管 cpanel?
- android - 如何在不缩放可绘制对象的情况下增加自定义视图扩展按钮的填充?
- c++ - const ref 传递的模板化参数是否优化为在足够小的时候按值传递?
- javascript - PostgreSQL 通过调用 CURRENT_DATE 获得昨天
- ruby-on-rails - 页面上的 Facebook api 发布提要