随机列表洗牌器 - 免费在线列表随机化工具
随机列表洗牌器采用Fisher-Yates洗牌算法,为姓名、学生、团队或任务等任意列表进行随机排序,该算法从数学上保证每一种可能的排列顺序出现的概率完全相等,不存在系统性偏差。工具适合教师课堂抽签点名、比赛分组、活动抽奖以及其他需要公平决策的场合免费使用,无需注册账号。
随机列表洗牌器
输入要打乱的项目,每行一项。空行将自动删除。
文档
什么是随机列表打乱工具?
随机列表打乱工具是一种将项目列表重新排列成随机顺序的工具。每行输入姓名、任务或其他内容,工具会重新排列这些项目,使每一种可能的顺序出现的机会都相同。该工具使用费舍尔–耶茨洗牌算法,这是一种用于生成无偏随机顺序的知名算法。
如何使用随机列表打乱工具
- 将列表输入或粘贴到文本框中,每行一个项目。
- 点击“随机排列列表”。项目会立即重新排列。
- 查看按钮下方的打乱列表,项目已按新的顺序编号。
- 再次点击“随机排列列表”,进行一次新的独立洗牌。
- 点击“复制结果”复制新的顺序,或点击“清除”重新开始。
输入内容中的空行会自动移除,因此多余的换行不会在结果中生成空项目。
费舍尔–耶茨洗牌算法如何工作?
费舍尔–耶茨洗牌会遍历列表一次,从最后一个项目开始,逐步向前处理。每一步都会从列表中尚未放置的部分随机选取一个项目,并将其交换到当前位置。
费舍尔–耶茨洗牌公式
对于包含 n 个项目的列表,位置编号从 0 到 n − 1:
1for i from n − 1 down to 1:
2 choose a random whole number j, where 0 ≤ j ≤ i
3 swap the items at positions i and j
4循环运行 n − 1 次,因此整个洗牌大约需要 n 步。这称为线性时间,记作 O(n)。由于该算法恰好考虑每个位置一次,并且每次都从不断缩小且定义明确的项目集合中抽取,因此 n!(n 的阶乘,即 n × (n − 1) × ... × 1)种可能的排列顺序,每一种成为结果的机会都相同。
示例:打乱包含四个项目的列表
从位置 0 到 3 上的四个项目开始:苹果、香蕉、樱桃、枣。
- i = 3:随机选取的 j = 0。交换位置 3 和 0 → 枣、香蕉、樱桃、苹果
- i = 2:随机选取的 j = 2。将一个位置与自身交换不会改变任何内容 → 枣、香蕉、樱桃、苹果
- i = 1:随机选取的 j = 0。交换位置 1 和 0 → 香蕉、枣、樱桃、苹果
最终顺序:香蕉、枣、樱桃、苹果。
四个项目共有 4! = 24 种可能的顺序。在每次洗牌中,每一种顺序(包括这一种)出现的机会都是 1/24。
为什么不直接交换随机选出的项目对?
一种看似更简单的方法是选取两个随机位置并交换它们,重复几次。这种方法看起来很随机,但实际上并不是。1950年代早期的一些洗牌程序就是这样运行的,它们会悄悄地让某些顺序比其他顺序更容易出现,尽管单次运行看起来并无可疑之处。费舍尔–耶茨洗牌避免了这一问题,因为每个项目都恰好移动一次,移动到的位置来自一个精确缩小的选项集合,这正是使每个最终顺序出现机会相同的原因。
费舍尔–耶茨洗牌源自何处?
统计学家罗纳德·费舍尔和弗兰克·耶茨在1938年于一本统计表书籍中描述了这种方法,用于设计实验时手动洗牌。1964年,理查德·杜斯滕菲尔德将其改编用于计算机,使列表能够原地重新排序,而不需要第二个列表来记录剩余项目。唐纳德·克努特在其1969年出版的《计算机程序设计艺术》中收录了这个计算机版本,因此它有时也被称为克努特洗牌。如今,网页浏览器使用的仍是同一种算法。
列表打乱工具的常见用途
- 确定学生在课堂上进行展示或回答问题的顺序
- 为比赛设置对阵表,或确定游戏中的轮流顺序
- 将一组人随机分成若干队伍
- 从候选名单中选择餐厅、电影或任务,而不偏向任何一个选项
普通洗牌并不总是合适。如果某些项目需要比其他项目更频繁地出现,加权选择更适合。如果每个类别都需要得到保证的代表,分层抽样比进行一次简单的随机洗牌更合适。
常见问题
这种洗牌真的随机吗?
它依赖网页浏览器的伪随机数生成器(PRNG),这是一种生成数字序列的公式,在实际使用中表现得类似随机数。对于课堂上的排序、比赛抽签或选择电影来说,这已经足够。但它并非为密码学、赌博系统,或任何不可预测性关系到资金或安全的场景而设计;这些场景需要经过认证的随机数生成器。
工具会将我的列表发送到服务器吗?
洗牌本身完全在浏览器中使用 JavaScript 运行,因此重新排列列表不需要网络请求。当前列表也会写入网页地址,因此重新加载页面或添加书签不会丢失列表。如果复制、分享或重新打开该地址,列表也会随地址一起传递,包括传递给之后加载该页面的任何服务器。如果这点很重要,请避免在列表中放入敏感信息。
重复项目会怎样?
重复项目会被保留。如果输入中“Sam”出现两次,打乱后的输出中仍会出现两次,只是可能位于不同位置。
我可以打乱多少个项目?有数量限制吗?
工具没有内置数量限制。由于洗牌以线性时间运行,即使是很长的列表,在任何现代设备上也能在不到一秒的时间内完成重新排序。
打乱与排序有何不同?
排序依据固定规则排列项目,例如按字母顺序排列;对于相同的输入,它总是产生相同的结果。打乱则以随机方式排列项目,即使输入完全相同,几乎每次也会产生不同的顺序。
可以多次打乱同一个列表吗?
可以。每次点击“随机排列列表”都会重新运行算法,并且独立于之前的洗牌。对于较短的列表,顺序偶然重复是可能的;对于较长的列表,重复的可能性会变得极低。