Для заданной двоичной матрицы выведите все уникальные строки данной матрицы.
Пример:
Input: {0, 1, 0, 0, 1} {1, 0, 1, 1, 0} {0, 1, 0, 0, 1} {1, 1, 1, 0, 0} Output: 0 1 0 0 1 1 0 1 1 0 1 1 1 0 0
Способ 1 (простой)
Простой подход заключается в проверке каждой строки со всеми обработанными строками. Распечатать первый ряд. Теперь, начиная со второй строки, для каждой строки сравните строку с уже обработанными строками. Если строка соответствует какой-либо из обработанных строк, не печатайте ее. Если текущая строка не совпадает ни с одной строкой, выведите ее.
Сложность времени: O (ROW ^ 2 x COL)
Вспомогательное пространство: O (1)
Метод 2 (Использование бинарного дерева поиска)
Найдите десятичный эквивалент каждой строки и вставьте ее в BST. Каждый узел BST будет содержать два поля, одно поле для десятичного значения, другое для номера строки. Не вставляйте узел, если он дублирован. Наконец, пройдите BST и напечатайте соответствующие строки.
Временная сложность: O (ROW x COL + ROW x log (ROW))
Вспомогательное пространство: O (ROW)
Этот метод приведет к переполнению целого числа, если количество столбцов велико.
Метод 3 (Использовать структуру данных Trie)
Поскольку матрица является логической, можно использовать вариант структуры данных Trie, где каждый узел будет иметь двух дочерних элементов, один для 0 и другой для 1. Вставьте каждую строку в Trie. Если строка уже есть, не печатайте строку. Если в Trie нет строки, вставьте ее в Trie и распечатайте.
Ниже приведена реализация способа 3.
|
С
|
Выход:
0 1 0 0 1 1 0 1 1 0 1 0 1 0 0
Временная сложность: O (ROW x COL)
Вспомогательное пространство: O (ROW x COL)
Этот метод имеет лучшую временную сложность. Также при печати поддерживается относительный порядок строк.
Метод 4 (Использовать структуру данных HashSet)
В этом методе преобразуйте всю строку в одну строку, а затем проверьте, присутствует ли она в HashSet или нет. Если строка присутствует, то мы оставим ее, в противном случае мы напечатаем уникальную строку и добавим ее в HashSet.
Спасибо, Anshuman Kaushik за предложенный метод.
|
Джава
|
python3
|
C #
|
Выход:
01001 10110 11100
Временная сложность: O (ROW x COL)
Вспомогательное пространство: O (ROW)
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Python | Распечатывать уникальные строки в заданной логической матрице, используя Set с кортежами
- Проверьте, можно ли сделать строки двоичной матрицы уникальными, удалив один столбец
- Поменяйте местами элементы первой и последней строк в матрице
- Удалить первые X строк и столбцов из матрицы
- Найти все переставленные строки данной строки в матрице
- Общие элементы во всех строках данной матрицы
- Подсчитать все отсортированные строки в матрице
- Вопрос о булевой матрице
- Удалите все угловые X строки и столбцы из матрицы
- Найти повторяющиеся строки в двоичной матрице
- Проверьте, все ли строки матрицы являются круговыми вращениями друг друга
- Подсчет строк в матрице, состоящей из одного элемента
- Максимальная разница суммы элементов в двух строках матрицы
- Найти отдельные элементы, общие для всех строк матрицы
- Для булевой матрицы найдите k таким, что все элементы в k-й строке равны 0, а k-й столбец равны 1.
0.00 (0%) 0 votes