Given two matrix A[][] and B[][] of same order m*n. The task is to find the intersection of both matrix as C, where:
- Cij = Aij if Aij = Bij
- C = “*”, otherwise.
Examples:
Input : A[N][N] = {{2, 4, 6, 8}, {1, 3, 5, 7}, {8, 6, 4, 2}, {7, 5, 3, 1}}; B[N][N] = {{0, 4, 3, 8}, {1, 3, 5, 7}, {8, 3, 6, 2}, {4, 5, 3, 4}}; Output : * 4 * 8 1 3 5 7 8 * * 2 * 5 3 *
As intersection of two set is a set which includes common elements to both set, similarly intersection of two matrix will include only corresponding common element and place “*” at the position of rest unmatching elements.
For finding the intersection of both matrix simply iterate over their size and print * if element at particular position in both matrix are not equal else print the element.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
#define N 4
#define M 4
using
namespace
std;
void
printIntersection(
int
A[][N],
int
B[][N])
{
for
(
int
i = 0; i < M; i++) {
for
(
int
j = 0; j < N; j++) {
if
(A[i][j] == B[i][j])
cout << A[i][j] <<
" "
;
else
cout <<
"* "
;
}
cout <<
"n"
;
}
}
int
main()
{
int
A[M][N] = { { 2, 4, 6, 8 },
{ 1, 3, 5, 7 },
{ 8, 6, 4, 2 },
{ 7, 5, 3, 1 } };
int
B[M][N] = { { 2, 3, 6, 8 },
{ 1, 3, 5, 2 },
{ 8, 1, 4, 2 },
{ 3, 5, 4, 1 } };
printIntersection(A, B);
return
0;
}
Java
import
java.io.*;
class
GFG {
static
int
N =
4
;
static
int
M =
4
;
static
void
printIntersection(
int
A[][],
int
B[][])
{
for
(
int
i =
0
; i < M; i++) {
for
(
int
j =
0
; j < N; j++) {
if
(A[i][j] == B[i][j])
System.out.print(A[i][j] +
" "
);
else
System.out.print(
"* "
);
}
System.out.println(
" "
);
}
}
public
static
void
main (String[] args) {
int
A[][] = { {
2
,
4
,
6
,
8
},
{
1
,
3
,
5
,
7
},
{
8
,
6
,
4
,
2
},
{
7
,
5
,
3
,
1
} };
int
B[][] = { {
2
,
3
,
6
,
8
},
{
1
,
3
,
5
,
2
},
{
8
,
1
,
4
,
2
},
{
3
,
5
,
4
,
1
} };
printIntersection(A, B);
}
}
Python3
N, M
=
4
,
4
def
printIntersection(A, B) :
for
i
in
range
(M) :
for
j
in
range
(N) :
if
(A[i][j]
=
=
B[i][j]) :
print
(A[i][j], end
=
" "
)
else
:
print
(
"* "
, end
=
" "
)
print
()
if
__name__
=
=
"__main__"
:
A
=
[ [
2
,
4
,
6
,
8
],
[
1
,
3
,
5
,
7
],
[
8
,
6
,
4
,
2
],
[
7
,
5
,
3
,
1
] ]
B
=
[ [
2
,
3
,
6
,
8
],
[
1
,
3
,
5
,
2
],
[
8
,
1
,
4
,
2
],
[
3
,
5
,
4
,
1
] ]
printIntersection(A, B)
C#
using
System;
class
GFG {
static
int
N = 4;
static
int
M = 4;
static
void
printIntersection(
int
[,]A,
int
[,]B)
{
for
(
int
i = 0; i < M; i++) {
for
(
int
j = 0; j < N; j++) {
if
(A[i,j] == B[i,j])
Console.Write(A[i,j] +
" "
);
else
Console.Write(
"* "
);
}
Console.WriteLine(
" "
);
}
}
public
static
void
Main () {
int
[,]A = { { 2, 4, 6, 8 },
{ 1, 3, 5, 7 },
{ 8, 6, 4, 2 },
{ 7, 5, 3, 1 } };
int
[,]B = { { 2, 3, 6, 8 },
{ 1, 3, 5, 2 },
{ 8, 1, 4, 2 },
{ 3, 5, 4, 1 } };
printIntersection(A, B);
}
}
PHP
<?php
function
printIntersection(
$A
,
$B
)
{
$N
= 4;
$M
= 4;
for
(
$i
= 0;
$i
<
$M
;
$i
++)
{
for
(
$j
= 0;
$j
<
$N
;
$j
++)
{
if
(
$A
[
$i
][
$j
] ==
$B
[
$i
][
$j
])
echo
$A
[
$i
][
$j
] .
" "
;
else
echo
"* "
;
}
echo
"n"
;
}
}
$A
=
array
(
array
(2, 4, 6, 8 ),
array
(1, 3, 5, 7 ),
array
(8, 6, 4, 2 ),
array
(7, 5, 3, 1 ) );
$B
=
array
(
array
(2, 3, 6, 8 ),
array
(1, 3, 5, 2 ),
array
(8, 1, 4, 2 ),
array
(3, 5, 4, 1 ) );
printIntersection(
$A
,
$B
);
?>
Javascript
<script>
var
N = 4
var
M = 4
function
printIntersection( A, B)
{
for
(
var
i = 0; i < M; i++) {
for
(
var
j = 0; j < N; j++) {
if
(A[i][j] == B[i][j])
document.write( A[i][j] +
" "
);
else
document.write(
"* "
);
}
document.write(
"<br>"
);
}
}
var
A = [ [ 2, 4, 6, 8 ],
[ 1, 3, 5, 7 ],
[ 8, 6, 4, 2 ],
[ 7, 5, 3, 1 ] ];
var
B = [ [ 2, 3, 6, 8 ],
[ 1, 3, 5, 2 ],
[ 8, 1, 4, 2 ],
[ 3, 5, 4, 1 ] ];
printIntersection(A, B);
</script>
Output
2 * 6 8 1 3 5 * 8 * 4 2 * 5 * 1
Complexity Analysis:
- Time Complexity: O(M * N)
- Auxiliary Space: O(1)
Last Updated :
09 Sep, 2022
Like Article
Save Article
10
8 Лекция №7. Операции над отношениями
представленными матрицами и графами1
Продолжительность:
2 часа (90 мин.)
8.1 Ключевые вопросы
8
Лекция №7. Операции над отношениями
представленными матрицами и графами 1
8.1
Ключевые вопросы 1
8.2
Текст лекции 1
8.2.1
Операции над отношениями представленными
матрицами и графами 1
Вопросы
для контроля 10
8.2 Текст лекции
8.2.1 Операции над отношениями представленными
матрицами и графами
В Лекции
№ 5 мы рассмотрели операции над отношениями
при их представлении подмножествами
прямого произведения множеств M1
х
М2 (или M
2 при M1 = М2
= M). Теперь
рассмотрим, как можно выполнить эти
операции при представлении отношений
матрицами и графами.
Матрицы
бинарных отношений состоят только из
нулей и единиц (см. Лекцию № 5), поэтому
можно принять каждый элемент такой
матрицы за логическую переменную,
принимающую значение 0 или 1, и применить
булевы операции над ними, задаваемые
таблицами, показанными на рис. 8.1 и рис.
8.5.
НЕ |
И |
ИЛИ |
|||||||
a |
|
a |
b |
a |
b |
||||
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
||
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
||
1 |
0 |
0 |
1 |
0 |
1 |
||||
1 |
1 |
1 |
1 |
1 |
1 |
Рисунок 8.1 – Таблицы истинности булевых
функций
НЕ, И, ИЛИ
Пусть
матрицы отношений R1
и R2 обозначены
A и B
соответственно.
–
Объединение.
Обозначим
матрицу результата объединения матриц
А и В символом С
.
Символ
объединения мы заменили символом
логического сложения, так как элементы
матрицы С определяются по выражению
,
в
соответствии с которым
,
когда хотя бы одно из слагаемых или оба
они равны 1. Значит
равносильно тому, что выполняется
отношение
.
Пример
1. Пусть отношения R1
и R2
определяются матрицами А
и В,
приведенными ниже, тогда отношение
будет определяться матрицей С
В
терминах теории графов объединение
определяется так.
Рисуем
три множества вершин и изображаем на
одном множестве вершин отношение R1
штрихпунктирными стрелками (дугами),
на втором множестве вершин отношение
R2 штриховыми
дугами, вершины третьего множества
соединяем сплошными дугами, если между
ними на предыдущих рисунках были дуги
хотя бы одного типа (см. рис. 8.2, где а и
б – графы отношений R1
и R2, в – граф
результата).
Рисунок 8.2 – Графы отношений R1
и R2 и их
объединения
– Пересечение.
Пересечение
двух отношений в матричной форме
определяется как
С
=
,
а
значения элементов матрицы С
определяются по выражению
,
которое
равно 1 в том и только в том случае, когда
и
и
,
т.е. когда выполнены оба отношения
и
,
а, следовательно, выполнено отношение
.
Для
матриц А
и В
примера
1 получаем
В
терминах теории графов граф результата
получается соединением сплошными дугами
только тех вершин, которые соединены
дугами одинакового направления и в
графе отношения R1
и в графе отношения R2
(см. рис. 8.3, где а и б – графы отношений
R1 и R2,
в – граф результата).
– Дополнение.
Отношение
– дополнение отношения R1
до полного отношения определяется путем
инвертирования значений элементов
исходной матрицы (т.е. заменой нулей
единицами, единиц нулями).
Рисунок 8.3 – Графы отношений R1
и R2 и их
пересечения
Для
матрицы А получим такую матрицу
дополнения
граф
отношения
,
дополнение графа R1
(рис. 8.4,а) до полного графа, показан на
рис. 8.4,б.
Замечание.
В теории графов принято – если в исходном
графе нет ни одной петли, то и у графа
дополнения петель нет. Здесь же – если
в исходном графе петель не было, то у
дополнения они будут обязательно
(заменяем 0 на 1 на главной диагонали
матрицы).
–
Разность.
Для
определения разности отношений,
представленных в матричной форме,
воспользуемся представлением разности
множеств через дополнение и пересечение
(см. п.1.2)
R1R2
=
.
Рисунок 8.4 – Графы отношений R1
и
Данное
соотношение определяет алгоритм
получения матрицы разности:
–
определить дополнение
,
– найти
пересечение
.
Для
матриц примера
1 находим
Для
элементов матрицы результата С
можно записать
,
что
соответствует логической функции запрет
(таблица истинности этой функции
приведена на рис. 8.5).
ЗАПРЕТ |
М2 |
|||||
a |
b |
a |
b |
|||
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
1 |
0 |
0 |
1 |
1 |
|
1 |
0 |
1 |
1 |
0 |
1 |
|
1 |
1 |
0 |
1 |
1 |
0 |
Рисунок 8.5 – Таблицы истинности булевых
функций
ЗАПРЕТ и М2
Граф
разности отношений R1R2
получается исключением из графа отношения
R1 дуг, совпавших
с дугами графа отношения R2.
Для
графов примера
1 получаем (см.
рис. 8.6, где а и б – графы отношений R1
и R2, в – граф
результата R1R2).
Рисунок 8.6 – Графы отношений R1
и R2 и их разности
R1R2
–
Симметрическая разность.
Матрица
результата симметрической разности
двух отношений получается поэлементным
сложением по модулю 2 матриц отношений,
участвующих в операции. Таблица истинности
операции сложение по модулю 2 (М2) –
ИСКЛЮЧАЮЩЕЕ ИЛИ приведена на рис. 8.5.
Элементы
матрицы результата С получаются по
формуле
.
Граф
результата (рис. 8.7,в) получается
объединением не совпадающих частей
графов отношений R1
и R2, участвующих
в операции (из объединенного графа
исключается общая часть – результат
пересечения графов).
Рисунок 8.7 – Графы отношений R1
и R2
и их симметрической разности
–
Обратное отношение.
Матрица
отношения
,
обратного к отношению R1,
получается транспонированием матрицы
отношения R1,
т.е.
С =
АТ.
При
транспонировании происходит поворот
матрицы относительно главной диагонали,
при котором строки и столбцы матрицы
меняются местами.
В графе
результата этой операции (рис. 8.8,б) дуги
меняют направление по сравнению с
исходным графом (рис. 8.8,а).
Рисунок 8.8 – Графы отношений R1
и
–
Составное отношение (композиция).
Для
нахождения матрицы составного отношения
необходимо перемножить по стандартным
правилам матрицы отношений, участвующих
в операции, но с учетом того, что умножение
и сложение здесь булевские.
Элементы
матрицы результата определяются по
формуле
,
где n = |M|
– число элементов в множестве М.
Граф
составного отношения получается
следующим образом.
Сначала
для графа результата делаем заготовку
в виде вершин. Затем находим в графе
отношения R1
(рис. 8.9,а) дугу (если она есть), выходящую
из вершины i и входящую
в вершину j. После
этого просматриваем граф отношения R2
(рис. 8.9,б) и находим в нем дугу (если она
есть), выходящую из вершины j.
Пусть эта дуга соединяет вершину j
с вершиной k, тогда
соединяем в графе результата (рис. 8.9,в)
вершины i и k
дугой, выходящей из i
и входящей в k. таким
образом, мы заменяем составной путь i
– j – k
дугой i – k.
Повторяем эту процедуру, пока это
возможно.
Граф
составного отношения
приведен на рис. 8.9,в.
Рисунок 8.9 – Графы отношений R1
и R2 и их композиции
Rl○R2
–
транзитивное
замыкание.
прямое
транзитивное замыкание.
Для
нахождения прямого транзитивного
замыкания в матричном виде наиболее
удобна вторая форма его определения
R°
=
(определение
II).
В
соответствии с этим определением
необходимо получить степени матрицы
отношения R и
выполнить их объединение. Наивысший
порядок степени матрицы отношения R
определяется здесь длиной максимального
кратчайшего маршрута или цикла в графе,
построенном по матрице отношения R.
Правда, определять этот граф и маршрут
не обязательно, так как после достижения
указанной степени результаты возведения
в степень начнут повторяться (это может
служить признаком окончания процесса
получения степеней матрицы отношения
R).
Возведение
в степень производится по правилам
А2
= А·А, А3 = А2·А,
А4 = А3·А и т.д.
Например,
для отношения R1,
представленного матрицей A,
получаем
Возведение
в степень прекращаем, так как результат
будет повторяться.
Таким
образом, для прямого транзитивного
замыкания отношения R1
получаем
Для
отношения R2
получаем
Возведение
в степень прекращаем, так как результат
повторяется.
Заметим,
для R1 транзитивное
замыкание является полным отношением
,
где M = {1, 2, 3, 4}.
Для
R2 транзитивным
замыканием является оно само, т.е.
.
Для
отношения, представленного графом, k–я
степень определяется следующим образом.
Если
в графе отношения есть путь длины k
(путь – это связная последовательность
дуг одного направления), начинающийся
в вершине i и
заканчивающийся в вершине j,
то в графе результата эти вершины
соединяются дугой, для которой вершина
i является началом, а
вершина j концом.
Для
получения транзитивного замыкания
отношения, представленного графом,
необходимо объединить графы различных
степеней отношения по правилам,
приведенным выше.
Граф
транзитивного замыкания отношения R1
(полный граф) приведен на рис. 8.10, а граф
транзитивного замыкания отношения R2
совпадает с графом этого отношения.
Для
получения матрицы обратного транзитивного
замыкания R–о
необходимо получить степени
матрицы обратного отношения R–1
и выполнить их объединение. (здесь
все повторяется, как для матрицы прямого
транзитивного замыкания, только с
матрицей обратного отношения.)
Для
отношения R1
нашего примера получаем
Р
исунок
8.10 – Граф транзитивного и рефлексивного
замыкания отношения R1
Для
получили полное отношение.
Для
получаем
Возведение
в степень прекращаем, так как результат
повторяется.
Здесь
.
Замечание.
Если в операциях участвуют отношения
на множествах, одно из которых является
подмножеством другого (размерности у
них разные), то предварительно производится
выравнивание размерностей добавлением
нулевых строк и столбцов.
– Рефлексивное замыкание.
Прямое и обратное рефлексивные замыкания
определяются по формулам
R*
= R°
E,
R–*
= R–°
E,
где Е – тождественное (оно же
диагональное) отношение, в матрице
которого 1 стоят только на главной
диагонали, а R° и R–°
прямое и обратное транзитивные замыкания
отношения R.
Следовательно,
для отношений R1
и R2 получим
Как
видим, для отношения R1
рефлексивное замыкание является полным
отношением, следовательно, его граф
будет полным графом, показанным на рис.
8.10.
Для
отношения R2
матрицы как прямого, так и обратного
рефлексивного замыкания отличаются от
матриц отношений R2
и
только
единицами на главной диагонали в строках
1, 2 и 3, поэтому их графы будут отличаться
от графов отношений R2
и
только
наличием петель при вершинах 1, 2 и 3.
–
Редукция.
Применим
операцию редукции к отношению R
“быть меньше” на множестве М =
{1,2,3,4}, которое является строгим порядком.
На рис.
8.11 показаны графы отношения R
и его редукции Rr.
Рисунок 8.11 – Графы отношения R
и его редукции Rr
Как
видим, граф редукции значительно проще
графа отношения и в то же время он несет
всю информацию об отношении R.
Чтобы
перейти от Rr
к R, надо выделить в
Rr
все пути между вершинами и замкнуть их
дугами.
Пример
2. Пусть R — отношение
на N: R
= {(а, b): а
> b} — “быть
больше”.
Выполнить
операции над R.
R–1
= {(a, b):
a<b}
– “быть меньше”;
= U R
= {(a, b)
a
b} =
– “быть не больше”,
где
Е – тождественное отношение, Е =
{(а, b): а = b};
R○R
= R2 = {(a,
b): a
– 1 > b} – “быть
больше по крайней мере на 2”;
R°
= R (так как R
транзитивно).
Вопросы для контроля
-
Какие
булевские операции применяются при
выполнении операций над отношениями? -
Как
выполняется операция объединение
отношений, представленных матрицами
и графами? -
Как
выполняется операция пересечение
отношений, представленных матрицами
и графами? -
Как
определяются матрица и граф дополнительного
отношения по матрице и графу отношения? -
Как
выполняется операция разность
отношений, представленных матрицами
и графами? -
Как
выполняется операция Симметрическая
разность отношений, представленных
матрицами и графами? -
Как
определяются матрица и граф обратного
отношения по матрице и графу прямого
отношения? -
Как
определяется матрица и граф композиции
отношений по матрицам и графам операндов? -
Как
выполняются операции прямого и обратного
транзитивного
замыкания отношений, представленных
матрицами и графами? -
Как
выполняется операция рефлексивного
замыкания отношений, представленных
матрицами и графами? -
Как
выполняется операция Редукция отношения,
представленного матрицей и графом?
1
Лекция читается после изучения булевой
алгебры и теории графов в качестве
демонстрации взаимного проникновения
разделов курса.
Есть две двухстолбцовые матрицы А и В. Первые столбцы у них имеют одинаковые элементы. Задача: нужно выбрать все строки из второй матрицы В, элементы первого столбца которой совпадают с соотв. элементами первой матрицы А.
Т.е. нужно найти “пересечение” двух матриц по первым столбцам.
Например, если:
А’ = [1 2 4; 34 74 76] (матрицы для наглядности транспонированы)
B’ = [1 2 3 4 5; 16 23 75 46 45],
то нужно получить матрицу С, у которой первый столбец будет сформирован из элементов, общих в первых столбцах А и B (их пересечения), а второй — из элементов В.
Т.е. должно получиться
C’ = [1 2 4; 16 23 46]
Нет ли какой-нибудь функции в матлабе на эту тему?
P.S.
В маткаде такая функция есть — lookup.
lookup(z, A, B) Looks in a vector or matrix, A, for a given value, z, and returns the value(s) in the same position(s) (that is, with the same row and column numbers) in another matrix, B. When multiple values are returned, they appear in a vector in row-wise order, starting with the top left corner of B and sweeping to the right.
Здравствуйте.
Сразу хочу извиниться, если будут какие-то неточности в терминах, т.к. я не математик.
Перейду к делу.
1. Задача в общем виде.
Имеется несколько матриц , причем не превосходит . Количество матриц тоже не превосходит .
Строки этих матриц – элементы векторного пространства . Соответственно, каждая матрица порождает некоторое подпространство (если все m строк матрицы линейно независимы, конечно).
Задача максимум: найти пересечение (базис) векторных пространств, порождаемых матрицами.
Задача минимум: найти размерность этого пересечения. Еще точнее, проверить равна ли она нулю.
2. Частный случай
Есть три матрицы , причем на самом деле они все получаются через элементарные преобразования матриц и три строки оказываются нулевыми. Кстати тут дополнительный вопрос. Верно ли, что если хотя бы одна матрица будет окажется , а не , то пресечение трех подпространств гарантированно будет ненулевым (при условии что оставшиеся две матрицы не вырождены)?
Итак, есть эти три матрицы. Задачи такие же как в п.1.
Суть заключается в том, что надо найти какое-то элегантное и понятное решение.
Как делал я.
Находил ядро для каждой матрицы и проверял эти ядра на линейную зависимость. Если ее нет, то подпространства не пересекаются (начало координат не в счет), если она есть, то существует пересечение. Для того чтобы найти пересечение, нужно составить матрицу из векторов, являющихся ядрами исходных матрицы. Когда есть пересечение, такая матрица вырождается и если найти ядро уже для нее, то получится как-раз пересечение исходных.
Проблема в том, что при поиске ядра в исходной задаче подразумевается переход к другой физической сущности. Плюс возникает вопрос выбора некоторой свободной константы, где тоже есть свой подводный камень.
Поэтому мой вопрос заключается больше в теоретической возможности ограничиться манипуляциями с исходными матрицами, не переходя к решению систем уравнений, в которых число неизвестных больше числа самих уравнений.