Sequence Alignment काफी मानक समस्या है और जैव सूचना विज्ञान के क्षेत्र में डीएनए या प्रोटीन संरेखण में आवेदन पाता है। मैं हाल ही में इस समस्या के एक अलग संस्करण में आया था।अधिकतम स्कोर के साथ दो अनुक्रमों के सभी संरेखणों को प्रिंट करना
A C G T -
A 5 -1 -2 -1 -3
C -1 5 -3 -2 -4
G -2 -3 5 -2 -2
T -1 -2 -2 5 -1
- -3 -4 -2 -1 Not Allowed
-
को देखते हुए दो इनपुट तार (मान लेते हैं कि तार केवल के बने होते हैं ए, सी, जी, टी), समस्या मूल रूप से निम्नलिखित मैट्रिक्स के आधार पर स्कोर अधिकतम संरेखण को खोजने के लिए था इसलिए, यदि ए के साथ गठबंधन किया गया है -, हम संरेखण स्कोर में -3 जोड़ते हैं या यदि जी को टी के साथ गठबंधन किया जाता है, तो हम स्कोर में -2 जोड़ते हैं या यदि सी को सी के साथ गठबंधन किया जाता है, तो हम 5. जोड़ते हैं तो इनपुट स्ट्रिंग के लिए एजीटीजीएटीजी और जीटीएजी, अधिकतम संरेखण स्कोर 14 है और अधिकतम स्कोर वाले संरेखणों में से एक को
AGTGATG
-GTTA-G
के रूप में प्रदर्शित किया जा सकता है
संरेखण स्कोर की गणना निम्नानुसार की जाती है: ए- = -3, जीजी = 5, टीटी = 5, जीटी = -2, एए = 5, टी- = -1 और जीजी = 5. उन्हें जोड़ना, -3+ 5 + 5-2 + 5-1 + 5 = 14 जो तारों की इस जोड़ी के लिए अधिकतम संभव संरेखण स्कोर है।
मैं गतिशील प्रोग्रामिंग का उपयोग करके इसे कोड करने में सक्षम हूं और संरेखण स्कोर मैट्रिक्स प्राप्त कर रहा हूं लेकिन मुझे अधिकतम संरेखण स्कोर के साथ दो तारों के सभी संभावित संरेखणों को मुद्रित करने में समस्याएं आ रही हैं। मैंने बैकट्रैक करने की कोशिश की क्योंकि हम एलसीएस में करते हैं लेकिन यह काम नहीं कर सका। मैं अपना कोड संलग्न कर रहा हूं।
static Dictionary<string, int> dict;
static void Main(string[] args)
{
//This has been assumed that the strings contain only A,C,G,T and -(?)..caps
Console.WriteLine("Enter first string : ");
string a = Console.ReadLine();
a = "-" + a;
Console.WriteLine("Enter second string : ");
string b = Console.ReadLine();
b = "-" + b;
int[,] SQ = new int[a.Length, b.Length];
#region Create Dictionary
dict = new Dictionary<string, int>();
dict.Add("AA", 5);
dict.Add("AC", -1);
dict.Add("AG", -2);
dict.Add("AT", -1);
dict.Add("A-", -3);
dict.Add("CA", -1);
dict.Add("CC", 5);
dict.Add("CG", -3);
dict.Add("CT", -2);
dict.Add("C-", -4);
dict.Add("GA", -2);
dict.Add("GC", -3);
dict.Add("GG", 5);
dict.Add("GT", -2);
dict.Add("G-", -2);
dict.Add("TA", -1);
dict.Add("TC", -2);
dict.Add("TG", -2);
dict.Add("TT", 5);
dict.Add("T-", -1);
dict.Add("-A", -3);
dict.Add("-C", -4);
dict.Add("-G", -2);
dict.Add("-T", -1);
dict.Add("--", 0);
#endregion Create Dictionary
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < b.Length; j++)
{
int key = 0, key1 = 0, key2 = 0;
dict.TryGetValue(a[i].ToString() + b[j].ToString(), out key);
dict.TryGetValue("-" + b[j].ToString(), out key1);
dict.TryGetValue(a[i].ToString() + "-", out key2);
if (i == 0)
SQ[i, j] = key1;
else if (j == 0)
SQ[i, j] = key2;
else
SQ[i, j] = Math.Max(SQ[i - 1, j - 1] + key, Math.Max(SQ[i - 1, j] + key1, SQ[i, j - 1] + key2));
}
}
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < b.Length; j++)
{
Console.Write(SQ[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine("Alignment Score : " + SQ[a.Length - 1, b.Length - 1]);
printAllAlignmentsWithHighestAlignmentScore();
Console.Read();
}
किसी ने मुझसे लागू करने printAllAlignmentsWithHighestAlignmentScore() फ़ंक्शन में मदद सकते हैं?
गतिशील प्रोग्रामिंग यहां उप समस्याओं पहले से ही मैट्रिक्स वर्ग – ankitG
इसके अलावा में संग्रहीत करने के लिए समाधान का उपयोग करके मैट्रिक्स वर्ग को आबाद करने की है, अपने समाधान शायद गलत है क्योंकि आउटपुट गलत है। समस्या की मूल परिभाषा के अनुसार, दोनों स्ट्रिंग्स को मूल स्ट्रिंग में समान अक्षरों के रूप में माना जाता है, जो अंतराल ('-') को छोड़कर होते हैं जिन्हें स्ट्रिंग में से किसी एक में बेहतर रूप से डालना होता है। मैं देखता हूं कि आपके आउटपुट (एजीटीजीएटीजी, -जीटीटीटीटीए) (स्कोर = 8), (एजीटीजीएटीटीजी, -जीटीटीटीTAG) (स्कोर = 14), दूसरी स्ट्रिंग दोनों समाधानों में अलग है जो बदले में इनपुट स्ट्रिंग से अलग है जो मेरा मानना है कि "जीटीTAG" – ankitG
@ankitG ठीक है धन्यवाद, मैं अब गतिशील प्रोग्रामिंग को समझता हूं। मैं यह देखने की कोशिश करूंगा कि यह क्यों काम नहीं कर रहा है। – groverboy