Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Формирование подмножеств на с++

Ответить
Настройки темы
C/C++ - Формирование подмножеств на с++

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!

Перед сдачей экзамена возникла такая задача:
Дан массив произвольных элементов(Пусть для определенности массив типа int)
Нужно выделить из массива все подмассивы(исключая нулевой) всех размеров.

Предполагается использование union, в котором будет записано целове число и массив.
Каким-то образом изменяя целое число, будем изменять в нем биты так, чтобы получились все подмножества.

Получившиеся подмассивы вывести на экран.

Заранее спасибо, очень надеюсь на Вашу помощь.

Отправлено: 22:04, 22-06-2010

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата Remisto:
Предполагается использование union, в котором будет записано целове число и массив.
Каким-то образом изменяя целое число, будем изменять в нем биты так, чтобы получились все подмножества. »
вот не понял идеи про юнион. Про увеличение целого понял. Но что делать, если массив из 65 элементов?

Предлагаю усовершенствовать так: пусть есть начальный массив A. Задать массив из булевских переменных B такого же размера как A, который отражает наши биты.
1) реализовать операцию ++B (увеличение на единицу числа, представленного "битами" B)
2) реализовать операцию unsigned sparse_array(A,B,C), которая заполняет массив C так: если бит B[i] установлен, значит надо в C добавить A[i].
3) вывести C на экран
4) скакать циклом в шаг 1 пока все биты B не установятся в true.

Можно упаковать биты B в байты (по 8 штук), но это упростит одну операцию ++ ничего не упростит, а усложнит sparse_array и понимание программы. Сэкономленной памятью тоже можно пожертвовать в сторону понимания.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:02, 22-06-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Идею понял, спасибо.

Но мне не совсем понятно, как реализовать union.
Точнее понятен принцип, но нет полного понимания

Когда мы увеличиваем цисло B на еденицу, в двоичном предствалении тоже добавится только еденица?

Мне без разницы, какое будет число B? Вначале я должен задать не его, а заполнить массив нулями?

Цикл выполнять до тех пор, пока количество true-битов не станет равным размеру массива A?

Заранее спасибо!

Отправлено: 12:11, 23-06-2010 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата Remisto:
Но мне не совсем понятно, как реализовать union.»
зачем? предлагаю не делать union
Цитата Remisto:
Когда мы увеличиваем цисло B на еденицу, в двоичном предствалении тоже добавится только еденица? »
работаем как бы с двоичным числом. Например {false,false,true,false} - это аналог 2 (0b00....00000010)
Цитата Remisto:
Мне без разницы, какое будет число B? Вначале я должен задать не его, а заполнить массив нулями? »
нужно перебрать все их. В начале понятней выбрать нули {false,false,false,...} (0b00000000...00)
Цитата Remisto:
Цикл выполнять до тех пор, пока количество true-битов не станет равным размеру массива A? »
ну да, другими словами все биты станут {true,true,true...} (0b11111111...11)

Отправлено: 22:51, 24-06-2010 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Формирование подмножеств на с++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Debian/Ubuntu - sarg+squid формирование статистики в автоматическом режиме Anatoliy2004 Общий по Linux 17 21-09-2009 13:11
CMD/BAT - [решено] Формирование списка. somes Скриптовые языки администрирования Windows 7 13-04-2009 10:21
Прочие БД - Страница доступа Access 2003. Как создать кнопку на формирование запроса? tarasov.evgeny Программирование и базы данных 5 05-02-2009 01:55
[решено] Формирование списка программ в системном трее koles Microsoft Windows 2000/XP 1 02-12-2006 22:47
Формирование матрицы Sergey Po Программирование и базы данных 3 28-04-2004 04:47




 
Переход