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

举报
yd_267761811 发表于 2023/07/07 09:16:15 2023/07/07
【摘要】 洗牌算法是随机打乱一组数据的算法。常用的洗牌算法有随机置换算法和Fisher-Yates算法。随机置换算法是在数组中随机交换元素的位置,而Fisher-Yates算法是从数组的末尾向前遍历,并在遍历过程中与随机位置交换元素。 以下是 Python 中实现 Fisher-Yates 算法的代码:  import random   def shuffle(arr):      for i in ...

洗牌算法是随机打乱一组数据的算法。常用的洗牌算法有随机置换算法和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<T>(IList<T> 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<T> 实例作为参数。
洗牌算法

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。