奇葩算法系列——猴子排序

首先我们介绍无限猴子定理

无限猴子定理最早是由埃米尔·博雷尔在1909年出版的一本谈概率的书籍中提到的,此书中介绍了“打字的猴子”的概念。无限猴子定理是概率论中的柯尔莫哥洛夫的零一律的其中一个命题的例子。大概意思是,如果让一只猴子在打字机上随机地进行按键,如果一直不停的这样按下去,只要时间达到无穷时,这只猴子就几乎必然可以打出任何给定的文字,甚至是莎士比亚的全套著作也可以打出来。

根据猴子定理,如果我们不断用随机的数字组成一个数列,那么在无限长的时间里,这个数列在某次肯定会变成有序。

关于猴子定理的实现,网上也有很多实例,但是大部分都是和上述一样,生成随机数字的数列,然后验证是否有序,我觉得这样实际上并不一种排序,我理解的排序就是对现有的数列进行排序,因此实现时做了一定的改造

  1. 给出一个固定的乱序数列
  2. 随机从这个乱序数列中取出数字放在第一位,然后重复取数字放在第二位,第三位....
  3. 验证新的数列是否有序

这样做能更好的切合排序的概念

private static int [] array = new int[10];
private static int [] result = new int[10];

array用于存储固定的乱序数列,result用于存储每次生成的新数列

private static boolean checkOrder (int array[]){for (int i = 1; i < 10; i++){if (array[i] <= array[i-1]){return false;}}return true;}

chekorder检查数组是否有序

private static void sort(int num, Random random){Set<Integer> numberSet = new HashSet<Integer>();System.out.println("第" + num + "次");for (int i = 0; i < 10; i++){int index = random.nextInt(10);while (numberSet.contains(index)){index = random.nextInt(10);}numberSet.add(index);int number = array[index];result[i] = number;System.out.print(" " + result[i]);}System.out.println();}

sort是随机取数进行排序,这里为了能每次都取出不同数字,用Set做了已经使用过的验证,这样主要是为了能更快的得到结果

最后运行程序

可以看到猴子排序在这次排序共生成41781次数列,耗时2S就生成了一组有序的数列,这样看是不是猴子排序比睡眠排序的效率要高很多。

 

全部代码:

public class MonkeySort {private static int [] array = new int[10];private static int [] result = new int[10];static{generate();}/*** 检查数组是否有序* @return*/private static boolean checkOrder (int array[]){for (int i = 1; i < 10; i++){if (array[i] <= array[i-1]){return false;}}return true;}private static void sort(int num, Random random){Set<Integer> numberSet = new HashSet<Integer>();System.out.println("第" + num + "次");for (int i = 0; i < 10; i++){int index = random.nextInt(10);while (numberSet.contains(index)){index = random.nextInt(10);}numberSet.add(index);int number = array[index];result[i] = number;System.out.print(" " + result[i]);}System.out.println();}private static void generate(){array[0]=8;array[1]=5;array[2]=3;array[3]=6;array[4]=4;array[5]=9;array[6]=7;array[7]=10;array[8]=1;array[9]=2;}public static void main(String[] args){Random random = new Random();int num = 0;long startTime = System.currentTimeMillis();while(true){sort(num++,random);boolean isOrder = checkOrder(result);if (isOrder){break;}}long endTime = System.currentTimeMillis();System.out.println("排序完成,耗时:" + (endTime-startTime)/1000 + " S");}}

微信公众号:二虎程序

源码地址:https://github.com/TigerTurbo/jvm_lecture/blob/master/src/main/java/com/yshuoo/jvm/classloader/MonkeySort.java

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/44556.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven项目中遇到的奇葩问题

场景描述 开发项目搞环境是一个非常蛋疼的问题&#xff0c;总是会遇到各种奇葩的问题&#xff0c;今天就遇到了一个跟Maven有关的。新开发一个项目&#xff0c;从SVN下载下来项目之后&#xff0c;pom.xml中Spring相关的Jar包就一直报如下红叉 后来发现我的maven 中是已经有…

