सबसे अच्छा आप प्राप्त कर सकते हैं पता करने के लिए तो चाहते हैं हे (एम) है, लेकिन है कि मैं थोड़ा जटिल कार्यान्वयन। यदि आप ऐसे समाधान से संतुष्ट हैं जिसमें ओ (एम * एन) सबसे खराब मामला है तो आप नीचे दिए गए समाधान के साथ जा सकते हैं। यदि आपके अनुक्रमों का आदेश दिया गया है और tag
सरणी में प्रारंभिक आइटम src
में केवल एक बार मौजूद है तो इसके परिणामस्वरूप ओ (एम) भी होगा।
class Program
{
static void Main(string[] args)
{
var src = new byte[] { 1, 2, 3, 4, 5 };
var tag = new byte[] { 3, 4 };
var index = FindIndexOfSeq(src, tag);
Console.WriteLine(index);
Console.ReadLine();
}
static int FindIndexOfSeq<T>(T[] src, T[] seq)
{
int index = -1;
for (int i = 0; i < src.Length - seq.Length + 1; i++)
{
bool foundSeq = true;
for (int j = 0; j < seq.Length; j++)
{
foundSeq = foundSeq && src[i + j].Equals(seq[j]);
}
if (foundSeq)
{
index = i;
break;
}
}
return index;
}
}
मैं अनुक्रम मान लिया है कि क्रम में होना है और मैं केवल इतना यकीन नहीं करता है, तो यह काम करता है :) फ़ायरफ़ॉक्स में यह तैयार की है,। इसके अलावा, मैंने इसे सामान्य बना दिया है, इसलिए यह किसी भी प्रकार के सरणी को बाइट नहीं करता है।
अद्यतन: अद्यतन कोड संकलित और काम ... या मेरा सरल परीक्षण काम किया।
स्रोत
2011-01-11 14:03:06
संभव नकल http://stackoverflow.com/questions/3529727/how-to-find-index-of-sublist-in-list – nan
यह कुशलता से हल करने के लिए एक आसान समस्या नहीं है। भद्दा, आसान-कार्यान्वित-खोज 'ओ (एनएम)' सबसे खराब मामला है। आप उस पर काफी सुधार कर सकते हैं (जैसे बॉयर-मूर), लेकिन यह आसान नहीं है। http://en.wikipedia.org/wiki/String_searching_algorithm#Single_pattern_algorithms – Ani
केवल पहली घटना का सूचकांक? –