开源AI系统AForge.NET学习:通用洗牌算法
AForge.NET中有一个洗牌算法,我改造了一下,使之更有通用性。洗牌算法的作用,一方面用于混淆序列,另一方面也可以用于从序列中随机抽取n个元素(混淆序列后,取前n个元素即可)。
源码如下:
// 随机数发生器 private static ThreadSafeRandom rand = new ThreadSafeRandom(); /// <summary> /// 实现通用洗牌算法,把传入的列表乱序输出 /// </summary> /// <param name="inputs"></param> /// <returns></returns> public List<string> Shuffle(List<string> inputs) { int size = inputs.Count; //待输出的列表 List<string> res = new List<string>(); //整一个临时的列表,防止破坏原列表,产生副作用 List<string> tmpInputs = inputs.GetRange( 0, size ); while (size > 0) { //产生随机数 int i = rand.Next(size); res.Add(tmpInputs[i]); tmpInputs.RemoveAt(i); size--; } return res; }