powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / количество различных элементов массива
10 сообщений из 10, страница 1 из 1
количество различных элементов массива
    #38070795
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: последовательность из n целых чисел, записанная в файл

Задача: найти за один проход количество различных элементов без запоминания последовательности в массив.

Проблема: насколько я понимаю, массив сначала надо упорядочить по возрастанию или убыванию а потом уже найти количество различных элементов, а вот как найти это количество ЗА ОДИН ПРОХОД??

подскажите плиз ув профессионалы, не сильна в стандартных алгоритмах.
...
Рейтинг: 0 / 0
количество различных элементов массива
    #38070869
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаётся битовая карта размером с макс-значение вашего целого. И добавляет все числа туда.
Если добавление - повторное - то то считаете счётчиком количество добавлений.
...
Рейтинг: 0 / 0
количество различных элементов массива
    #38070902
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Что такое битовая карта?
как создать скажем для размерности int16?

Меня не покидает ощущение что битовая карта - это аналог того же самого массива?
...
Рейтинг: 0 / 0
количество различных элементов массива
    #38070905
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Аналог.
...
Рейтинг: 0 / 0
количество различных элементов массива
    #38070921
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда нарушается условие, что запоминать нельзя
те можно задать еще одну переменную где скажем хранить предыдущий элемент
ну и количество элементов конечно, но массив нельзя ни в каком виде
...
Рейтинг: 0 / 0
количество различных элементов массива
    #38071001
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.PТогда нарушается условие, что запоминать нельзя
те можно задать еще одну переменную где скажем хранить предыдущий элемент
ну и количество элементов конечно, но массив нельзя ни в каком видеА задача тогда вообще может быть решена? Пусть у нас число состояний программы (т.е. значений всех задействованных переменных) ограничено 2 C (C бит). Возьмём множество файлов, которые до последней строки содержат не более чем C из (C+1) выбранного числа, каждое по одному разу (их 2 C+1 -2 > 2 C , без учёта порядка). Согласно принципу Дирихле, некоторая пара файлов на момент чтения последней строки тогда будет соответствовать одному и тому же внутреннему состоянию программы. Поместим на последнюю строку в обоих файлах одно и то же число, такое, чтобы количество различных чисел в одном и другом файле различалось. Программа в одинаковом состоянии, прочитав одинаковое число, на этих двух файлах должна будет породить одинаковый ответ - но, вместе с тем, ответ должен быть разным.
Так что объёма памяти, не зависящего от n, при возможности брать сколь угодно большие числа явно не хватит.
...
Рейтинг: 0 / 0
количество различных элементов массива
    #38071018
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.PТогда нарушается условие, что запоминать нельзя
Не нарушается. Правильное понимание поставленной задачи - 50% успеха.

" без запоминания последовательности в массив " - другими словами без запоминания того что в файле.
...
Рейтинг: 0 / 0
количество различных элементов массива
    #38071038
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcА задача тогда вообще может быть решена? Пусть у нас число состояний программы (т.е. значений всех задействованных переменных) ограничено 2C(C бит). Возьмём множество файлов, которые до последней строки содержат не более чем C из (C+1) выбранного числа, каждое по одному разу (их 2C+1-2 > 2C, без учёта порядка). Согласно принципу Дирихле, некоторая пара файлов на момент чтения последней строки тогда будет соответствовать одному и тому же внутреннему состоянию программы. Поместим на последнюю строку в обоих файлах одно и то же число, такое, чтобы количество различных чисел в одном и другом файле различалось. Программа в одинаковом состоянии, прочитав одинаковое число, на этих двух файлах должна будет породить одинаковый ответ - но, вместе с тем, ответ должен быть разным.
Так что объёма памяти, не зависящего от n, при возможности брать сколь угодно большие числа явно не хватит.

Так, ну а по простому:
есть последовательность в файле
5 3 4 6 7 9 где 5 - это количество элементов, нам разрешается использовать один проход и локальные переменные

Как мне количество разных? Мне кажется что просто условие не дописано, если не задан вид последовательности например
возрастающая то эту задачу не решить...
...
Рейтинг: 0 / 0
количество различных элементов массива
    #38071537
kamre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если числа большие, а последовательности не очень длинные, то можно в std::set складывать. Если числа только 32-bit, то можно через std::vector<bool>, всего-то 256мб памяти займет.
...
Рейтинг: 0 / 0
количество различных элементов массива
    #38071555
Gwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.P,
-упорядочиваем массив
-Число разных элементов N=1
-берём второй элемент массива
Если он не равен предыдущему N++, иначе переходим с следующему элементу массива
и так до конца
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / количество различных элементов массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]