转:http://blog.csdn.net/fisher_jiang/article/details/2442486
5 个数最快的排序, H.B.Demuth 于 1956 年在他的博士论文中提出了以下方法:
开始时,就像用合并对4个元素排序一样,首先比较a:b,接着 c:d,然后把每对的较大者拿来比较,这就产生了a<b<d和 c<d, 进行 3 次比较, 可以找到如下有序关系 (以下图中所有连线均表示左下元素比右上元素小)
b--d
/ /
a c e
这时,我们把第5个元素e,插入到{a,b,d}当中的适当位置,只需比较两次,首先同b进行比较,而后同a或d进行比较,就有如图所示的四种情况
b-d e-b-d b-e-d b-d-e
/ / / / / / / /
e-a c a c a c a c
对以上任意一种情况, 总可以通过两次比较将 c 调整入由 abde 构成的有序队中 (用二分的思想)
这样处理后总共需要比较 3 + 2 + 2 = 7 次, 能选出答案 7 并且解答过程无误的可以给双倍的分
资料来源: [Ph.D.thesis, Standford University(1956), 41~43]
同时在 D.E.Knuth 的著作 <计算机程序设计艺术> (The Art of Computer Progamming) 第三卷(排序和查找) 173 页至 174 页对这个问题有一个详细的解释.
相关推荐
在这个特定的问题中,我们面对的是一个基于拉米规则的数学挑战:在一张包含3副牌(共169张,其中1张为百搭牌)的桌子上,我们需要找出完成游戏所需的最少抽奖次数。 首先,理解游戏规则是关键。在拉米游戏中,玩家...
- 根据烙饼的次数和锅的容量,计算所需最少时间。 2. 图形中三角形数量计算 - 计算图形中三角形的个数,可能涉及到图形分解和组合计数。 3. 房子搭建问题 - 根据给定的规律,计算搭特定数量房子所需的小棒数。 ...
最终dp[M]即为所需最少硬币数。如果dp[M]仍然为无穷大,则表示无法凑成金额M。 #### 二、Feli 的生日礼物问题 **问题描述:** 该问题是关于计算n!的末位非零数字。具体来说,用户需要计算一个非常大的数n(n≤10^...
解决思路:使用动态规划算法,建立一个数组 dp,dp[i] 表示跳到第 i 个数所需的最少跳跃次数,然后逐步填充 dp 数组,最后输出 dp[n-1]。 题目 4:字符串处理 知识点: * 字符串处理 * 栈算法 题目描述:让我们...
使用动态规划方法,我们可以找到翻转硬币所需的最少次数。由于每次可以翻转n个硬币,我们可以通过枚举n的值来找到最小的次数。题目中提到用了7次,但具体的n的和取决于硬币的数量和排列。 10. 这个问题可以通过中国...
最后返回 `count` 即为所需的最小操作次数。 具体代码如下: ```cpp class Solution { public: int minMoves(vector<int>& nums) { // 找规律 // 从小到大排序,依次计算到最小值距离并相加 int count = 0; ...
游戏的目标是找到达到目标状态所需的最少步骤数。 解决六数谜的方法可以借鉴八数码问题的解决策略,比如深度优先搜索(DFS)和广度优先搜索(BFS)。深度优先搜索是一种递归的策略,它尽可能深地探索树的分支,直到...
- 最少通话时间问题:通过计算每次通话所需时间,可以找出通知所有学生所需的最短时间。 6. **几何体**: - 正方体的组合:了解小正方体如何拼成大正方体,以及大正方体的棱长和体积计算。 7. **统计与数据分析...
9. 排列组合与概率:找出有缺陷的糖果袋,使用天平进行最少次数的检测,体现逻辑推理能力。 10. 整除与倍数关系:找到最小的增量使得数成为2、3或5的倍数。 11. 判断题:涉及乘法的性质,分数单位的理解,3的倍数...
最小堆能够保证每次取出的两个序列都是当前所有序列中最短的两个,这样合并它们所需的比较次数会是最少的。在合并过程中,将两个最短序列的长度相加并减去1(因为它们是有序的,不需要对所有元素进行比较),然后将...
23. **数轴上的点移动**:第二十三题是关于数轴上点的移动,涉及到了正负数的加减运算,以及寻找达到一定距离所需的最少次数。 试卷的整体难度适中,主要考察了七年级学生对基本数学概念的理解和应用,包括数的性质...
给定一个表示学生高度的数组`heights`,我们需要计算将数组元素重新排列成非递减顺序所需的最小移动次数。在示例中,输入的`heights`数组是[1,1,4,2,1,3],理想的目标数组应该是[1,1,1,2,3,4]。在比较过程中,我们...
12. **选择题**:涉及平均数、字母表达式的意义、容量单位、因数个数、分数的计算。 13. **计算题**:包括直接写出结果、混合运算、解方程。 14. **作图题**:要求将图形绕点旋转90度,考察空间想象能力和图形变换...
- 题目3的轮船问题,需要用到速度与时间的关系来求解回程所需时间。 7. 数据分析与概率: - 题目4是关于集合交集的问题,需要了解集合论的基础知识,找出爱好音乐和体育的学生最少和最多可能是多少人。 8. 问题...
- **状态定义**:设`dp[i][j]`表示考虑了前i个环,当前总和为j的情况下所需的最小旋转次数。 - **转移方程**:对于每个环i,假设环上的数字分别为`nums[i][0], nums[i][1], ..., nums[i][K-1]`,则对于环i的所有可能...
16. 具体的数学问题解决:根据特定的数学问题(例如图中的路线图问题),计算出最少所需的时间或距离。 题目中还涉及到了数字的性质、统计和概率问题、图形的计算问题等。解答这些题目不仅需要数学知识,还需要逻辑...
5. **步数计数**:记录从起始状态到当前状态所需的最小步数。 在C++程序中,可能会遇到的问题包括但不限于: - 队列溢出:如果所有可能的状态都被放入队列,可能导致内存不足。为了避免这种情况,可以设置一个合理...
编程任务是,给定初始状态和目标状态的金币阵列,计算从初始状态到目标状态所需的最少变换次数。输入数据存储在名为 "input.txt" 的文件中,包含多组测试用例,每组用例包含行数 m、列数 n,以及两个 m 行 n 列的...
程序需要处理多组测试数据,每组数据包含一定数量的堆栈和每个堆栈中包含的方块数,最终输出实现“美丽”排列所需的最少移动次数。 题目中提到的关键知识点包括: 1. 素数的定义:素数是指在大于1的自然数中,除了...