Міністерство освіти і науки України
Національний університет „ Львівська політехніка”
Кафедра ІСМ
Звіт
Про виконання
Лабораторної роботи № 2
з дисципліни: «Теорія прийняття рішень»
на тему: «Дослідження властивостей та типів бінарних відношень»
Мета роботи: вивчення та практичне ознайомлення з основними властивостями бінарних відношень та їх типами.
Виконання:
package Theory_lab2;
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];
private byte res2[][] = 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(byte[][] arr) {
for (byte[] ar : arr) {
for (byte a : ar) System.out.print(a + " ");
System.out.println();
}
System.out.println();
}
void refleksuvne(){
for (int i = 0; i < relation.length; i++)
if (relation[i][i] == 0) {
System.out.println("НЕ рефлексивне");
return;
}
System.out.println("Pефлексивне");
}
boolean anturefleksuvne(){
for (int i = 0; i < relation.length; i++)
if (relation[i][i] == 1){
System.out.println("НЕ антирефлексивне.");
return false;
}
System.out.println("Антирефлексивне.");
return true;
}
void sumetric(){
for (byte i = 0; i < res.length; i++)
for (byte k = 0; k < res.length; k++)
if (relation[i][k] != relation[k][i]){
System.out.println("НЕ симетричне.");
return;
}
System.out.println("Симетричне.");
}
void asumetric(){
if (!anturefleksuvne()){
System.out.println("НЕ aсиметричне.");
return;
}
for (byte i = 0; i < res.length; i++)
for (byte k = 0; k < res.length; k++)
if (relation[i][k] == 1 && relation[k][i] == 1){
System.out.println("НЕ асиметричне.");
return;
}
System.out.println("Асиметричне.");
}
void antusumetric(){
for (byte i = 0; i < res.length; i++)
for (byte k = 0; k < res.length; k++){
if (i == k)
continue;
if (relation[i][k] == 1 && relation[k][i] == 1) {
System.out.println("НЕ антисиметричне.");
return;
}
}
System.out.println("Антисиметричне.");
}
void tranzituvne(){
func_composition(relation);
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++)
if (res[ar][a] == 1 && relation[ar][a] == 0){
System.out.println("НЕ транзитивне.");
return;
}
System.out.println("Транзитивне.");
}
void 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;
}
//show(res);
}
void acuklichne(){
func_composition(relation);
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++)
if (res[ar][a] == 1 && relation[a][ar] == 1){
System.out.println("НЕ ациклічне.");
return;
}
System.out.println("Ациклічне.");
}
void zvayzne(){
if (!anturefleksuvne()){
System.out.println("НЕ зв'язне.");
return;
}
for (byte i = 0; i < res.length; i++)
for (byte k = 0; k < res.length; k++)
if (relation[i][k] == 0 && relation[k][i] == 0){
System.out.println("НЕ зв'язне.");
return;
}
System.out.println("Зв'язне.");
}
byte[][] func_cross (){
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++){
if (relation[ar][a] == 1 && res[ar][a] == 1)
res2[ar][a] = 1;
else res2[ar][a] = 0;
}
return res2;
}
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;
}
return res;
}
void sumetric2(){
func_inverse();
func_cross();
System.out.println("Симетрична складова :");
show(res2);
}
byte[][] func_sub (){
for (byte ar = 0; ar < res2.length; ar++)
for (byte a = 0; a < res2.length; a++){
if (relation[ar][a] == 1 && res2[ar][a] == 0)
res[ar][a] = 1;
else res[ar][a] = 0;
}
return res;
}
void asumetric2(){
sumetric2();
func_sub();
System.out.println("Асиметрична складова :");
show(res);
}
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;
}
return res;
}
byte[][] func_composition2 (byte[][] arr){
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)
res2[ar][i] = 1;
else res2[ar][i] = 0;
}
return res2;
}
byte[][] tranzutuvne_zamukanay(){
func_union(func_composition2(relation)); func_union(res, func_composition2(res2));
func_union(res, func_composition2(res2));
func_union(res, func_composition2(res2));
System.out.println("Транзитивн замикання :");
show (res);
return res;
}
byte[][] dosaygnist(){
byte E[][] = {{1, 0, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 0, 1}};
func_union(E, tranzutuvne_zamukanay());
System.out.println("Досяжність :");
show (res);
return res;
}
byte[][] func_inverse (byte[][] arr){
for (byte ar = 0; ar < res.length; ar++)
for (byte a = 0; a < res.length; a++){
if (arr[ar][a] == 1) res2[a][ar] = 1;
else res2[a][ar] = 0;
}
return res2;
}
byte[][] func_cross (byte[][] arr, byte[][] arr2){
for (byte ar = 0; ar < arr.length; ar++)
for (byte a = 0; a < arr.length; a++){
if (arr[ar][a] == 1 && arr2[ar][a] == 1)
res2[ar][a] = 1;
else res2[ar][a] = 0;
}
return res2;
}
byte[][] vzayemna_dosaygnist(){
func_cross (dosaygnist(), func_inverse(dosaygnist()));
System.out.println("Взаємна досяжність :");
show (res2);
return res2;
}
}
public class Begin {
public static void main(String[] args) {
byte P[][] = {{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 1},
{0, 0, 0, 1, 0},
{0, 0, 1, 1, 0}};
Relationship ob1 = new Relationship(P);
ob1.refleksuvne();
ob1.anturefleksuvne();
ob1.sumetric();
ob1.asumetric();
ob1.antusumetric();
ob1.tranzituvne();
ob1.acuklichne();
ob1.zvayzne();
ob1.sumetric2();
ob1.asumetric2();
ob1.tranzutuvne_zamukanay();
ob1.dosaygnist();
ob1.vzayemna_dosaygnist();
}
}
Результат:
Властивості відношення
/
/
/
/
/
/
Висновок: виконуючи дану лабораторну роботу я вивчив та закріпив на практиці основні властивості та типи бінарних відношень також написав програму для автоматизації процесу роботи з бінарними відношеннями.