Поиск подмассива в массиве

Описание

Вопрос такой "общий".
Есть массив какой-нибудь:

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-мерного?


Ответы (0 шт):