你所遇到过得奇葩的需求

在网上看到大家在谈论碰到过的奇葩需求&#xff0c;看着看着一天的劳累都被欢乐冲散了&#xff0c;特地搜集大家的留言&#xff0c;整理出来&#xff0c;给大家分享一下&#xff0c;希望也能给你的生活添加点乐子&#xff0c;哈哈哈。 0、部门老大&#xff1a;你&#xff0c;做…

PVE7更新AQC107网卡驱动,解决奇葩问题。

背景介绍 前段时间自己组装了一台生产力&#xff0c;期间在TB买了张AQC107的万兆电口网卡&#xff0c;回来后发现在PVE7环境下每次重启或启动后网卡总是没反应或者不会自动协商到10G&#xff0c;拔下来插到win主机上没问题&#xff0c;基本确定是驱动的问题&#xff0c;那么就着…

html文档中引入axios遇到的奇葩问题

html文档中引入axios遇到的奇葩问题 在body中引入代码&#xff1a; <script src"https://unpkg.com/axios/dist/axios.min.js"></script>然后插入一个按钮&#xff1a; <input type"button" value"get请求" class"get&qu…

奇葩问题☞ npm install 报错 gyp ERR

gyp ERR! node -v v16.13.1 gyp ERR! node-gyp -v v3.8.0 gyp ERR! not ok 直接看图吧&#xff0c;咱也是第一次遇见这种错误&#xff0c;怎么办&#xff01;&#xff01;&#xff01; 于是百度了好久&#xff0c;尝试了好几种方法&#xff0c;但都不行。 比如&#xff1a;第一…

奇葩问题 npm install 报错 gyp ERR

gyp ERR! node -v v16.13.1 gyp ERR! node-gyp -v v3.8.0 gyp ERR! not ok 直接看图吧&#xff0c;咱也是第一次遇见这种错误&#xff0c;怎么办&#xff01;&#xff01;&#xff01; 于是百度了好久&#xff0c;尝试了好几种方法&#xff0c;但都不行。 比如&#xff1a;第一…

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day18】—— 奇葩问题合集

大家好&#xff0c;我是陈哈哈&#xff0c;北漂五年。认识我的朋友们知道&#xff0c;我是非科班出身&#xff0c;半路出家&#xff0c;大学也很差&#xff01;这种背景来北漂&#xff0c;你都不知道你会经历什么&#x1f643;&#x1f643;。   连续17天的技术文想必也是快吐…

聊聊机器如何“写“好广告文案?

作者 | 张超 “除非你的广告建立在伟大的创意之上&#xff0c;否则它就像夜航的船&#xff0c;不为人所注意。” —— 大卫奥格威&#xff0c;现代广告业奠基人 01 引子 创意作为一种信息载体&#xff0c;将广告主的营销内容呈现给用户&#xff0c;辅助用户消费决策&#xf…

讨论 | 新浪程序员因加班不在现场错失年会头奖,公司应该给吗?

又到了一年一度晒年终奖&#xff0c;拉仇恨的时候了&#xff0c;作为互联网公司&#xff0c;年会已成为每年的例行是项目。就在昨天刚刚结束的新浪年会上&#xff0c;有位程序员因为在公司上线合并代码&#xff0c;没有到现场&#xff0c;错失了拿头奖的机会。头奖2000股新浪股…

码农犯错导致多人赢取头奖,麦当劳叔叔一笑谅解

IT后台一个技术故障使四个人脱贫&#xff1a;在名为Monopoly的麦当劳大富翁游戏的抽奖活动中&#xff0c;本来设置了两名各10万欧元的头奖。 但开奖四小时后&#xff0c;竟有四个人一起获得头奖。 在11月中旬开始的“麦当劳大富翁”游戏抽奖中&#xff0c;顾客首次通过麦当劳的…

厉害了!数据科学杯:10000名数据科学家参加,清华博士斩获头奖 | GTC 2017

