Уникальное представление 2 или более массивов - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть несколько массивов фиксированной длины, где каждый компонент может принимать значения натуральных чисел.В моей программе 2 вектора идентичны в этом простом случае 0001112 1110002

2220001 также будет идентичен этим двум массивам

Мой вопрос: как я могу получить уникальное представление для этих двух массивов?

Приветствия

Ответы [ 3 ]

0 голосов
/ 19 февраля 2011

Один из способов - сохранить их в словаре (хеш-таблице), сопоставляя каждое число с количеством раз, которое оно появляется.Ваши два массива будут иметь одинаковое представление:

{0: 3, 1: 3, 2: 1}
0 голосов
/ 19 февраля 2011
public static List<int> GetUniqueRepresentation(int[] array)
{
    int count = 1;
    var output = new List<int>();
    for (int i = 1; i <= array.Length; i++)
    {
        if (i < array.Length && array[i] == array[i - 1])
        {
            count++;
        }
        else
        {
            output.Add(count);
            count = 1;
        }
    }

    return output;
}
0 голосов
/ 19 февраля 2011

Не совсем понятно, как определяется ваше отношение эквивалентности, но построение представления набора из массивов удовлетворяет заданному вами ограничению.Есть два способа сделать это:

  1. Преобразовать в соответствующую структуру данных (наборы встроены во многие языки, в противном случае подойдет хеш-таблица или BST).
  2. Сортировкакаждый массив, удалите дубликаты элементов и обрежьте их.Поскольку они имеют фиксированную длину, вам нужно где-то хранить количество различных элементов или использовать -1 для обозначения «конца элементов».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...