Поиск подмассива в массиве
Описание
Вопрос такой "общий".
Есть массив какой-нибудь:
int[] array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
ну и чтобы проверить существование какого нибудь подмассива в нем я написал:
bool ContainSubarray<T>(T[] array, T[] subarray) where T : IComparable<T> {
var contains = false;
for (int i = 0; i < array.Length - subarray.Length + 1; i++) {
var match = true;
for (int j = 0; j < subarray.Length; j++) {
if (array[i + j].CompareTo(subarray[j]) != 0) {
match = false;
break;
}
}
if (match) {
contains = true;
break;
}
}
return contains;
}
int[] subarray = { 3, 4, 5 };
var result = ContainSubarray(array, subarray); // true
Вопрос
Как можно это реализовать для прямоугольных, многомерных массивов?
Я догадываюсь что через цикл, только каждый раз взять соответственную строку подмассива и. т. п., но я столкнулся с проблемами - с взятием строки например двумерного массива, с реализацией цикла, с оптимизацией.
Можете привести пример хотя бы для двумерного массива и описать производительный алгоритм для n-мерного?