Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачка для умненьких…уникальные сочетания 
:(
    Опции темы
viskar
Дата 9.6.2008, 22:03 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



Здравствуйте…
Заклинило меня на мелочи, но тем не менее никак не могу сообразить...

Имеется n-ое количество строк разной длины, пусть будет массив, например

Str[0] = “ABD”;
Str[1] = “DFGH”;
Str[2] = “KO”;

Результат должен быть
ADK
ADO
AFK
AFO
и т.д. до…
DHO

Цель, составить все варианты уникальных сочетаний символов, из каждой строки берется по 1 символу….
буду очень признателен если кто поможет...



PM MAIL   Вверх
Rififi
Дата 9.6.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



делаешь n вложенных циклов

for(n0 = 0..Str[0].Length-1) 
    for(n1 = 0..Str[1].Length-1)
        for(n2 = 0..Str[2].Length-1)
            print Str[0][n0] Str[1][n1] Str[2][n2] "\n"
PM MAIL   Вверх
viskar
Дата 9.6.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



Цитата(Rififi @ 9.6.2008,  22:13)
делаешь n вложенных циклов

for(n0 = 0..Str[0].Length-1) 
    for(n1 = 0..Str[1].Length-1)
        for(n2 = 0..Str[2].Length-1)
            print Str[0][n0] Str[1][n1] Str[2][n2] "\n"

smile  
не пойдет строк n-ое количество может быть пять а можеть и пять тысяч  
PM MAIL   Вверх
bsa
Дата 9.6.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



viskar, а ты думал? Сделай переменные циклов в динамическом массиве (самая последняя приращается каждый раз (в конце строки обнуляется), предпоследняя приращается только, когда последняя достигла символа конца строки и так далее).
PM   Вверх
v2v
Дата 9.6.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



есть у тебя масив строк:
String Str[n];
вводишь ещё один массив:
int postitions[n][m];

к элементам своей строки будешь обращаться через индекс postitions[n][m].
когда одну строку закончил формировать увеличиваешь последний postitions[n][m] на 1, если postitions[n][m]>Str[n].len , тогда предпоследний увеличиваешь на 1 и т.д....

Добавлено через 55 секунд
м-да , пока набирал bsa уже ответил.


--------------------
PM   Вверх
viskar
Дата 9.6.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



всем спасибо...
наверное эту задачу я решу не сегодня......
PM MAIL   Вверх
Mim
Дата 10.6.2008, 14:44 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.5.2008

Репутация: нет
Всего: нет



Цитата(viskar @ 9.6.2008,  22:20)
smile  
не пойдет строк n-ое количество может быть пять а можеть и пять тысяч

Не хотелось бы Вас расстраивать, но с такими запросами не справится и IBM Roadrunner. Для начала я бы предложил посчитал количество возможных уникальных сочетаний. Для более простого понимания, возьмём массив, в котором все строки имеют длину, равную m. Количество сочетаний будет равняться m^n (m в степени n). Так, например, для 30 строк, состоящих всего лишь из 2 символов каждая Вы получите 2^30=1 073 741 824 сочетаний по 30 символов, итого 30 GiB информации (из рассчёта 1 байт на 1 символ), которую, как я понимаю, надо будет как-то сохранить. При 31, 32 и 33 строках (опять же по 2 символа) вы получите 62, 128 и 264 GiB соответственно. У Вас сложность и объём выходных данных растёт экспоненциально, так что стоит подумать о разумных ограничениях в данной задаче. Я бы не рекомендовал использовать строки более 8 символов и массивы более 8 строк.

Насколько я понимаю, нахождение всех уникальных сочетаний лишь подзадача. Если так, то можно ли привести задачу целиком? Возможно удалось бы избежать необходимости полного перебора.

Это сообщение отредактировал(а) Mim - 10.6.2008, 15:29
PM MAIL   Вверх
CppDevelopeR
Дата 10.6.2008, 16:15 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



А вообще для таких тем есть "Центр Помощи".


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0640 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.