![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
tepkuh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
Добрый день уважаемые,
Я вот который час подряд уже бьюсь с эффективным способом перебора массива. Ну никак не выходит что то красивое, помогите плиз. Суть такая: Есть коллекция HashMap<String, Set> Выглядит так: 1->[a,b,c,d] 2->[s,r,h,j,k,l,a,...] 3->[v,x,g,q,a,z,p,a...] 4->[x,f,a,c,e,y...] Длинна ХэшМапа большая, может измеряться сотнями столбцов. Длинна Set измеряется десятками\сотнями позиций. Каждый столбец и каждая позиция используется только один раз, например первая итерация: a+s+y+x Вторая a+s+y+f Третья a+s+y+a и так далее... Если пробую рекурсию ухожу в нехватку стека. Увеличивать стек не вариант ибо не красиво) Памажите идей плиз) |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Не очень понятно, что за алгоритм надо реализовать. Из примера ничего не понял.
Какие столбцы и какие позиции ? Где они ? В Set ? В каждом ? Или в разбивку ? |
|||
|
||||
Sibit |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.10.2009 Где: NSK Репутация: нет Всего: 1 |
Рекурсию на больших объемах данных лучше вообще не использовать, т.к. паять жрет она токо так.
А что в результате получить нужно? |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 5 Всего: 38 |
![]()
Я так думаю хочет написать программку подбора паролей... По-моему, надо милицию вызывать -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
tepkuh |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
Да тут без поллитры не объяснить) Надо просто перебрать все столбцы и строки по сути. У меня массив просто в виде коллекции где строки это коллекция Set, а столбцы это коллекция Map. Т.е. у меня есть таблица определенного количества строк, каждая строка в таблице имеет разное число столбцов, выглядит примерно так:
Так же оговорюсь что таблица это может быть большой и она динамическая(может иметь разное количество строк и столбцов, как большое число строк\столбцов так и малое), настолько большой, что рекурсией перебрать не получится, просто не хватает стека. Т.е. это у нас данные. Перебор данных осуществляется так что берется только одно значение из каждой строки. Показываю свой индус-код, чисто поржать, но ничего умнее не идет.
Добавлено @ 11:35 Вот Вы вроде меня правильно поняли) только это не подбор паролей, у меня в качестве значения каждой ячейки не буковки, а другие объекты. Буковки я написали тут для простоты донесения информации) Это сообщение отредактировал(а) tepkuh - 14.5.2010, 13:08 |
||||||||
|
|||||||||
pathfinder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 2 Всего: 10 |
Почти псевдокод )
|
|||
|
||||
tepkuh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
кхм... думал об этом. У меня размерность таблицы моей может доходить до нескольких тысяч строк вниз, и столько же вправо. Для того чтобы их перегнать(а я так понял их перегонять только циклом) это должен крутануть цикл до нескольких лимонов раз. Только на инициализацию setArray. Мой Индус-код быстрее получится даже имхо так как Вам этот цикл надо крутать дважды(перегнон в setArray) а дальше еще пройтись по каждой ячейки |
|||
|
||||
pathfinder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 2 Всего: 10 |
А если так
|
|||
|
||||
tepkuh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
у меня дает результат 825 вариантов перебора, у вас 155 =). Выпадает чиво то)
Код Ваш с Инициализацией:
Добавлено через 11 минут и 21 секунду +у вас идут повторения переборов) где то ошибка у Вас в коде) Пытаюсь воткнуть что хотели написать)ы Это сообщение отредактировал(а) tepkuh - 14.5.2010, 14:00 |
|||
|
||||
pathfinder |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 2 Всего: 10 |
Для просмотра результата надо подставить
вместо
и вопрос в догонку - при количестве колонок около 1000 и количестве элементов в колонке > 10, разве потребное количество итераций не будет пропорционально 10^1000(или точнее произведению длин колонок)? Это сообщение отредактировал(а) pathfinder - 14.5.2010, 14:14 |
||||
|
|||||
tepkuh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
||||
|
||||
pathfinder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 2 Всего: 10 |
Всегда пожалуйста ) Если вопрос решен тему желательно закрывать.
|
|||
|
||||
tepkuh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
Помечаем что вопрос решен)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |