C ++ - Вывести все возможные кмеры ДНК заданной длины

«kmer» - это последовательность ДНК длиной K. Допустимая последовательность ДНК (для моих целей) может содержать только 4 следующих основания: A, C , Т, Г. Я ищу алгоритм C ++, который просто выводит все возможные комбинации этих баз в алфавитном порядке в массив строк. Например, если K = 2, программа должна сгенерировать следующий массив:

kmers[0]  = AA
kmers[1]  = AC
kmers[2]  = AG
kmers[3]  = AT
kmers[4]  = CA
kmers[5]  = CC
kmers[6]  = CG
kmers[7]  = CT
kmers[8]  = GA
kmers[9]  = GC
kmers[10] = GG
kmers[11] = GT
kmers[12] = TA
kmers[13] = TC
kmers[14] = TG
kmers[15] = TT

Если я правильно об этом думаю, проблема действительно сводится к преобразованию десятичного целого числа в основание 4 с последующей заменой соответствующих оснований. Я думал, что могу использовать itoa для этого, но itoa не является стандартом C, и мой компилятор не поддерживал его. Приветствую любые умные идеи. Вот мой пример кода:

#include <iostream>
#include <string>
#include <math.h>

#define K 3

using namespace std;

int main() {

  int num_kmers = pow(4,K);
  string* kmers = NULL;

  /* Allocate memory for kmers array */
  kmers = new string[num_kmers];

  /* Populate kmers array */
  for (int i=0; i< pow(4,K); i++) {

    // POPULATE THE kmers ARRAY HERE                                                                                                                                                         

  }

  /* Display all possible kmers */
  for (int i=0; i< pow(4,K); i++)
    cout << kmers[i] << "\n";

  delete [] kmers;
}
8
задан Gilles 'SO- stop being evil' 22 October 2012 в 21:37
поделиться