Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
количество различных элементов массива
|
|||
|---|---|---|---|
|
#18+
Дано: последовательность из n целых чисел, записанная в файл Задача: найти за один проход количество различных элементов без запоминания последовательности в массив. Проблема: насколько я понимаю, массив сначала надо упорядочить по возрастанию или убыванию а потом уже найти количество различных элементов, а вот как найти это количество ЗА ОДИН ПРОХОД?? подскажите плиз ув профессионалы, не сильна в стандартных алгоритмах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2012, 09:31 |
|
||
|
количество различных элементов массива
|
|||
|---|---|---|---|
|
#18+
Создаётся битовая карта размером с макс-значение вашего целого. И добавляет все числа туда. Если добавление - повторное - то то считаете счётчиком количество добавлений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2012, 13:02 |
|
||
|
количество различных элементов массива
|
|||
|---|---|---|---|
|
#18+
1. Что такое битовая карта? как создать скажем для размерности int16? Меня не покидает ощущение что битовая карта - это аналог того же самого массива? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2012, 13:32 |
|
||
|
количество различных элементов массива
|
|||
|---|---|---|---|
|
#18+
Да. Аналог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2012, 13:34 |
|
||
|
количество различных элементов массива
|
|||
|---|---|---|---|
|
#18+
Тогда нарушается условие, что запоминать нельзя те можно задать еще одну переменную где скажем хранить предыдущий элемент ну и количество элементов конечно, но массив нельзя ни в каком виде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2012, 13:52 |
|
||
|
количество различных элементов массива
|
|||
|---|---|---|---|
|
#18+
Mari.PТогда нарушается условие, что запоминать нельзя те можно задать еще одну переменную где скажем хранить предыдущий элемент ну и количество элементов конечно, но массив нельзя ни в каком видеА задача тогда вообще может быть решена? Пусть у нас число состояний программы (т.е. значений всех задействованных переменных) ограничено 2 C (C бит). Возьмём множество файлов, которые до последней строки содержат не более чем C из (C+1) выбранного числа, каждое по одному разу (их 2 C+1 -2 > 2 C , без учёта порядка). Согласно принципу Дирихле, некоторая пара файлов на момент чтения последней строки тогда будет соответствовать одному и тому же внутреннему состоянию программы. Поместим на последнюю строку в обоих файлах одно и то же число, такое, чтобы количество различных чисел в одном и другом файле различалось. Программа в одинаковом состоянии, прочитав одинаковое число, на этих двух файлах должна будет породить одинаковый ответ - но, вместе с тем, ответ должен быть разным. Так что объёма памяти, не зависящего от n, при возможности брать сколь угодно большие числа явно не хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2012, 15:42 |
|
||
|
количество различных элементов массива
|
|||
|---|---|---|---|
|
#18+
Mari.PТогда нарушается условие, что запоминать нельзя Не нарушается. Правильное понимание поставленной задачи - 50% успеха. " без запоминания последовательности в массив " - другими словами без запоминания того что в файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2012, 16:06 |
|
||
|
количество различных элементов массива
|
|||
|---|---|---|---|
|
#18+
OoCcА задача тогда вообще может быть решена? Пусть у нас число состояний программы (т.е. значений всех задействованных переменных) ограничено 2C(C бит). Возьмём множество файлов, которые до последней строки содержат не более чем C из (C+1) выбранного числа, каждое по одному разу (их 2C+1-2 > 2C, без учёта порядка). Согласно принципу Дирихле, некоторая пара файлов на момент чтения последней строки тогда будет соответствовать одному и тому же внутреннему состоянию программы. Поместим на последнюю строку в обоих файлах одно и то же число, такое, чтобы количество различных чисел в одном и другом файле различалось. Программа в одинаковом состоянии, прочитав одинаковое число, на этих двух файлах должна будет породить одинаковый ответ - но, вместе с тем, ответ должен быть разным. Так что объёма памяти, не зависящего от n, при возможности брать сколь угодно большие числа явно не хватит. Так, ну а по простому: есть последовательность в файле 5 3 4 6 7 9 где 5 - это количество элементов, нам разрешается использовать один проход и локальные переменные Как мне количество разных? Мне кажется что просто условие не дописано, если не задан вид последовательности например возрастающая то эту задачу не решить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2012, 16:39 |
|
||
|
количество различных элементов массива
|
|||
|---|---|---|---|
|
#18+
Если числа большие, а последовательности не очень длинные, то можно в std::set складывать. Если числа только 32-bit, то можно через std::vector<bool>, всего-то 256мб памяти займет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2012, 15:26 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38071537&tid=2020603]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
196ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 284ms |
| total: | 572ms |

| 0 / 0 |
