转:洗牌算法,随机算法的别名

简介: 洗牌算法是随机打乱一组数据的算法。常用的洗牌算法有随机置换算法和Fisher-Yates算法。随机置换算法是在数组中随机交换元素的位置,而Fisher-Yates算法是从数组的末尾向前遍历,并在遍历过程中与随机位置交换元素。

洗牌算法是随机打乱一组数据的算法。常用的洗牌算法有随机置换算法和Fisher-Yates算法。随机置换算法是在数组中随机交换元素的位置,而Fisher-Yates算法是从数组的末尾向前遍历,并在遍历过程中与随机位置交换元素。

以下是 Python 中实现 Fisher-Yates 算法的代码:

  import random

  def shuffle(arr):

   for i in range(len(arr) - 1, 0, -1):

      j = random.randint(0, i)

      arr[i], arr[j] = arr[j], arr[i]

   return arr

  # Example usage:

  deck_of_cards = list(range(1, 53))

  shuffled_deck = shuffle(deck_of_cards)

  print(shuffled_deck)

这段代码使用了 Python 的 random 库来生成随机数,并在循环中使用 Fisher-Yates 算法来随机打乱数组中的元素。这段代码将一个由整数 1 到 52 组成的数组 (比如一副扑克牌) 打乱顺序。

以下是 C# 中实现洗牌算法的代码:

  using System;

  using System.Linq;

  class Shuffle

  {

   static Random rng = new Random();

   public static void ShuffleList(IList list)

   {

      int n = list.Count;

      while (n > 1)

   {

          n--;

          int k = rng.Next(n + 1);

          T value = list[k];

          list[k] = list[n];

          list[n] = value;

      }

   }

   static void Main()

  {

      List<int> deck = Enumerable.Range(1, 52).ToList();

      ShuffleList(deck);

      foreach (int card in deck)

          Console.WriteLine(card);

   }

  }

这段代码使用了 System.Random 类来生成随机数,并在循环中使用 Fisher-Yates 算法来随机打乱数组中的元素。这段代码将一个由整数 1 到 52 组成的数组 (比如一副扑克牌) 打乱顺序。

注意:上面代码中,ShuffleList 方法是一个泛型方法,它可以接受任何类型的 IList 实例作为参数。
image.png

本文转载自:https://www.teamdoc.cn/archives/2955

目录
相关文章
|
3月前
|
存储 算法 测试技术
ArrayList集合的两个实例应用,有趣的洗牌算法与杨辉三角
ArrayList集合的两个实例应用,有趣的洗牌算法与杨辉三角
35 1
|
10天前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
25 1
|
2月前
|
机器学习/深度学习 人工智能 算法
技术经验解读:【转】完美洗牌算法学习
技术经验解读:【转】完美洗牌算法学习
14 0
|
3月前
|
存储 算法 容器
ArrayList | 简单的洗牌算法
这是一个关于创建和洗牌扑克牌程序的摘要: 程序包括以下步骤: 1. 创建一副扑克牌(52张,不包括大小王)。 2. 洗牌,随机打乱扑克牌的顺序。 3. 揭牌,模拟玩家轮流从牌堆中抽取指定数量的牌。
34 4
|
3月前
|
存储 算法 PHP
开发一款扑克游戏,请给出一套洗牌算法,公平的洗牌并将洗好的牌存储在一个整形数组里?
开发一款扑克游戏,请给出一套洗牌算法,公平的洗牌并将洗好的牌存储在一个整形数组里?
26 1
开发一款扑克游戏,请给出一套洗牌算法,公平的洗牌并将洗好的牌存储在一个整形数组里?
|
12月前
|
算法 C# 图形学
彻底搞懂洗牌算法
彻底搞懂洗牌算法
154 0
|
算法 图形学
面试高频题之三-洗牌算法
面试高频题之三-洗牌算法
|
算法 JavaScript Java
Math.random()传参?什么是随机种子?什么是洗牌算法?
Math.random()传参?什么是随机种子?什么是洗牌算法?
164 1
|
算法 Go 索引
870. 优势洗牌:田忌赛马:贪心算法+双指针
这是 力扣上的 870. 优势洗牌,难度为 中等。
|
算法 索引
LeetCode算法小抄-- N 叉树 和 洗牌算法
LeetCode算法小抄-- N 叉树 和 洗牌算法

热门文章

最新文章