趣题一则:交替放置的碟子

简介:

有数量为2n的一排碟子,n黑n白交替放置。现在要把黑碟子都放在右边,白碟子都放在左边,但只允许通过交换相邻碟子的位置来实现。实现这个过程要交换多少次?

分析

首先把问题转化一下,用1表示黑碟子,0表示白碟子,那么目前的顺序是:

1010...1010

结果要求1都放在右边,0都放在左边。这个题目看起来很眼熟。看关键字:交换相邻的碟子排好顺序。嗯,就是经常出现在面试中的冒泡排序了。

为便于观察,假设目前有6个碟子:101010。使用冒泡排序,第一次迭代,碟子序列变为:010101,交换3次。在进行第二次迭代之前,观察一下。

现在,不仅第一个碟子就位,最后一个也是了,因此第二次迭代只需要对第2到第5个进行排序,巧合的是,碟子[2->5]仍然是10交替出现,不过比上一次少了两个,这样就简单了,可以得到结论:对于2n个碟子,可以使用n次迭代完成,交换的次数分别是:n+(n-1)+...+2+1,即n(n+1)/2。

顺便说一句,对于常见的经典排序算法,要么是简单直观的,如选择排序、插入排序,其实就是平时摸牌时所用的方法;要么是效率较高的,如快速排序、归并排序。我觉得冒泡排序既不直观,也不高效,也许就因为得了一个好名字,就名扬算法界了,所以名字神马的很重要!

 

参考

《算法设计与分析基础》


本文转自一个程序员的自省博客园博客,原文链接:http://www.cnblogs.com/anderslly/archive/2012/04/16/swaping-disks.html,如需转载请自行联系原作者

目录
相关文章
端口扫描 -- scanport和superscan
端口扫描 -- scanport和superscan
2511 0
端口扫描 -- scanport和superscan
|
JavaScript 开发工具 C++
探索 Visual Studio Code:开发者的多功能编辑器
Visual Studio Code(VS Code)是由微软开发的一款免费、开源的轻量级代码编辑器,支持 Windows、Linux 和 macOS。它内置了对多种编程语言的支持,并提供了代码高亮、智能补全、调试和 Git 集成等功能。VS Code 的强大之处还在于其丰富的插件生态系统,通过安装插件可以进一步扩展功能。此外,用户还可以通过定制设置来自定义编辑器的行为和外观,从而提升开发效率。本文将详细介绍 VS Code 的核心特性、推荐插件及定制化设置方法。
|
8月前
|
存储 Android开发
一键新机安卓无限, 免root改手机机型, 手机信息修改型号伪装
AndroidManifest.xml配置 资源文件管理 各系统服务的Hook
|
前端开发 图形学
unity UGUI跟随3D物体的坐标转换
在 Unity 中实现 UGUI 元素跟随 3D 物体,关键是将 3D 物体的世界坐标转换为屏幕或画布坐标。通过 Camera.WorldToScreenPoint 方法,可将 3D 物体位置映射到屏幕上,再更新 UGUI 元素的位置。代码示例展示了如何使用该方法,使 UGUI 图像跟随 3D 模型,并提供文字显示、图像和线条的显示/隐藏功能。
|
Ubuntu Linux 开发者
|
缓存 数据库 数据安全/隐私保护
Discuz! X 数据库字典详解:DZ各数据表作用及字段含义
我们使用DISCUZ做网站时,有时需要对数据表进行操作,在操作数据表之前,需要对数据表进行了解。下面是DISCUZ 数据库各数据表作用及字段含义详解,方便新手更好的了解DISCUZ数据库。
350 4
|
传感器
Modbus协议深入解析
Modbus协议是由Modicon公司(现施耐德电气)于1979年发明的串行通信协议,主要用于工业自动化系统中的PLC通信。本文深入解析了Modbus协议的主从模式、数据类型(线圈、离散输入、保持寄存器、输入寄存器)、帧结构和通信过程,并介绍了其应用场景和重要性。
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
596 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
|
运维 物联网 5G
5G网络的多接入技术融合:构建无缝通信未来
5G网络的多接入技术融合:构建无缝通信未来
546 4
|
网络架构
详解CAN总线:CAN协议分层结构及功能
CAN协议涵盖了 ISO 规定的 OSI 基本参照模型中的传输层、数据链路层及物理层如下表 所示
详解CAN总线:CAN协议分层结构及功能

热门文章

最新文章