github.com/biogo/biogo@v1.0.4/util/debruijn.go (about) 1 // Copyright ©2011-2012 The bíogo Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package util 6 7 // Return a deBruijn sequence for a n-words with k letters. 8 func DeBruijn(k, n byte) (s []byte) { 9 switch k { 10 case 0: 11 return []byte{} 12 case 1: 13 return make([]byte, n) 14 } 15 16 a := make([]byte, k*n) 17 s = make([]byte, 0, Pow(int(k), n)) 18 19 var db func(byte, byte) 20 db = func(t, p byte) { 21 if t > n { 22 if n%p == 0 { 23 for j := byte(1); j <= p; j++ { 24 s = append(s, a[j]) 25 } 26 } 27 } else { 28 a[t] = a[t-p] 29 db(t+1, p) 30 for j := a[t-p] + 1; j < k; j++ { 31 a[t] = j 32 db(t+1, t) 33 } 34 35 } 36 } 37 db(1, 1) 38 39 return 40 }