powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / подскажите алгоритм выборки уникальных элементов массива?
14 сообщений из 14, страница 1 из 1
подскажите алгоритм выборки уникальных элементов массива?
    #32333554
D.O.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SUBJ?
Задача - написать метод, принимающий массив и возвращающий массив уникальных элементов, содержащихся в том массиве.
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32333561
прогер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсортируй массив, удали повторы, вуаля.
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32333594
maratka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при этом выполняется лишняя работа по сортировке массива. куда проще организовать хэш-таблицу, в которой элементы будут хранить число элементов массива с данным значением. осталось только подсчитать число элементов таблицы со значениями 1.
имхо.
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32333600
maratka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, а индексом будет как-раз и значение элемента массива.
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32334124
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maratka
Это проходит в явном виде только если элементы массива -- целые неотрицательные числа.
Кроме того, сначала надо определить верхнюю границу хэш-массива, чтобы выделить память, иначе это не будет работать быстро (я прав или нет?). А тогда если в исходном массиве есть хотя бы одно ОЧЕНЬ большое число, то столько памяти или не бывает, или жалко.
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32334567
maratka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Ой Вэй
сразу видно, что ты не применял хэш-таблицы никогда. лучше почитай про них и про хэш-функции. что мешает придумать хэш-ф-ю для дробных чисел? только отсутствие воображения... ну и остальные проблемы отпадут... вуаля.
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32334756
D.O.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делал так:
Цикл по элементам массива, в нём вложенный цикл, внутри которого проверяется количество вхождений каждого элемента (на 2 можно прерывать внутренний цикл).
Те, для которых число вхождений не превышает 1, добавляются в коллекцию типа ArrayList. Дальнше полученный ArrayList преобразуется в массив int, который и возвращается.
Как можно сделать более быстрый алгоритм?
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32334768
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2maratka
Инетерсно
а где по ним инфу можно надыбать ???

Гыыы ты почти земляк ,
да еще и теска
_____________
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32335002
maratka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 D.O.
по-моему (не вникая сильно) так болемене нормально будет. в любом случае, меньше чем 2мя циклами, не обойтись. 1й-перебираем все элементы массива, подсчитываем число вхождений для каждого элемента, 2й - выводим на печать уникальные элементы массива. но это все же быстрее, чем вложенный цикл. так что решать тебе.
2 JibSkeart
думаю, литру можно поискать где-нить в учебниках по информатике, посмотри также Кнута, есть еще хорошая книга "Практика Программирования" 'Керниган, Пайк. ищи в инете по ключевому слову - будешь завален инфой. ))
вообщето я в этой галактике живу )))
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32335772
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maratka
что мешает придумать хэш-ф-ю для дробных чисел?
Я написал "в явном виде". Ты же отвечаешь человеку, который в этом не разбирается, а не просто понтуешься.

Дальше. ну и остальные проблемы отпадут — разве? Пусть числа натуральные, только нерегулярно расположены, например, степени двойки, всего-навсего 32 штуки (1, 2, 4, ..., 2^31). Придётся или хапнуть памяти 2 гигабайта, или анализировать значения в массиве, по-моему там в общем случае понадобится действий примерно столько, сколько на сортировку.
Или у меня опять отсутствие воображения?
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32335867
maratka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты использовал (писал сам) когда-нить хэши или все же нет? сам придумывал хэш-фии?
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32336031
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвечаем вопросом на вопрос? Ну ладно...

Я применял этот приём, когда номерами элементов массива являются элементы другого массива. Но там данные читались из таблицы, и можно было надеяться, что максимальное значение элемента массива не очень сильно отличается от количества элементов (т.е. хэш-функция была тождественной).

Правильный ответ — "не знаю".
И знать не хочу...
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32337180
прогер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маратка не мудри.
Пример:
Строки нужно обработать.
Предположим от 0 до 5000 символов в длинну.
Придумай хорошую хеш функцию, и пожалуйтса,
потрудись подсчитать вероятность совпадения хеш функции
для двух, трех и т.д. РАЗНЫХ строк.
Для полной гарантии несовпадения, результат хеш функции
должен как минимум не понизить мощность исх. сообщения (5000*8 бит).
Потом посчитай объём памяти для хеш таблицы.
...
Рейтинг: 0 / 0
подскажите алгоритм выборки уникальных элементов массива?
    #32338631
maratka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 прогер
попробую ответить-
массив n. тип элементов - любой (пусть даже строка). искомое число уник.элементов - x.
1) твой вариант с сортировкой -
а. сортировка - кол-во вычислений - О(n*log(n)). (сюда включены расходы на сравнение строк - О(n) ит.д.).
б. удаление повторов - n*О(1)=О(n) (цикл по всем элементам массива).
в. вуаля (распечатка уник.элементов) О(n) (еще раз цикл).
итого - О(n*log(n)).

2) вариант с хэш-таблицей-
хэш-функция (стащил у Кернигана, но можно придумать свою, это ничего не меняет): hash=31*hash+str ; (в цикле по всем символам строки). hash %= CONST_NHASH; т.о. размер хэш-массива ограничен CONST_NHASH (выбираем мы). Максимальный размер памяти, отводимый под полную хэш-таблицу будет равен= sizeof(HASH_ELEMENT)*x; (догадайтесь почему - правильно, мы храним только уникальные элементы массива. оказывается не все так страшно!). структуру HASH_ELEMENT предлагаю написать самому. при этом подсчет хэша для строки - О(n) (аналогично, но работаем только с одной строкой).
Вероятность совпадения думаю роли не играет, она влияет только на скорость доступа к элементам таблицы, которая остается как О(1) (берем лучший случай как и с сортировкой).
а. Заполнение хэш таблицы - n*O(n)=О(n) (аналогично).
б. Распечатка уник. элементов O(n).
Итого - O(n).
с числами попроще будет.
Но и с сортировкой массива работать будет, так что решать программисту. имхо.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / подскажите алгоритм выборки уникальных элементов массива?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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