开源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;
        }

 

posted @ 2021-03-17 10:50  顺其自然,道法自然  阅读(155)  评论(0编辑  收藏  举报