// Sorts channels in random order func (dbs *DBS) RandomChan() { var SortCh vector.IntVector for i := 0; i < NCh; i++ { SortCh.Push(i) dbs.RndCh[i] = i } //randomizesd reserved top canals /* for i := 10; i > 1; i-- { j := dbs.Rgen.Intn(i) + NCh-10 SortCh.Swap(NCh-10+i-1, j) dbs.RndCh[NCh-10+i-1] =SortCh.Pop() } dbs.RndCh[NCh-10]=SortCh.Pop() */ //randomizes other canals /* for i := NCh - 11; i > NChRes; i-- { j := dbs.Rgen.Intn(i-NChRes) + NChRes SortCh.Swap(i, j) dbs.RndCh[i] =SortCh.Pop() } dbs.RndCh[NChRes] = SortCh.Pop() dbs.RndCh[0] = 0 */ //fmt.Println(dbs.RndCh); for i := NCh - 1; i > NChRes; i-- { j := dbs.Rgen.Intn(i-NChRes) + NChRes SortCh.Swap(i, j) dbs.RndCh[i] = SortCh.Pop() } dbs.RndCh[NChRes] = SortCh.Pop() dbs.RndCh[0] = 0 }
// Fisher-Yates (Knuth) Shuffle func shuffle(v *vector.IntVector) { for i := v.Len() - 1; i >= 1; i-- { v.Swap(i, rand.Intn(i+1)) } }