JAVA的Collections类中shuffle的用法
来源:互联网 发布:一本好书 知乎 编辑:程序博客网 时间:2024/06/05 03:59
输出结果:
打乱前:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
第0次打乱:
[6, 3, 2, 0, 8, 1, 7, 5, 4, 9]
第1次打乱:
[6, 2, 3, 0, 8, 5, 7, 4, 9, 1]
第2次打乱:
[1, 7, 9, 4, 6, 0, 2, 5, 3, 8]
第3次打乱:
[0, 4, 2, 8, 9, 1, 3, 7, 5, 6]
第4次打乱:
[8, 1, 3, 0, 7, 9, 4, 2, 5, 6]
在研究用遗传算法等启发式算法解决旅行商问题(Traveling Salesman Problem,TSP)时,首先要解决的问题时如何生成一个初始解,即一个代表顾客位置的编码序列,如有5个顾客,如何生成1,2,3,4,5的乱序序列,一般情况下是这样生成的:
方法一:
如上述代码所示,给定一个参数len,上述方法可以返回一个返回从1到len的一个len大小的乱序数组,很显然,上述方式生成一个乱序数组的方式是非常低效的。其实我们可以先生成一个顺序数组再想办法将其顺序打乱,代码如下:方法二:
用上述方式比第一种方式减少了许多运算量,但是整个数组的乱序效果却不是很好,有没有一种效果很好的同时运算量又非常小的乱序方式呢。不用同时生成两个randomIndex,生成一个就行,然后从头到尾与randomIndex进行交换即可,代码如下:方法二的改进版:
方法二的改进版的实现方式为从头到尾将每个元素与随机生成的下标所对应的元素进行交换以达到相应的乱序效果。
方法三:
其实Java.util.Collections
里面提供了一个shuffle的接口,它可以很方便地将一个有序数组进行乱序处理。
从eclipse查看shuffle接口的实现源码:
从上述代码可以知道,shuffle的参数为一个List列表和一个Random对象,当List比较大时,选择首先将list通过list.toArray()转换成数组,然后按方法二的改进形式交换数组中元素的值,最后将list中的值依次替换为数组中的值,返回list对象。其实,方法二的改进方法和方法三种shuffle的在JAVA中的实现方式是类似的,很简单不是吗?而这种思路就来自 Ronald Fisher 和 Frank Yates首先提出的Fisher–Yates shuffle洗牌算法,但该算法的适合计算机运算的版本是由Richard Durstenfeld和Donald E. Knuth发扬光大的,Durstenfeld将该算法的时间复杂度由Fisher–Yates 提出算法的O(n*n)降低到O(n),其算法的伪码如下:该算法的另外一个版本为从最小的index开始至最高的index的过程:
阅读全文
1 0
- java-Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法 (将列表值打乱顺序)
- JAVA:Collections类的shuffle()方法
- JAVA:Collections类的shuffle()方法
- java 中 Collections 的用法
- java中容易忽略的shuffle用法
- java中容易忽略的shuffle用法
- java Collections 的用法
- java中Collections.sort的用法
- Collections.shuffle()方法的使用
- java.util.Collections 类的常见用法
- Java 集合,Collections工具类的用法
- react-native 史上最搓的登陆注册
- 【ZZULIOJ 2179:】 紧急营救 【spfa +枚举】
- 数据结构实验之排序六:希尔排序
- node异步流程控制
- Node.js 安装
- JAVA的Collections类中shuffle的用法
- 加快IDEA中MAVEN的pom文件下载资源的速度
- 树状数组(二维)
- HDOJ 2416 Treasure of the Chimp Island (BFS)
- Linux 学习 Heartbeat
- xshell使用说明
- 待补题目记录
- Machine Learning学习资源
- 【codeforces 295B】Greg and Graph ( floyd )