数据结构及算法
来源:互联网 发布:明星页游 知乎 编辑:程序博客网 时间:2024/06/05 16:16
最近在填上学时留下的坑,工作以后就疲于应付各种业务代码,越来越觉得,要想真正的提高自己,一定要有扎实的基础,所以抓起了数据结构及算法。
接触算法,想必一定会接触约瑟夫问题:
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
详细介绍请参考 百度百科
Josephus是如何逃过这个死亡游戏的呢?网上有很多java、C、C++版本,我结合最近学习的单循环链接,写了一个javascript版本
// 链表节点class Node { constructor(element) { this.element = element this.next = null }}class LoopLinkedList { constructor(){ this.head = null this.length = 0 } append(element){ const node = new Node(element) let current = null if (this.length == 0) { this.head = node node.next = this.head } else { let index = 1 current = this.head while(index < this.length){ current = current.next index++ } current.next = node node.next = this.head } this.length++ } killPeople(setpCount,survivalCount) { /* setpCount : 跨过的人数 survivalCount : 最终留下的人数 */ let current = this.head //初始化 let totalCount = this.length //总人数 let counter = 1 //计数器 let killedIds = "" //被杀死的id while(totalCount > survivalCount) { if (counter == 3) { if (current.element.killed) { current = current.next } else { current.element.killed = true killedIds += " " + current.element.id current = current.next totalCount-- counter=1 } } else { if (!current.element.killed) { counter++ } current = current.next } } console.log(killedIds + " were been killed") } whoSurvived(){ console.log("--------------------whoSurvived------------------------") let current = this.head let index = 1 while(index <= this.length){ if (!current.element.killed) { console.log(current.element.id + " sruvived") } current = current.next index++ } } // 转为字符串 toString() { let current = this.head let string = '' let index = this.length while (index--) { string += ` ${current.element.id}` current = current.next } return string }}const CL = new LoopLinkedList()for (var i = 1; i <= 41; i++) { CL.append({id:i,killed:false})}CL.killPeople(2,2)CL.whoSurvived()
运行结果如下:
3 6 9 12 15 18 21 24 27 30 33 36 39 1 5 10 14 19 23 28 32 37 41 7 13 20 26 34 40 8 17 29 38 11 25 2 22 4 35 were been killed--------------------whoSurvived------------------------16 sruvived31 sruvived
查看在线demo
阅读全文
0 0
- 数据结构及算法-何谓数据结构
- 数据结构及算法综述
- 数据结构及算法
- 数据结构及算法
- 算法及数据结构(下)
- 数据结构及算法序言
- 常用数据结构及算法
- 数据结构及算法
- 数据结构及算法-算法是什么?
- java数据结构及算法一
- java数据结构及算法二
- java数据结构及算法三
- java数据结构及算法四
- 高级数据结构及算法分类
- 数据结构及算法面试题
- (考研)数据结构及算法
- 算法思想及数据结构 -- 总结
- 常用查找数据结构及算法
- ECharts 坐标轴颜色改变、位置改变、去网格
- 学习随笔(1)之图像的像素理解
- UML类图几种关系的总结
- 头像上传前本地预览功能的实现(兼容ie8)
- Azure Visual Studio 2017 虚拟机镜像正式上线
- 数据结构及算法
- matlab查看源代码
- 文本框只能输入数字、字母,屏蔽粘贴
- 论文笔记:Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering
- mysql 配置查询缓存
- mui-class说明(持续更新中~~)
- 详细告诉你“注册/登录”产品设计路上要闪避的坑
- 模拟器adb连不上的问题
- Android 内存泄漏 LeakCanary 来检查