洗牌算法

洗牌算法(Knuth算法) 算法 洗牌算法(Knuth算法) @author:Jingdai @date:2020.10.02 简介 给你一个数组(牌),要求打乱数组顺序,使每个元素出现在任何地方的概率一样。 思路 利用经典洗牌算法,就是 Knuth 算法。 如下图,在整个数组 [0, n-1] 中(包括最后一个元素)随机选出一个元素,将它和最后那个元素 [n-1] 交换,然后再在数组 [0, n-2] 中随机选出一个元素,将它与倒数第二个元素 [n-2] 交换…一直到最后一个元素,就完成了算法。 代码 public vo 阅读详情
洗牌即产生指定数据的随机序列 第一种思路: 将54个数依次放到随机的位置。关键是每次找一个随机的位置。 下面是找这个随机位置的算法: 1、用一个Bool型数组记录各个位置是否已经放置了数,如果放置则置true,没有则为false。在算法开始时数组初始化为false。 2、每次产生一个0~53的随机数,看这个位置是否已经放置了数,如果已经放置了,则继续用同样的方法找一个随机位置判断;如果这个位置还未放置,则设置此位置,并标记其已经放置。 3、反复执行(2)直到所有的位置都放置了数为止。(只要设置成功54次数就说明所有位置已经设置了数) 例程: void shuffle(int dest[],int n) { int pos,card; memset(dest,0,sizeof(int)*n); for(card=1;card<=n;card++) { do { pos=rand()%(n+1); }while(dest[pos]!=0); dest[pos]=card; } } 上面方法的问题:随着未设置的数渐渐变少,寻找未设置的位置会越来越难。如果牌数很多则更是不可思议。 第二种思路: 随机分配54张扑克牌到54个位置,每个位置只允许放一张牌。用1-13表示红心 A-K,14-26表示黑桃A,2,3-,Q,K,27-39表示方块A,2,3-,Q,K,40-54表示A,2,3-,Q,K,大鬼,小鬼 也就是生成1-52个不重复的随机数,放到数组中。 #include #include #include const int N=54; static int a[N]; int create(int n) { return (1+rand()%54); } int main() { int i,j; srand(time(0)); for(i=1;i<=N;++i) { a[i]=create(N); for(j=0;j
洗牌算法思路讲解(程序员面试题) 洗牌算法是我在面试过程中遇到的一个问题,我事后做了整理,与大家分享下思路,这个文档是我自己写的,如要转载,请注明出处。联系方式在文档里有说明。有什么想法或思路希望与我一起交流。 立即下载

相关推荐

apm软件仿真+QGC地面站 环境搭建

本教程使用场景:apm软件仿真运行于虚拟机 ubuntu环境。qgc地面站位于windows 系统。两个环境在同一台电脑上。 一.apm仿真环境搭建 1.安装vm虚拟机及ubuntu 18。 2.ubuntu下 下载Ardupilot 飞控源码 并配置环境。 下载源码: git clone https://github.com/ArduPilot/ardupilot cd ardupilot git submodule update --init --recursive 配置所需运行的环境:

qthello 6110

洗牌算法(转载)

洗牌算法 设计一个公平的洗牌算法1.看问题,洗牌,显然是一个随机算法了。随机算法还不简单?随机呗。 把所有牌放到一个数组中,每次取两张牌交换位置,随机 k 次即可。 如果你的答案是这样,通常面试官会进一步问一下,k 应该取多少?100?1000?10000?很显然,取一个固定的值不合理。如果数组中有 1000000 个元素,随机 100 次太少;如果数组中只有 10 个元素,随机 10000 次又...

D_R的博客 2186

Unity性能优化 - 动态图集

Unity 动态图集是 Unity 引擎中用于处理游戏纹理优化的一种技术。本文介绍了什么是动态图集,动态图集的优缺点,以及提供了一套完整的代码供大家参考。

qq_33808037的博客 4840

游戏洗牌算法——常用+详解最优Knuth_Durstenfeld算法

游戏常用算法-洗牌算法

YF云飞的博客 9226

如何使用 Ansys OptiSlang 同时运行多个参数化设计研究

了解如何通过使用 OptiSLang 同时运行多个参数化设计研究来提高工作效率。

jkh920184196的博客 2385

Grok-1.5+Ollama企业级本地化部署与合规实践指南

本文详细介绍了Grok-1.5+Ollama企业级本地化部署与合规实践指南,重点分析了本地化部署的成本优势和数据主权保障。通过RTX 4090显卡的硬件选型、Ubuntu 22.04系统优化及部署流程中的关键陷阱规避,为企业提供了高效、安全的AI模型部署方案。特别适合金融、医疗等敏感行业。

weixin_29094539的博客 182

洗牌算法(Shuffle Algorithm)Fisher-Yates 洗牌算法详细解读

洗牌算法(Shuffle Algorithm)用于将一组元素随机打乱,类似于洗牌过程中将牌随机排列的过程。Fisher-Yates 洗牌算法是最经典且高效的洗牌算法,能够确保生成的排列是等概率的(即每一种排列出现的概率相同),其时间复杂度为 O(n)。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 6362

Halcon像素比例标定(误差大)-相机标定

一种简易标定: 像素比例标定,如果需要精确一些则需要在高度和宽度上都需要计算,然后求出比例系数。需要高精度标定板和相机,以及多次标定才能达到稳定的状态,这种标定简单,但是误差大。 read_image (Img0008, 'D:/00项目代码/000视觉软件/02Halocn算法20190501/04测量20190424/07_比例计算测量标定/IMG0008.jpg') rgb1_to_...

SSSS的博客 3985

算法笔记02|洗牌算法(附C++代码)

