मैं दो साधारण तारों की तुलना करने के लिए एक सरल और हल्के एल्गोरिदम की तलाश कर रहा हूं।सरल शब्द diff algorithm
उदाहरण के लिए, अगर हम उन दो तार ले:
मुझे यह संकेत देना चाहिए कि दूसरे शब्द के 2 पहले अक्षर अलग हैं, आदि
अभी के लिए मेरे पास एक बहुत ही सरल एल्गोरिदम है जो शब्दों की तुलना करता है:
/// <summary>
/// Make a diff between two strings and returns words indices
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public static List<int> Diff(string a, string b)
{
List<int> indices = new List<int>();
string[] asplit = a.Split(' ');
string[] bsplit = b.Split(' ');
for (int i = 0; i < asplit.Length; i++)
{
if (bsplit.Length > i)
{
if (asplit[i].CompareTo(bsplit[i]) != 0)
{
indices.Add(i);
}
}
}
return indices;
}
तो यह मुझे बताएगा कि कौन से शब्द (अंतरिक्ष पात्रों पर विभाजन का उपयोग करके) अलग हैं।
मैंने जटिल एल्गोरिदम लागू करने या मौजूदा लाइब्रेरी का उपयोग करने के बारे में यहां कई विषयों को पढ़ा है।
लेकिन मुझे .NET कॉम्पैक्ट फ्रेमवर्क (WP7) द्वारा नियंत्रित किया गया है और मुझे ऐसा कुछ नहीं है जो दो फाइलों या दो ग्रंथों की तुलना कर सके, मुझे बस एक शब्द तुलना की आवश्यकता है।
क्या कोई पुस्तकालय या एल्गोरिदम फिट हो सकता है? धन्यवाद :)।
क्या होगा यदि वाक्यों में से एक के बीच में कोई शब्द डाला गया है तो यह मैच को स्कूज करता है? क्या यह हर बाद के शब्द को अलग-अलग रिपोर्ट करना चाहिए? –
इस समस्या को हल करने का मानक तरीका सबसे लंबा आम उपक्रम एल्गोरिदम लागू करना है। यह एक सुंदर सीधा एल्गोरिदम है। मेरे पास यहां एक जेस्क्रिप्ट कार्यान्वयन है: http://blogs.msdn.com/b/ericlippert/archive/2004/07/21/189974.aspx इसे C# में कनवर्ट करना एक अभ्यास के रूप में छोड़ा गया है। –
@ जेम्स माइकल हरे: मान लें कि मेरे पास "मेरी छोटी टट्टू" और "मेरी प्यारी छोटी टट्टू" है, इसे केवल "मीठा" की रिपोर्ट करनी चाहिए। मुझे लगता है कि इसके लिए मेरा बहुत आसान एल्गोरिदम विफल रहता है। – Valryon