如何在StringList中随机化String,同样地,这个在线工具如何工作.如果有人熟悉它,请检查:
http://textmechanic.co/Randomize-List.html
解决方法
执行随机播放的一个常见算法是
Fisher-Yates shuffle.这产生均匀分布的排列.
要在Delphi TStrings对象上实现,可以使用:
procedure Shuffle(Strings: TStrings); var i: Integer; begin for i := Strings.Count-1 downto 1 do Strings.Exchange(i,Random(i+1)); end;
现在,理论上,这将产生均匀分布的排列,实际的性能在很大程度上取决于随机数发生器的质量.这在Knuth的计算机编程艺术,第2卷,3.4.2节,算法P.
进一步阅读:
> Fisher-Yates shuffle(维基百科)
> Jeff Attwood的两篇关于洗牌的博客文章:Shuffling和The Danger of Naïveté
> The intuition behind Fisher-Yates shuffling(Eli Bendersky)
> Art of Computer Programming,唐纳德·克努特,卷2,第3.4.2节
> Shuffling(维基百科)