Комп’ютерне подання множин

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2017
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Методи і системи штучного інтелекту

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІСЬКА ПОЛІТЕХНІКА» Кафедра ІСМ Звіт До лабораторної роботи №1 З дисципліни: «Методи та системи штучного інтелекту» На тему: «Комп’ютерне подання множин» Львів-2017 Мета роботи: полягає у вивченні способів комп’ютерного представлення множин та виконання комп’ютерних операцій над ними. Теоретичні відомості Існують різні способи зображення множин у комп’ютері. Один із способів – залишати елементи множини у невпорядкованому вигляді. Проте, якщо так зробити, то операції із множинами вимагатимуть значних витрат часу через необхідність щоразу здійснювати перегляд елементів. Ми розглянемо інший спосіб зображення множин у комп’ютері. Упорядкуємо довільним способом елементи універсальної множини. Нехай універсальна множина U містить n елементів. Тоді { } 1 2 3 1 , , ,..., , n n U a a a a a - = . Підмножина AÌU зображатиметься у комп’ютері бітовим рядком, що складається із 0 та 1 та має довжину n , де i -й біт цього рядка дорівнює 1, якщо a A i Î , та дорівнює 0, якщо a A i Ï . Якщо універсальна множина U дуже велика (або нескінченна), а підмножини універсальної множини, які розглядаються, не дуже великі, то зображення з допомогою бітових рядків не є ефективним з точки зору витрат пам’яті. У такому випадку для зображення множин доцільно використовувати інші методи та структури даних. Типові постановки задач класифікації. Задача ідентифікації, яка полягає у тому, щоб вирізнити певний конкретний об'єкт серед йому подібних (наприклад, впізнати серед інших людей свою дружину). Віднесення об'єкта до того чи іншого класу. Це може бути, наприклад, задача розпізнавання літер або прийняття рішення про наявність дефекту у деякій технічній деталі. Віднесення об'єкта до певного класу відображає найтиповішу проблему класифікації, і, коли говорять про розпізнавання образів, найчастіше мають на увазі саме цю проблему. Саме вона розглядається тут у першу чергу. Кластерний аналіз, який полягає в розділенні заданого набору об'єктів на класи — групи об'єктів, схожі між собою за тим чи іншим критерієм. Цю задачу часто називають класифікацією без учителя, оскільки, класи апріорно не задані. Проблеми розпізнавання легко вирішуються людьми, причому, робиться це, як правило, підсвідомо. Однак, спроби побудувати штучні системи розпізнавання не настільки переконливі. Основна проблема полягає у тому, що у більшості випадків неможливо адекватно визначити ознаки, на основі яких слід здійснювати розпізнавання. Для задач, для яких такі ознаки вдається виділити, штучні системи розпізнавання набули значного поширення і широко використовуються. Правила термінів силогізму. З істинних засновків не завжди можна отримати істинні висновки. Для його істинності необхідно ще дотримання загальних правил категоричного силогізму. Існують сім загальних правил силогізму: три з них відносяться до термінів і чотири - до засновків. Розглянемо правила термінів силогізму: У даному силогізмі повинно бути тільки три терміни. Вивід в силогізмі грунтується на відношенні двох крайніх термінів, тому він повинен мати тільки три терміни. Порушення цього правила пов'язане з явищем багатозначності слів, коли середній термін в одному засновку має одне значення, а в іншому - інше значення. Така помилка є порушенням вимог закону тотожності і називається подвоєнням терміну. У другому засновку під словом "штамп" розуміють вираз, який перетворився на загальне, позбавлене смислу твердження. У результаті порушення зв'язку між крайніми термінами виникає позбавлений змісту висновок. Середній термін повинен бути розподіленим принаймні в одному із засновків. Якщо середній термін (М) не розподілений у жодному із засновків, то зв'язок між крайніми термінами буде невизначеним. Якщо крайній термін не розподілений у засновку, то він не повинен бути розподілений і в висновку (і навпаки). Метод Штірліца шифрування інформації. У відправника і одержувача були однакові книги. Коли потрібно було відправити повідомлення то повідомлення шифрувалася за допомогою цієї книги наступним чином. У книзі знаходився потрібний символ який потрібно було передати і вказувалася сторінка, строчки і порядковий номер потрібного символу. Таким чином книга виступала в якості ключа. Завдання лабораторної роботи: Написати програму, яка дозволяє розв’язувати наступну задачу. Реалізувати операції A , AB , AB , A\ B , B \ A представленням заданих множин A та B , які є підмножинами n - елементної універсальної множини. З допомогою бітових рядків виконати обчислення складних виразів з множинами. Для обчислення складних виразів з множинами використати побудовані операції. Примітка. Для спрощення дій з множинами, пропонується написати програму таким чином, щоб виконувати по одній дії у послідовності, визначеній способом запису виразу з множинами. Наприклад, для знаходження значення виразу A\ ABC, пропонується провести обчислення послідовно у три етапи, а саме: Спочатку обчислити перетин множин K BC Виконати другу дію, об’єднання множин, наступним способом M AK Отримати результат як різницю множин R A\M . Таким чином, повинен бути реалізований своєрідний спеціалізований «калькулятор» для виконання дій з множинами. Розглянути як тестові приклади обчислення таких виразів: A\ ABC. A\ BB \C. A\ BB \CC \ A A\ BB \C. A\ BB \C. A\ BB \C. Результати виконання роботи: package PHSHI.Lab1; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Sets { static TextField jtf1; static TextField jtf2; static TextField jtf3; static TextField jtf4; static TextField jtf5; static TextField jtf6; static TextField jtf7; public static void main(String[] args) { Lister2 l2=new Lister2(); Lister lst=new Lister(); JFrame jf = new JFrame("Lab1"); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(450, 350); jf.setVisible(true); jf.setLayout(null); jf.setResizable(false); Label jl1=new Label("Множина А"); Label jl2=new Label("Множина В"); Label jl3=new Label("Множина U"); Label jl4=new Label("Бітове А"); Label jl5=new Label("Бітове B"); Label jl6=new Label("Введіть вираз"); Label jl7=new Label("Результат"); jtf1 =new TextField(); jtf2=new TextField(); jtf3=new TextField(); jtf4=new TextField(); jtf5=new TextField(); jtf6=new TextField(); jtf7=new TextField(); Button jb2=new Button("Обчислити"); jb2.setBounds(120,180,100,30); jb2.addActionListener(l2); Button jb1=new Button("Згенерувати"); jb1.setBounds(230,110,100,30); jb1.addActionListener(lst); jl1.setBounds(10,10,100,30); jl2.setBounds(120,10,100,30); jl3.setBounds(230,10,100,30); jl4.setBounds(10,80,100,30); jl5.setBounds(120,80,100,30); jl6.setBounds(10,150,100,30); jl7.setBounds(230,150,100,30); jtf1.setBounds(10,40,100,30); jtf2.setBounds(120,40,100,30); jtf3.setBounds(230,40,100,30); jtf4.setBounds(10,110,100,30); jtf5.setBounds(120,110,100,30); jtf6.setBounds(10,180,100,30); jtf7.setBounds(230,180,100,30); jf.add(jtf1); jf.add(jtf2); jf.add(jtf3); jf.add(jtf4); jf.add(jtf5); jf.add(jtf6); jf.add(jtf7); jf.add(jl1); jf.add(jl2); jf.add(jl3); jf.add(jl4); jf.add(jl5); jf.add(jl7); jf.add(jl6); jf.add(jb1); jf.add(jb2); }} class Lister implements ActionListener { public void actionPerformed(ActionEvent e) { String s1=Sets.jtf1.getText(); String s2=Sets.jtf2.getText(); String s3=Sets.jtf3.getText(); String s11[]=s1.split(" "); String s21[]=s2.split(" "); String s31[]=s3.split(" "); String s4=""; String s5=""; boolean in=false; for(int i=0;i<s11.length;i++) { for (int j = 0; j < s31.length; j++) if (s11[i].equals(s31[j])) in = true; if(in) s4+="1"; else s4+="0"; in=false; } Sets.jtf4.setText(s4); for(int i=0;i<s21.length;i++) { for (int j = 0; j < s31.length; j++) if (s21[i].equals(s31[j])) in = true; if(in) s5+="1"; else s5+="0"; in=false; } Sets.jtf5.setText(s5); }} class Lister2 implements ActionListener { String s1; String s2; String K="",Q=""; public void actionPerformed(ActionEvent e){ String s3=Sets.jtf6.getText(); s1=Sets.jtf4.getText(); s2=Sets.jtf5.getText(); if(s1.length()!=s2.length()) { Sets.jtf7.setText("Довж. А і В різні"); return;} int count=0,count2=0,indxL=0,indxR=0; String sub="",copy=""; boolean kBusy=false,Qt=false; for(int i=0;i<s3.length();i++) if(s3.charAt(i)==')'){ count++; count2++;}else if(s3.charAt(i)=='(') count--; if(count!=0) {Sets.jtf7.setText("К-ть дужок різна"); return;} copy=s3; while(count2>0) { for(int i=0;i<copy.length();i++) if(copy.charAt(i)==')') { indxR=i; break;} for(int i=indxR;i>=0;i--) if(copy.charAt(i)=='(') {indxL=i; break;} sub=copy.substring(indxL+1,indxR); for(int i=indxL+1;i<indxR;i++) if(copy.charAt(i)=='K') kBusy=false; if(kBusy) { Q=swtch(sub); Qt=true;} else { K=swtch(sub); kBusy=true; Qt=false;} sub=""; for(int i=0;i<copy.length();i++) if(i>indxL&&i<=indxR) continue; else if(i==indxL) if(Qt) sub+="Q"; else sub+="K"; else sub+=copy.substring(i,i+1); if(Qt) System.out.println(sub+" "+Q); else System.out.println(sub+" "+K); copy=sub; count2--; } Sets.jtf7.setText(K); } String not(String a){ String s=""; for(int i=0;i<a.length();i++) if(a.charAt(i)=='1') s+="0"; else s+="1"; return s; } String without(String a,String b){ String s=""; for(int i=0;i<a.length();i++) if(a.charAt(i)=='1'&&b.charAt(i)=='1') s+="0"; else if(a.charAt(i)=='1') s+="1"; else s+="0"; return s; } String and(String a,String b){ String s=""; for(int i=0;i<a.length();i++) if(a.charAt(i)=='1'&&b.charAt(i)=='1') s+="1"; else s+="0"; return s; } String or(String a,String b){ String s=""; for(int i=0;i<a.length();i++) if(a.charAt(i)=='0'&&b.charAt(i)=='0') s+="0"; else s+="1"; return s; } String swtch(String s){ String result=""; if(s.equals("A/B")) result=without(s1,s2); else if(s.equals("B/A")) result=without(s2,s1); else if(s.equals("-A")) result=not(s1); else if(s.equals("-B")) result=not(s2); else if(s.equals("A*B")||s.equals("B*A")) result=and(s1,s2); else if(s.equals("A+B")||s.equals("B+A")) result=or(s1,s2); else if(s.equals("Q/B")) result=without(Q,s2); else if(s.equals("B/Q")) result=without(s2,Q); else if(s.equals("-Q")) result=not(Q); else if(s.equals("-B")) result=not(s2); else if(s.equals("Q*B")||s.equals("B*Q")) result=and(Q,s2); else if(s.equals("Q+B")||s.equals("B+Q")) result=or(Q,s2); else if(s.equals("A/Q")) result=without(s1,Q); else if(s.equals("Q/A")) result=without(Q,s1); else if(s.equals("-A")) result=not(s1); else if(s.equals("-Q")) result=not(Q); else if(s.equals("A*Q")||s.equals("Q*A")) result=and(s1,Q); else if(s.equals("A+Q")||s.equals("Q+A")) result=or(s1,Q); else if(s.equals("A/K")) result=without(s1,K); else if(s.equals("K/A")) result=without(K,s1); else if(s.equals("-A")) result=not(s1); else if(s.equals("-K")) result=not(K); else if(s.equals("A*K")||s.equals("K*A")) result=and(s1,K); else if(s.equals("A+K")||s.equals("K+A")) result=or(s1,K); else if(s.equals("K/B")) result=without(K,s2); else if(s.equals("B/K")) result=without(s2,K); else if(s.equals("-K")) result=not(K); else if(s.equals("-B")) result=not(s2); else if(s.equals("K*B")||s.equals("B*K")) result=and(K,s2); else if(s.equals("K+B")||s.equals("B+K")) result=or(K,s2); else if(s.equals("Q/K")) result=without(Q,K); else if(s.equals("K/Q")) result=without(K,Q); else if(s.equals("-Q")) result=not(Q); else if(s.equals("-K")) result=not(K); else if(s.equals("Q*K")||s.equals("K*Q")) result=and(Q,K); else if(s.equals("Q+K")||s.equals("K+Q")) result=or(Q,K); return result; }} В даній програмі використовується графічний інтерфейс. Він містить 3 поля для введення відповідно множини А, В, U і 2 тестові поля для виведення множин А і В у бітовій формі. Для переведення у бітову форму використовується кнопка Згенерувати. Потім необхідно ввести Вираз у відповідне поле і натиснути кнопку Обчислити - в результаті в полі Результат буде виведений результат обчислень формули. Також у консоль буде виведений порядок обчислень формули та результат на кожному кроці обчислень. Дані для поля множин А і В можуть бути введені через пробіл. Вираз необхідно вводити з дотриманням правил розташування дужок, щоб програма точно знала порядок виконання операцій, а також, щоб не виникало невизначеності. Можна вводити такі операції - "-" - заперечення, "+" – об’єднання, "*" - перетин, "/" - різниця. Результат виконання програми представляємо бітовим рядком. / Рис. 1. Результати виконання лабораторного завдання Висновок Виконавши дану лабораторну роботу, вивчила способи комп’ютерного представлення множин та виконання комп’ютерних операцій над ними.
Антиботан аватар за замовчуванням

30.05.2019 15:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!