|
19 / 19 / 4
Регистрация: 22.03.2009
Сообщений: 57
|
|
Найти минимальное подмножество отрезков, объединение которых покрывает заданный отрезок17.10.2009, 12:23. Показов 6635. Ответов 10
Метки нет (Все метки)
всем привет!
помогите мне решить одну задачу: написать программу. которая для множества заданных отрезков находит минимальное подмножество отрезков. объединение которых покрывает отрезок S=[0,10000]. число отрезков и координаты их концов заданы на входе. Все координаты целочисленные.
0
|
|
| 17.10.2009, 12:23 | |
|
Ответы с готовыми решениями:
10
|
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
|
| 17.10.2009, 12:34 | |
|
ну так ты начни, хотя бы ввод данных сделай. ошибки поправим, алгоритм обсудим
0
|
|
|
19 / 19 / 4
Регистрация: 22.03.2009
Сообщений: 57
|
|
| 17.10.2009, 13:44 [ТС] | |
|
вот алгоритм:
покрывайте отрезок S пошагово. двигаясь слева направо. на каждом шаге будет непокрытая часть [x, 10000] . из оставшихся отрезков выбирайте тот, который урежет непокрытую часть до [y, 10000], где "y" максимальное.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 17.10.2009, 13:58 | |
|
Приехали.
Во-первых, надо найти длины всех отрезков (Например: 34, 567, 21, 457, 432, 45, 543, 10,) Во-вторых, их надо отсортировать по убыванию (567, 543, 457, 432, 45, 34, 21, 10) А потом начинай с самого левого члена этой последовательности и сравнивай его с 10000. Если он меньше, то прибавляй следующий член, сумму снова сравнивай с 10000. Одновременно инкременируй счётчик отрезков Как только сумма станет больше или равной 10000, значит ты нашёл искомые отрезки. Величина счётчика и есть их минимальное число. Привет.
1
|
|
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
||||||
| 17.10.2009, 16:12 | ||||||
|
пробуем, тестим.
ввод через фаил (в файле только пары (начало и конец) отрезков) ввод организовал как мне удобно, а не по условию на вывод отладки можно не заморачиваться, главное это результат а промежуточный вывод для удобства const int begDiapason = 0; const int endDiapason = 100; - границы диапазона
1
|
||||||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
||
| 17.10.2009, 22:37 | ||
Добавлено через 2 минуты Если перебирать тупо, то будет очень много вариантов: 2^N, где N - число отрезков. А вообще эта задача решается методом динамического программирования. TanT уже должен сообразить как
0
|
||
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
||
| 17.10.2009, 22:43 | ||
|
как не прискорбно мне это принимать, но я не совсем понял/оценил предложенный вами вариант. предлагаю попробовать снова осветить вопрос динамического программирования, что, несомненно, будет полезно всем остальным участникам или прям, не стеснясь, вот так ссылкой на источник отправить меня учить мат.часть. я даже не обижусь.
0
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||
| 17.10.2009, 23:14 | ||
|
Там вызывает непонимание такая фраза: "объединение которых покрывает отрезок S=[0,10000]" Ну, я предположил что речь идёт о ""Сумма длин которых покрывает отрезок S=[0,10000]" Ну то есть сумма длин которых превышает 10000. Вот и складываю помаленечку себе. Теперь о "тупо перебирать" Не знаю, где Вы увидели два в энной степени, но не у меня, факт. Мой вариант предполагает n вариантов. То есть если отрезков 10, то 10 длин рассматриваем и всё. А не 2 в степени 10 Естественно, отсортировав прежде массив этих самых длин. Задекларирую свой способ как оптимальный. Кто может предложить лучше- пусть предложит. Только чур, умных рож не делать и пыль в глаза не пускать и завесу из слов непонятных не создавать. Говорить чисто и честно, дабы дурь каждого была видна, как говорил Пётр Первый. Короче, Пафнутий, не говори красиво. На крайняк голимый код. Но с комментариями. Привет.
0
|
||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
||
| 18.10.2009, 19:14 | ||
|
2kravam:
В условии написано: "число отрезков и координаты их концов заданы на входе". Если нужна только длина отрезков, то зачем еще координаты концов ? И зачем тогда указывать что покрыть нужно именно от 0 до 10000 ? Ты неправильно понял задачу. Нужно покрывать отрезками, но сами отрезки сдвигать никуда нельзя. Если отрезок от 100 до 200, то это значит что он покрывает от 100 до 200 и в другое место его не сдвинуть.
0
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 18.10.2009, 21:09 | |
|
Я ничё не понял.
Меня термин покрыть добивает. Не знаю, что он обозначает. Пусть автор сам решает такие задачи.
0
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 19.10.2009, 12:09 | |
|
Покрыть - это значит накрыть каждую точку диапазона своим отрезком сверху.
Но отрезки можно класть только на те позиции которые указаны для них. То есть сдвигать отрезок влево или вправо нельзя.
0
|
|
| 19.10.2009, 12:09 | |
|
Помогаю со студенческими работами здесь
11
Определить номера элементов матрицы, значения которых попадают в заданный отрезок Найти минимальное подмножество вершин взвешенного графа С клавиатуры вводятся два числа задающие отрезок [a, b]. Определить, попадает ли третье число c в заданный отрезок
Дано множество отрезков, найти max объединение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|