舒尔特表是一种训练人的注意力的表格,一般是方格,从3阶到6阶比较常用,每一个小格内显示一个乱序列排列且不重复的数字,比如3阶舒尔特表每一排的数字可能是4,2,5;8,6,7;3,9,1。这种表格的使用方式为从1一直点到最大的数值,然后记录用时,用时越快表示注意力越集中。
生成舒尔特表的过程也就是将一组数字随机打乱的过程,然后依次填充到每个小格里去,我们可以封装一个函数,用于生成从最小值min到最大值max之间的一个随机数。暂取名为GetRandom(min, max),假定要生成3阶表,生成过程如下:
构造9个容器,这9个容器分别装着1-9这些数字。首先,从1-9随机生成一个数,填到第一个格里,比如是3,于是就从第3个容器中取出3来,现在第3个容器空了,就把3后面的容器中的数依次向前挪,最后第9个容器空了,我们要从剩下的8个数中随机取出一个,于是调用GetRandom(1,8), 比如又是3,那么从第3个容器中再取出数来,现在这个数是4,填充到第二个格。然后再把第4个容器到第8个容器中的数再往前挪一次。然后再调用GetRandom(1,7).以此类推。最后必然生成的是打乱的数字序列。
这个算法时间主要消耗在移动容器中的数字上,对于生成100以内的乱序随机数,这足够用了,而且还比较好理解。