﻿功能:采用一种洗牌算法打乱数据排列顺序

格式:
RandShuff(A,B,c,T)
RandShuff(A,B,c)
RandShuff(A,B)
A:需要操作的数据数组
B:一个和A同维数的打乱数据位置的数组
c:对应B当中控制值的数值变量,默认为0.5
T:洗牌次数,默认为10

说明:如果c取值为0.5,建议B当中的数据范围在[0,1]之间。即c尽量取B当中数据居中的数值。采用此函数创建的排列数据可以使用函数{RandShuffInv<矩阵运算\RandShuffInv>}进行复原

原理:
1、设操作的原数据对象为A,且A的大小为n,判断矩阵为B,判断条件为c
2、i=1
3、如果B[j]≥c,则将A[j]存储于M中;否则将A[j]存储于N中.其中j=1、2、3、……、n
4、如果T为偶数,则置A=N+M;否则A=M+N【注意这里的加号为连接的含义】
5、i=i+1,如果i≤T,则转至3
6、返回A

例子:
a =
[ 8.02725978569466    5.46464101200208    0.49161069118027    0.17810114202001
  6.14360615897160    5.96238438317663    9.56535559127357    5.17892545795949
  5.04794782262666    5.19861276969249    0.15145807999719    6.03789479287243
  2.38930948655555    6.95544160295066    9.56136212198127    1.12010810110723 ]
b =
[ 0.68078782906792    0.59903229614674    0.91114474735741    0.95886606721154
  0.33223250104684    0.39139651944460    0.70384420952938    0.04670160871311
  0.55510625781263    0.31149714268348    0.90302728903620    0.11192062222953
  0.24717892717904    0.68440505475011    0.72973310841700    0.35071503387331 ]

c=RandShuff(a,b)//回车得到a居中数据打乱顺序后的数组c
c =
[ 6.03789479287243    2.38930948655555    8.02725978569466    0.49161069118027
  9.56535559127357    5.04794782262666    9.56136212198127    6.14360615897160
  5.96238438317663    5.17892545795949    5.19861276969249    1.12010810110723
  5.46464101200208    0.17810114202001    0.15145807999719    6.95544160295066 ]

d={RandShuffInv<矩阵运算\RandShuffInv>}(c,b)//对c数据进行复原后得到如下结果,可以发现和a的值一样
d =
[ 8.02725978569466    5.46464101200208    0.49161069118027    0.17810114202001
  6.14360615897160    5.96238438317663    9.56535559127357    5.17892545795949
  5.04794782262666    5.19861276969249    0.15145807999719    6.03789479287243
  2.38930948655555    6.95544160295066    9.56136212198127    1.12010810110723 ]