Re: Проверка вложенности одного массива в другой
От: dead7man Россия  
Дата: 19.11.04 16:09
Оценка:
Здравствуйте, Andrudis, Вы писали:

A>Как в С# самым быстрым способом проверить, содержатся ли все элементы массива Х среди элементов массива Y? Может есть какой способ получше, чем поэлементная проверка?


Если массивы отсортированны, то есть.
Алгоритм приблизительно следующий (писался от руки):

object[] x; // Массив X, отсортированный по возрастанию
object[] y; // Массив Y, отсортированный по возрастанию
int xIndex = 0; // Указатель на элемент массива X
int yIndex = 0; // Указатель на элемент массива Y
int counter = 0; // Счетчик совпадений элементов
while (xIndex < x.Count && yIndex < y.Count) // Пока не кончится хотя бы один из массивов
{
    object currentX = x[xIndex]; // Текущий эламент массива X
    object currentY = y[yIndex]; // Текущий эламент массива Y
    if (currentX == currentY) // Элементы совпадают
    {
        counter++; // Увеличиваем счетчик совпадений
        xIndex++; // Переходим к следующему элементу массива X
    }
    else if (currentX > currentY) // Переходим к следующему элементу в том массиве, в котором текущий элемент меньше
    {
        yIndex++;
    }
    else
    {
        xIndex++;
    }
}
if (counter == x.Length)
{
    bingo(); // Массив X полностью содержится в массиве Y
}


Если массивы не отсортированные, может получиться более эффективно сначала их отсортировать. Не знаю считать издержки надо
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Dmtriy Safonov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.