系列文章目录 ● 算法笔记01|欧几里得GCD算法(附C++代码) 文章目录系列文章目录一、洗牌问题的定义二、洗牌算法1. 算法思想2. 实现举例3. 算法代码(c++) 一、洗牌问题的定义 通俗地说,洗牌(Shuffle)问题就是将排好序的扑克牌打乱,且打乱后的次序不可预测。 形式化来说,洗牌问题就是将n个排好序的数字或符号打乱,使排序次序随机。 二、洗牌算法 1. 算法思想 算法的主要思想为随机选取一个元素与最后一个未交换的元素交换,最终令全部元素被交换。 具体思想: ① 首先从 1~n

playcold233的博客 3326

48、基于头部电信号和触觉的人机交互技术研究

本文探讨了基于头部电信号控制决策和触觉感知的人机交互技术。通过EEG信号采集与ANN模型(TDNN/PRNN)分析,实现对用户意图的识别;同时利用触觉传感接口识别操作员有意接触,提升人机协作安全性。研究涵盖系统设计、数据处理流程、实验结果及技术拓展方向,并展望了两种技术在工业、医疗与智能家居等领域的融合应用前景。

i1j2k的博客 102

Android13无重力感应系统修改触摸屏跟随屏幕显示旋转方向旋转

在实际产品中设计时会移除重力传感器。当设备缺少重力传感器时,系统无法使用该传感器提供的方向数据来确定屏幕旋转的方向。Android 系统中由于移除重力传感器导致的默认显示方向旋转引起触摸屏与屏幕显示不一致问题,主要是由于缺乏方向检测和触摸坐标的正确转换。通过使用替代传感器(如陀螺仪)、手动配置方向、调整触摸事件坐标和 UI 布局,可以解决这个问题。开发者需要确保在设备没有重力传感器的情况下,能够通过其他方法推测方向,并确保触摸事件和 UI 动作能够正确响应设备的旋转。

weixin_35723192的博客 803

三种洗牌算法shuffle

1. 背景       笔试时,遇到一个算法题:差不多是 在n个不同的数中随机取出不重复的m个数。洗牌算法是将原来的数组进行打散,使原数组的某个数在打散后的数组中的每个位置上等概率的出现,刚好可以解决该问题。2. 洗牌算法       由抽牌、换牌和插牌衍生出三种洗牌算法,其中抽牌和换牌分别对应Fisher-Yates Shuffle和Knuth-Durstenfeld Shhuffle算法。  ...

linus_Robot的博客 9万+

C++多线程 task--std::promise和std::future

本文主要讲解C++11/14/17中所提供的应用于多线程编程中的Task机制。Task可由如下几部分取得而本文主要讲解std::promise和std::future相关的内容。std::promise和std::future通过一个数据管道进行交流,可以将std::promise看作生产者,std::future看作消费者,其两者形成如下的方式交互std::promise本身是一个模版类,通过std::promise可以像数据管道中设置value,异常和相应的通知信息。std::promise提供了如下接

qls315的博客 1818

Java 洗牌算法

设计一个扑克洗牌算法。将 52 张牌(不包括大、小王)用对象的形式表示,每张牌包括花色和大小。大小按如下序号排列: 2 、 3 、 4 、 s 、 6 、 7 、 s 、 9 、 10 、 J 、 Q 、 K 、 A ,花色为:“黑桃”,“花子”,“红桃”,“方片”,首先将扑克按顺序存放到一个一维数组中,然后按洗牌算法进行洗牌,输出洗完后的扑克牌序列。 public class PuKe { String hua; String num; public PuKe() { this("1",".

悢七的优快云博客 3141

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C语言经典算法之洗牌算法

在C语言中实现经典的洗牌算法,我们通常指的是Fisher-Yates(也称为Knuth-Shuffle)算法。该算法保证了随机均匀打乱一个数组中的元素顺序。

weixin_56154577的博客 2000

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C#洗牌算法

洗牌算法是一种将序列(如数组、列表)元素随机打乱的经典算法,核心目标是让每个元素在打乱后出现在任意位置的概率均等。在 C# 中,常用的洗牌算法有Fisher-Yates 洗牌算法(也称 Knuth 洗牌算法),它高效且公平,时间复杂度为 O (n),空间复杂度为 O (1)。

weixin_66547608的博客 1525

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【算法】洗牌算法

本文介绍了暴力法和 Fisher-Yates 这两种洗牌算法

代码星辰的博客 4347

关于洗牌算法的一点总结

之前写斗地主的时候简单写了一个洗牌函数,基本思路是先产生一个顺序数组,遍历数组,每次产生一个(1~n)随机数,把这个随机数作为下标取出数组里的数与当前位置的数交换。 当时也没多想,反正能打乱数组顺序就行,后来跟师兄吃饭的时候聊起来,说到面试里也出现过洗牌算法,问我怎么保证这个算法得到的数组是完全随机的(即等概),我一时竟不知怎么证明。 回来后上网找了一下,才发现原来这个算法竟然不是完全随机的。

huang1433的博客 3795

[算法]洗牌算法

本文为王赟博士在知乎上的文章:10809 一种错误的洗牌算法,以及乱排常数 (1)节选 「洗牌」,或者说随机打乱一个数组中元素的顺序,是编程中的一个常见需求。标准的洗牌算法是 Fisher-Yates shuffle,用 JavaScript 实现如下: function shuffle(A) { for (var i = A.length - 1; i > 0; i--) { ...

iningwei的博客 1780
上一篇: 什么是PV,UV,PR值
下一篇: 面试两个人应届生的经验 -------转自《学生大本营》的杨中科老师的笔记
candyice
博客等级 码龄20年 33粉丝 8原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值