雷锋网【AI科技评论】按&#xff1a;在刚刚过去的2017数据科学杯&#xff08;2017 Data Science Bowl&#xff09;吸引了全球10000名数据科学家参赛&#xff0c;大家在癌症检测算法上各显神通。其中来自清华的两位科学家组成的团队捧得一等奖。此外所有的获奖团队将会在即将到来…

Hash算法总结

1. Hash是什么&#xff0c;它的作用 先举个例子。我们每个活在世上的人&#xff0c;为了能够参与各种社会活动&#xff0c;都需要一个用于识别自己的标志。也许你觉得名字或是身份证就足以代表你这个人&#xff0c;但是这种代表性非常脆弱&#xff0c;因为重名的人很多&#x…

Randao 可证公平随机数(VRF)白皮书

Randao 可证公平随机数白皮书 randao.org September 11, 2017 Abstract Randao 基于区块链技术&#xff0c;提供开源的、去中心化的、社交化的、可证公平的随机数生成服务。Randao 继承了常用随机数发生器的不可控制性及不可预测性&#xff0c;同时具备其所不具有的可参与性及可…

区块链之零知识证明(zk-SNARK从小白到明白)

零知识证明&#xff1a;从小白到明白 如今&#xff0c;知识快餐业发达&#xff0c;区块链这么火的领域自然不会落下。经过一轮轮扫盲&#xff0c;共识、工作量证明、闪电网络等等概念对普罗大众已不再陌生&#xff0c;甚至各种解构、比喻、引申&#xff0c;将术语炒得比本义还…

谈一谈今年的移动互联网寒冬

转载请注明出处&#xff1a;http://blog.csdn.net/guolin_blog/article/details/52316072 本文同步发表于我的微信公众号&#xff0c;扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注&#xff0c;每天都有文章更新。 大家好&#xff0c;好像有段时间没写技术文章了。主要是最…

区块链:7 个步骤入门区块链

2017 年是比特币大爆发的一年。在潜水这么多年之后&#xff0c;比特币的价格一下子从 1000 美元左右飞涨至将近 20000 美元。多少人摇身一变&#xff0c;成了“密码学货币交易专家”。 赶上好时候确实可以狠赚一笔&#xff0c;不过醒醒吧&#xff0c;盛宴已散。 -2013 年 10 月…

如何用 Java 实现简单的区块链

点击上方蓝色“程序猿DD”&#xff0c;选择“设为星标” 回复“资源”获取独家整理的学习资料&#xff01; 来源 | 公众号「锅外的大佬」 1. 概述 本文中&#xff0c;我们将学习区块链技术的基本概念。也将根据概念使用 Java 来实现一个基本的应用程序。 进一步&#xff0c;我…

国字号遥感算法大赛!涵盖主流视觉任务,头奖10万人民币!

点击我爱计算机视觉标星&#xff0c;更快获取CVML新技术 大赛背景 本届遥感图像稀疏表征与智能分析竞赛由国家自然科学基金委信息科学部、“空间信息网络基础理论与关键技术”重大研究计划指导专家组主办&#xff0c;旨在推动“空间信息网络基础理论与关键技术”重大研究计划科…

js 模拟超级大LE透中头奖 统计中头奖需要购买的彩票次数以及购买总金额

<!DOCTYPE html> <html> <head><title>超级大LE透模拟</title> </head><div id"container">超级大LE透<br>规则&#xff1a;超级大LE透基本投注是指从前区号码中任选5个号码&#xff0c;并从后区号码中任选2个号码的…

挖挖双色球——数据挖掘技术 分享

最近双色球比较热闹&#xff0c;因为河南1彩民独中双色球3.6亿巨奖&#xff01; 《媒体报道&#xff1a;2009年10月8日&#xff0c;国庆长假结束前的最后一天&#xff0c;在这个注定要被写进中国彩票史的日子&#xff0c;河南省安阳市成为了全国瞩目的焦点。当期中国福利彩票“…