Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- char getSymb(int ind) {
- return alphabet[ind];
- }
- int distance(string s1, string s2) {
- int result = 0;
- for (int i = 0; i < s1.length(); i++)
- if (s1[i] != s2[i]) result++;
- return result;
- }
- int totalDisatance(string *DNA, string v, int t) {
- int result = 0;
- int min = v.length() + 1;
- for (int i = 0; i < t; i++) {
- for (int j = 0; j < DNA[0].length() - v.length() + 1; j++) {
- if (distance(v, DNA[i].substr(j, v.length())) < min) {
- min = distance(v, DNA[i].substr(j, v.length()));
- }
- }
- result += min;
- min = v.length() + 1;
- }
- return result;
- }
- //getting median string
- void getMedianStr(string &median, string *DNA, int t, int l, int n) {
- int bestDistance = INT32_MAX;
- string bestWord;
- int i = 0;
- while (i < l) {
- bestWord += 'A';
- i++;
- }
- cout << "bestDist = " << bestDistance << " bestWord = " << bestWord << endl;
- //ind - is a l-mer word
- int *ind = new int[l];
- for (int i = 0; i < t; i++) ind[i] = 0;
- string wordL = "";
- int k = 0;
- int c = pow(4, l); // number of different positions
- for (int i = 0; i < c; i++) {
- k++;
- //here we can work with words
- for (int j = 0; j < l; j++) {
- wordL += getSymb(ind[j]);
- }
- cout << "wordl = " << wordL << endl;
- if (totalDisatance(DNA, wordL, t)) {
- }
- wordL = "";
- //refresh indexes
- for (int j = 0; j < l; j++) {
- ind[j]++;
- if (ind[j] < 4)
- break;
- ind[j] = 0;
- }
- }
- cout << "k =" << k << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement