Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где достать алгоритм минимизации булевой функции, методом карт Карно. 
:(
    Опции темы
neutrino
Дата 11.6.2003, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Приветствую!

Не могли бы вы подсказать какой-нибудь ресурс, где можно достать алгоритм (программу), реализующий минимизацию булевой функции методом карт Карно.
Буду очень признателен за любой Ваш ответ.

Ваш покойный слуга smile.gif.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
akul
Дата 12.6.2003, 14:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ить Карты Карно - это для человека метод, графически-визуальный, чтобы удобнее было. Машинный метод - это построить дерево и применять к нему упрощающие подстановки рекурсивно, пока применяются.
  Вверх
neutrino
Дата 12.6.2003, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Я все понимаю. Сам алгоритм составить могу, но времени нет. Вот я и спрашиваю Где достать а не Как сделать.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
stab
Дата 14.6.2003, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



слушай, я тут нашел курсовик свой давнишний, чего-там про метод КМК ... не помню чего это, но кажется что-то близкое по теме, если надо могу выслать


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 14.6.2003, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



ага, вот еще... там про импликанты и про кубы разные упоминается


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
neutrino
Дата 18.6.2003, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Ой, давай, давай...
Кубы? Это если количество булевых переменных больше 4-х....


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
<Spawn>
Дата 19.6.2003, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



http://www.etel.dn.ua/~shurik/carno

Если сайт не будет активным, то могу выслать прогу на мыло smile.gif


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
stab
Дата 20.6.2003, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



neutrino выслал


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
dm9
Дата 21.6.2003, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


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

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



Как обычно, открываем Апорт. Делаем запрос "минимизация булевой функции методом карт Карно".

http://kai4x03.narod.ru/files/files.html

Правда, ссылка, которая на страничке, у меня не работает. Но можно связаться с автором...
PM MAIL ICQ   Вверх
Zeriod
Дата 12.7.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помню когда-то давным давно (3 года назад) писал диплом. Одним из его пунктов было "создание алгоритма минимизации булевых функций". Метод был изобретён свой, адаптированный под вычислительные машины. Критерий минимизации - минимум операций. Базис: дизъюнкция, конъюнкция, отрицание и сложение по модулю два. Число булевых переменных и сложность функций - любая. Язык программирования quick basic.

Есть исходники. Но хотелось бы переписать прогу на что-нибудь современное (C#, C++, php или delphi).
У самого времени нет этим заниматься. Если кому интересно, могу выслать код (ICQ: 459-783-892).
PM MAIL ICQ YIM   Вверх
Scorp_Freeman
Дата 16.1.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет! Помогите плиз)) Я тоже с этим столкнулся) только я не сс картами карно , а с Квайном)) Помжет кто нить чемто помочь? Интересует алгоритм (поиск покрытий)
PM MAIL   Вверх
Dude03
Дата 19.1.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Zeriod @  12.7.2007,  14:15 Найти цитируемый пост)
Базис: дизъюнкция, конъюнкция, отрицание и сложение по модулю два. 


конъюнкция - *
дизъюнкция - +
отрицание - !
сложение по модулю два - (+)

В итоге: 

x1 (+) x2 = ((!x1) * x2) + (x1 * (!x2))

Скобки расставил для того чтобы не задавать приоритеты.

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

Это сообщение отредактировал(а) Dude03 - 21.1.2008, 13:10
PM MAIL   Вверх
AndreyK
Дата 29.1.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Надо исключить лишние операторы (дизьюнкцию и отрицание или сложение) и получишь одно из представлений: полином Жигалкина или совершенную дизъюнктивную нормальную форму (ДНф) - вот там базисы и ищи.


Это сообщение отредактировал(а) AndreyK - 29.1.2008, 17:09
PM MAIL   Вверх
Дамаскин
Дата 21.11.2008, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Наверно, не  совсем то, что Вам нужно, но может пригодиться.

 Минимизация булевых функций по совпадению множеств

В  "Представление информации булевой формулой" ( http://moiidei.com/nauka-estestvennyie/pre...formuloy-2.html ) уже упоминалось, что одной из проблем представления информации булевой формулой является проблема формирования формулы по крайней мере с минимальным числом букв в ней.
Эта  проблема часто стоит и перед разработчиками логических схем для различных устройств, включая  конечные  автоматы и микросхемы для компьтеров. Ведь  число букв в формуле булевой функции, реализуемой логической схемой, определяет число элементов в схеме.

"Существуют несколько  способов минимизации булевых функций.Прежде всего,это аналитический 
символьный и аналитический кодовый методы,метод Квайна  -  Мак-Класки,метод  
Блека  -  Порецкого, метод обобщенных  кодов[11]  и  графическая  минимизация с помощью 
карт Карно[12].
Пример для демонстрации аналитических методов:
z = x_y+xy_+xy = (x_y+xy)+(xy_+xy) = y(x_+x) + x(y_+y) = x+y.
z = 01+10+11 = (01+11)+(10+11) = -1+1- = x+y.
Первые четыре метода чрезвычайно громоздки и  малоэффективны уже при количестве аргументов 
более четырёх. Метод обобщенных кодов  ориентирован  на  использование ЭВМ,однако может 
использоваться и при ручном синтезе для функций от большого числа  переменных."
(http://ruslogic.narod.ru/lectures/3.htm )


         Я бы  добавил  к этому высказыванию несколько субъективных замечений.
1. Большинство методов  фактически минимизируют  функцию только на уровне ДНФ (дизъюнктивной нормальной формы), т.е. в отсутствии скобок, которые то и дают реальное уменьшение числа букв в формуле.
2. Сокращение числа букв осуществляется по правилам булевой алгебры (метод Блейка) и зависит от от вашего опыта.
(http://www.sgu.ru/ie/mehmat/odfka/r3/R3-1.htm)
3. Практически нет гарантий, что полученная  формула, если она достаточно сложна, является  минимальной, что её нельзя сократить ещё.
  Я в своё время принимал участие в разработке автоматических устройств (в теории - конечные автоматы)  для ракетной техники, и могу сказать, что большинство проектировщиков составляли схемы устройств, руководствуясь не столько теорией, сколько здравым смыслом.  Я думаю, это происходило потому, что  теория  достаточно сложна и недостаточно проработана для практического применения.
          Идеи, которые я хочу здесь представить, зародились именно в те времена.
                                                         Суть метода
     Коротко,  суть предлагаемого метода заключается в следующем.
На основании таблицы истинности, которая, как правило, является основой проектирования логической схемы, для искомой функции составляется множество из нулей и единиц.  Множество разбивается на определённое число пар взаимнонепересекающихся подмножеств. Число пар равно числу входных переменных, и каждой паре сответствует  пара букв, одна из которых обозначает переменную, а вторая её отрицание.  Задача сводится к тому, чтобы на этом множестве сформировать множество, которое включает только единицы. Формула этого множества как раз и будет искомой функцией. Формирование множества осуществляется посредством пошаговой процедуры, на каждом шаге которой в формулу множества добавляется одна буква таким образом, чтобы полученное множество имело наибольшее совпадение с искомым множеством, т.е. имело бы как можно больше единиц и как можно меньше нулей. Величина совпадения определяется как sov = s1(i)/s1 - s0(i)/s0, где s1 и s0 - число единиц и нулей в исходном множестве, а s1(i) и s0(i) - соответственно число единиц и нулей в множестве,  полученном на i - том шаге. Так как на каждом шаге в формулу добавляется только одна буква, то на каждом i  - том шаге мы будем получать формулу из  минимального числа i  букв, определяющей множество с максимальным совпадением. Процедура будет закончена, когда будет получено множество с совпадением sov(i) =1. Формула будет иметь i букв.

                                                          Результаты
Предлагаемый  метод был применён при определения системы функций для реализаций логической сети "Мышь в лабиринте" , синтез которых приведен в книге "Н.Е. Кобринский и Б.А. Трахтенброт   Введение в теорию конечных автоматов. 1962 г."  Всего надо найти 5 функций z1, z2, f1(t+1), f2(t+1), f3(t+1) от 5 переменных  x1, x2, f1(t), f2(t), f3(t) , каждая из которых задаётся таблицей истинности.  Таблица истинности для всех пяти функций приведена на Рис. 1. Таблица взята из упомянутой книги с некоторыми корректировками для удобства записи.

                                       Таблица истинности для системы функций "Мышь в лабиринте"
   
№стр.     код  входа        код входного состояния    код выхода      код выходного состояния
                              ---------------       ----------------------------------    ----------------      ------------------------------------
            № кол    1      2                 3           4            5                 6        7                8           9             10

                       x1     x2              f1(t)       f2(t)       f3(t)              z1      z2            f1(t+1)   f2(t+1)       f3(t+1)
            0           0       0                0            0            0                 0        0                 0          1              0
            1           0       0                0            0            1                 1        0                 0          0              0
            2           0       0                0            1            0                 1        0                 0          0              0
            3           0       0                0            1            1                 1        0                 0          0              0
            4           0       0                1            0            0                 1        0                 0          0              0
            5           0       0                1            0            1                 1        0                 0          0              0     
            6           0       0                1            1            0                 1        0                 0          0              0
            7           0       0                1            1            1                (1)      (0)               (0)        (0)            (0)
            8           0       1                0            0            0                 0        1                 1          1              0
            9           0       1                0            0            1                 0        0                 1          1              0
          10           0       1                0            1            0                 0        0                 1          1              0
          11           0       1                0            1            1                 0        0                 1          0              1
          12           0        1                1            0            0                 1        0                 0          1              1
          13           0        1                1            0            1                (1)      (0)               (0)        (1)            (1)
          14           0        1                1            1            0                 1        0                 0          1              1
          15           0        1                1            1            1                (1)      (0)               (0)        (1)            (1)
          16           1        0                0            0            0                 0        0                 0          0              1
          17           1        0                0            0            1                 0        0                 1          1              0
          18           1        0                0            1            0                 0        1                 1          1              0
          19           1        0                0            1            1                 0        0                 1          0              0
          20           1        0                1            0            0                 1        1                 1          1              1
          21           1        0                1            0            1                 0        1                 1          1              0
          22           1        0                1            1            0                (1)      (1)               (1)        (1)            (1)           
          23           1        0                1            1            1                  1       1                 1          1              1   
          24           1        1                0            0            0                  1       1                 1          1              1
          25           1        1                0            0            1                 (1)    (1)               ( 1)        (1)            (1)
          26           1        1                0            1            0                 (1)    (1)               ( 1)        (1)            (1)                 
          27           1        1                0            1            1                 (1)    (1)               ( 1)        (1)            (1)
          28           1        1                1            0            0                 (1)    (1)               ( 1)        (1)            (1)
          29           1        1                1            0            1                 (1)    (1)               ( 1)        (1)            (1)
          30           1        1                1            1            0                 (1)    (1)               ( 1)        (1)            (1)
          31           1        1                1            1            1                  1       1                 1          1              1
     
                                                                                     Рис. 1

    Для этой таблицы истинности в книге методом графов была найдена следующая система уравнений
для пяти функций, реализующих автомат "Мышь в лабиринте" . 

                                                     Система уравнений  1   

     z1 = -x1{-x2[f2(t) + f3(t)] + f1(t)} + x1{f1(t)[f2(t) + -f3(t)] + x2}                                                    (1)    10

     z2 = x2[-f1(t)-f2(t)-f3(t) + x1] + x1[f2(t)-f3(t) + f1(t)]                                                                   (2)      9

      f1(t+1) = x2[x1 + -f1(t)] + x1[f1(t) + f2(t) + f3(t)]                                                                       (3)      7

      f2(t+1) = -x1{x2[f1(t) + -f2(t) + -f3(t)] + -f1(t)-f2(t)-f3(t)} + x1[x2 + f1(t)+ -f2(t)f3(t) + f2(t)-f3(t)]         (4)    15

      f3(t+1) = -x1{x2[f2(t)f3(t) + f1(t)]} + x1{-f2(t)-f3(t) + f1(t)[f2(t)+f3(t)] +x2}                                       (5)    12

  Цифры, приведенные в конце каждой строки с формулами (1) - (5) показывают число  букв (входных переменных) в 
каждой формуле   

     С помощью предлагаемого метода была получена
 Система уравнений 2

     z1 = f1(t)[-f3(t)+f2(t)] + -x1-x2[f2(t)+f3(t)] + x2x1                                                                     (6)      9

     z2 = x1{f1(t)+ -f3(t)[x2+f2(t)]} + x2-f2(t)-f1(t)-f3(t)                                                                     (7)      9

      f1(t+1) = x1[f1(t)+f3(t)+f2(t)] + x2-f1(t)                                                                                   (8)      6
 
      f2(t+1) = [x2+x1]{f1(t) + [-f2(t)+ -f3(t)][x2+f3(t)+f2(t)]} + -f2-f1-x1-f3                                            (9)     12

      f3(t+1) =  x2[f1(t)+f2(t)f3(t)] + x1[-f3(t)-f2(t)+f1(t)f2(t)]                                                               (10)      9

В этой системе уравнений (6) - (10), как и в системе уравнений 1 (1) - (5), цифры в конце строк показывают
число букв в каждой формуле.     В четырёх формулах из пяти предлагаемый метод позволил сократить число
букв. Общее число букв сократилось с  53 до 45.
        
Подробнее:
 http://obdamaskin.livejournal.com/4035.html  
или                           
http://moiidei.com/nauka-estestvennyie/min...-mnozhestv.html
  

PM MAIL   Вверх
sNicker
Дата 22.11.2008, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



<Spawn>, если не трудно и не стёр ешё програмку, может и мне пришлёш? smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


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

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


 




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


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

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