| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Перебор массива/коллекции |
| Автор: tepkuh 13.5.2010, 16:42 |
| Добрый день уважаемые, Я вот который час подряд уже бьюсь с эффективным способом перебора массива. Ну никак не выходит что то красивое, помогите плиз. Суть такая: Есть коллекция 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 13.5.2010, 18:30 |
| Не очень понятно, что за алгоритм надо реализовать. Из примера ничего не понял. Какие столбцы и какие позиции ? Где они ? В Set ? В каждом ? Или в разбивку ? |
| Автор: Sibit 14.5.2010, 05:51 |
| Рекурсию на больших объемах данных лучше вообще не использовать, т.к. паять жрет она токо так. А что в результате получить нужно? |
| Автор: MisterCleric 14.5.2010, 09:43 | ||
Я так думаю хочет написать программку подбора паролей... По-моему, надо милицию вызывать |
| Автор: tepkuh 14.5.2010, 11:27 | ||||||||
Да тут без поллитры не объяснить) Надо просто перебрать все столбцы и строки по сути. У меня массив просто в виде коллекции где строки это коллекция Set, а столбцы это коллекция Map. Т.е. у меня есть таблица определенного количества строк, каждая строка в таблице имеет разное число столбцов, выглядит примерно так:
Так же оговорюсь что таблица это может быть большой и она динамическая(может иметь разное количество строк и столбцов, как большое число строк\столбцов так и малое), настолько большой, что рекурсией перебрать не получится, просто не хватает стека. Т.е. это у нас данные. Перебор данных осуществляется так что берется только одно значение из каждой строки. Показываю свой индус-код, чисто поржать, но ничего умнее не идет.
Добавлено @ 11:35 Вот Вы вроде меня правильно поняли) только это не подбор паролей, у меня в качестве значения каждой ячейки не буковки, а другие объекты. Буковки я написали тут для простоты донесения информации) |
| Автор: pathfinder 14.5.2010, 12:19 | ||
Почти псевдокод )
|
| Автор: tepkuh 14.5.2010, 12:59 |
кхм... думал об этом. У меня размерность таблицы моей может доходить до нескольких тысяч строк вниз, и столько же вправо. Для того чтобы их перегнать(а я так понял их перегонять только циклом) это должен крутануть цикл до нескольких лимонов раз. Только на инициализацию setArray. Мой Индус-код быстрее получится даже имхо так как Вам этот цикл надо крутать дважды(перегнон в setArray) а дальше еще пройтись по каждой ячейки |
| Автор: pathfinder 14.5.2010, 13:22 | ||
А если так
|
| Автор: tepkuh 14.5.2010, 13:58 | ||
| у меня дает результат 825 вариантов перебора, у вас 155 =). Выпадает чиво то) Код Ваш с Инициализацией:
Добавлено через 11 минут и 21 секунду +у вас идут повторения переборов) где то ошибка у Вас в коде) Пытаюсь воткнуть что хотели написать)ы |
| Автор: pathfinder 14.5.2010, 14:14 | ||||
Для просмотра результата надо подставить
вместо
и вопрос в догонку - при количестве колонок около 1000 и количестве элементов в колонке > 10, разве потребное количество итераций не будет пропорционально 10^1000(или точнее произведению длин колонок)? |
| Автор: tepkuh 14.5.2010, 14:38 |
да, точное произведение длин всех колонок) Итераций много) выйдет. Но это даже хорошо) Чем их больше тем я буду счастливей. Спасибо вам большое действительно все работает) (это у меня не работало))Вы очень очень мне помогли) |
| Автор: pathfinder 14.5.2010, 15:25 |
| Всегда пожалуйста ) Если вопрос решен тему желательно закрывать. |
| Автор: tepkuh 15.5.2010, 11:37 |
| Помечаем что вопрос решен) |