«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;
}