Міністерство освіти і науки України
Національний університет „ Львівська політехніка”
Кафедра ІСМ
Звіт
Про виконання
Лабораторної роботи № 1
з дисципліни: «Методи та системи штучного інтелекту »
на тему: «Комп’ютерне подання множин»
Мета роботи: вивчення та порівняння різних способів представлення бінарних відношень. Засвоєння практичних навиків маніпулювання бінарними відношеннями в різних представленнях.
Виконання:
package Theory_lab1;
class Capacity {
protected int size;
Capacity (int x){
size = x;
}
Capacity (){
size = 5;
}
void matrix_size(int x) {
size = x;
}
}
class Relationship extends Capacity {
private byte relation[][] = new byte[size][size];
private byte res[][] = new byte[size][size];
Relationship () {
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++)
relation[ar][a] = (byte)(Math.random()*2);
}
Relationship (byte arr[][]) {
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++)
relation[ar][a] = arr[ar][a];
}
byte[][] get_relation (){
return relation;
}
void show() {
for (byte[] ar : relation) {
for (byte a : ar) System.out.print(a + " ");
System.out.println();
}
System.out.println();
}
void show(byte[][] arr) {
for (byte[] ar : arr) {
for (byte a : ar) System.out.print(a + " ");
System.out.println();
}
System.out.println();
}
byte[][] empty (){
byte[][] arr = new byte[5][5];
for (byte ar = 0; ar < arr.length; ar++)
for (byte a = 0; a < arr.length; a++)
arr[ar][a] = 0;
show(arr);
return arr;
}
byte[][] full (){
byte[][] arr = new byte[5][5];
for (byte ar = 0; ar < arr.length; ar++)
for (byte a = 0; a < arr.length; a++)
arr[ar][a] = 1;
show(arr);
return arr;
}
byte[][] diagonal (){
byte[][] arr = new byte[5][5];
for (byte ar = 0; ar < arr.length; ar++)
for (byte a = 0; a < arr.length; a++){
if (a == ar) arr[ar][a] = 1;
else arr[ar][a] = 0;
}
show(arr);
return arr;
}
byte[][] notdiagonal() {
byte[][] arr = new byte[5][5];
for (byte ar = 0; ar < arr.length; ar++)
for (byte a = 0; a < arr.length; a++){
if (a == ar) arr[ar][a] = 0;
else arr[ar][a] = 1;
}
show(arr);
return arr;
}
byte[][] func_union (byte[][] arr){
for (byte ar = 0; ar < arr.length; ar++)
for (byte a = 0; a < arr.length; a++){
if (relation[ar][a] == 0 && arr[ar][a] == 0)
res[ar][a] = 0;
else res[ar][a] = 1;
}
System.out.println("Operation union :");
show(res);
return res;
}
byte[][] func_union (byte[][] arr1, byte[][] arr2){
for (byte ar = 0; ar < arr1.length; ar++)
for (byte a = 0; a < arr1.length; a++){
if (arr1[ar][a] == 0 && arr2[ar][a] == 0)
res[ar][a] = 0;
else res[ar][a] = 1;
}
System.out.println("Operation union :");
show(res);
return res;
}
byte[][] func_cross (byte[][] arr){
for (byte ar = 0; ar < arr.length; ar++)
for (byte a = 0; a < arr.length; a++){
if (relation[ar][a] == 1 && arr[ar][a] == 1)
res[ar][a] = 1;
else res[ar][a] = 0;
}
System.out.println("Operation cross :");
show(res);
return res;
}
byte[][] func_sub (byte[][] arr){
for (byte ar = 0; ar < arr.length; ar++)
for (byte a = 0; a < arr.length; a++){
if (relation[ar][a] == 1 && arr[ar][a] == 0)
res[ar][a] = 1;
else res[ar][a] = 0;
}
System.out.println("Operation sub :");
show(res);
return res;
}
byte[][] func_sub (byte[][] arr1, byte[][] arr2){
for (byte ar = 0; ar < arr1.length; ar++)
for (byte a = 0; a < arr1.length; a++){
if (arr1[ar][a] == 1 && arr2[ar][a] == 0)
res[ar][a] = 1;
else res[ar][a] = 0;
}
System.out.println("Operation sub :");
show(res);
return res;
}
byte[][] func_not (){
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++){
if (relation[ar][a] == 1) res[ar][a] = 0;
else res[ar][a] = 1;
}
System.out.println("Operation not :");
show(res);
return res;
}
byte[][] func_inverse (){
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++){
if (relation[ar][a] == 1) res[a][ar] = 1;
else res[a][ar] = 0;
}
System.out.println("Operation inverse :");
show(res);
return res;
}
byte[][] func_cut (){
byte masuv[][] = new byte[size-1][size-1];
for (byte ar = 0; ar < res.length - 1; ar++)
for (byte a = 0; a < res.length - 1; a++){
if (relation[ar][a] == 1) masuv[a][ar] = 1;
else masuv[a][ar] = 0;
}
System.out.println("Operation cut :");
show(masuv);
return masuv;
}
byte[][] func_symmetric_sub (byte[][] arr){
byte P[][] = new byte[res.length][res.length];
byte Q[][] = new byte[res.length][res.length];
byte R[][] = new byte[res.length][res.length];
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++)
P[ar][a] = relation[ar][a];
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++)
Q[ar][a] = arr[ar][a];
func_sub(P, Q);
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++)
R[ar][a] = res[ar][a];
func_union (R, func_sub(Q, P));
return res;
}
byte[][] func_composition (byte[][] arr){
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++)
res[ar][a] = 0;
for (byte ar = 0; ar < arr.length; ar++)
for (byte a = 0; a < arr.length; a++)
for (byte i = 0; i < arr.length; i++){
if (relation[ar][a] == 1 && arr[a][i] == 1)
res[ar][i] = 1;
}
System.out.println("Operation composition :");
show(res);
return res;
}
}
class begin {
public static void main(String args[]){
byte P[][] = {{0, 1, 0, 1, 0},
{0, 0, 0, 0, 1},
{0, 1, 1, 1, 0},
{1, 0, 0, 0, 0},
{0, 0, 1, 0, 1 }};
byte Q[][] = {{0, 0, 0, 1, 0},
{1, 1, 0, 0, 0},
{1, 0, 0, 1, 1},
{1, 0, 0, 0, 0},
{0, 1, 0 ,0, 0}};
byte R[][] = {{1, 0, 0, 0, 0},
{1, 0, 1, 0, 0},
{0, 0, 1, 0, 1},
{0, 0, 1, 0, 0},
{1, 1, 0, 0, 0}};
Relationship ob1 = new Relationship(P);
Relationship ob2 = new Relationship(Q);
Relationship ob3 = new Relationship(R);
ob1.show();
ob2.show();
ob3.show();
ob1.diagonal();
// ob1.notdiagonal();
// ob1.empty();
// ob1.full();
// ob1.func_union(ob2.get_relation());
// ob1.func_cross(ob2.get_relation());
// ob1.func_sub(ob2.get_relation());
// ob1.func_cut();
// ob1.func_not();
// ob1.func_inverse();
// ob1.func_symmetric_sub(ob2.get_relation());
// ob1.func_composition(ob2.get_relation());
}
}
Діагональне, антидіагональне, порожнє та пусте відношення
Об’єднання відношень
Перетин відношень
Різниця відношень
Скорочення відношення
Симетрична різниця відношень
Доповнення відношення
Обернене відношення
Композиція відношень
Висновок: виконуючи дану лабораторну роботу я вивчив різних способів представлення бінарних відношень. Засвоєння практичних навиків маніпулювання бінарними відношеннями в різних представленнях.