IPB
ЛогинПароль:

> Задача нахождения минимального покрытия
Scorp_Freeman
сообщение 17.01.2008 10:54
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


У меня вот такая проблема(
Я минимизирую булевую функцию методом Квайна-мак-Класки который условно можно поделить да две подзадачи - склеивание наборов до получения пустого и нахождение миним. покрытия.

Так вот первую часть я выполнил, а во второй не могу найти метод, который можно было бы это сделать((. Полный перебор не подходит...

К примеру после решения первой части задачи выходит вот такая таблица покрытий:

__________________________________________

______0110____0010____0101____0001____1000____1101

01х1____________________1_________________________

х101____________________1_______________________1_

011х____1_________________________________________

хх10_____1______1_________________________________


Я хотел попробовать методом Петрика.... но кажется он не так прост для программирования его( может есть какие то попроще, кто знает? ))

Сообщение отредактировано: Scorp_Freeman - 17.01.2008 10:58
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Michael_Rybak
сообщение 18.01.2008 3:34
Сообщение #2


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


А тебе точно не подойдет полный перебор? Для функций четырех переменный его хватит с головой, и писать гораздо меньше.

Почитал про метод Петрика. Дебри, конечно, но ничего смертельного; просто берешь, и так и делаешь, как сказано smile.gif

В чем проблема с представлением таблицы покрытий? Просто булевский двумерный массив (true - если покрывает, false - если нет). А маски представляй, для удобства, в системе счисления с основанием 4: 0 это 0, 1 это 1, 2 это "х", а 3 не используется. Можно было бы в троичной, но с основанием 4 удобнее работать - можно с помощью сдвигов легко манипулировать разрядами.

Или представляй парой чисел - первое с единицами вместо "х", а второе - с единицами вместо "х" и нулями вместо не "х". Например, маску "01х1" представляй парой (0111, 0010). Первое число в паре задает точные биты, а второе говорит, где у нас иксы.

Вообще, можно и обойтись без этой матрицы, и просто на ходу для каждой пары (маска, набор) вычислять, покрывает ли маска этот набор.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Scorp_Freeman   Задача нахождения минимального покрытия   17.01.2008 10:54
Michael_Rybak   насколько я помню наш курс дискретки, лучшее, что ...   17.01.2008 12:09
Гость   Суть такова: В результате выполнения первой подза...   17.01.2008 18:44
Scorp_Freeman   Это я гость)) забыл про авторизацию))))   17.01.2008 18:47
Michael_Rybak   А тебе точно не подойдет полный перебор? Для функц...   18.01.2008 3:34
Scorp_Freeman   А тебе точно не подойдет полный перебор? Для функ...   18.01.2008 15:14
Scorp_Freeman   :) можно попробовать... идея появилась,правда при...   18.01.2008 15:24
Michael_Rybak   Ну и что, что не постоянное? Заводишь массив завед...   18.01.2008 15:16
Michael_Rybak   Повозиться тут определенно придется. Особенно на п...   18.01.2008 15:26
Scorp_Freeman   А чего особенно на паскале? Хотя я все равно буду...   18.01.2008 15:28
Michael_Rybak   Так на с++ векторами гораздо удобнее! Вектор -...   18.01.2008 15:37
Scorp_Freeman   Говоришь векторы)) Посмотрим с чем их едят :good: ...   18.01.2008 15:43
Michael_Rybak   Типа динамических в паскале, но на порядок удобнее...   18.01.2008 15:54


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 2:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"