Учебники 80212
.pdfss_token="<>token<>"&lang=en&v=5.16","JSON"]
VKInfo[ID_,OptionsPattern[{Photo- >False}]]:=Module[{},
If[OptionValue[Photo]==True,
{#[[2]]<>" "<>#[[3]],Import[#[[1]]]}&/@({"photo","first_ name","last_name"}/.
VK["users.get","user_ids="<>ToString@ID<>"&fi elds=photo"][[1,2]])
,#[[1]]<>" " <>#[[2]]&/@({"first_name","last_name"}/.VK["u sers.get","user_ids="<>ToString@ID][[1,2]])
]]
VKFriends[ID_,OptionsPattern[{Photo- >True,Count->0,Clean->False}]]:=Module[{},
If[OptionValue[Clean]==True,
VK["friends.get","user_id="<>ToString@ID][[1, 2,2,2]],
If[OptionValue[Photo]==True,
{#[[2]],#[[3]]<>" "<>#[[4]],Import[#[[1]]]}&/@({"photo_50","id" ,"first_name","last_name"}/.If[OptionValue[Co unt]==0,VK["friends.get","user_id="<>ToString @ID<>"&fields=photo_50"],
VK["friends.get","user_id="<>ToString@ID<>"&c ount="<>ToString@OptionValue[Count]<>"&fields =photo_50"]][[1,2,2,2]]),
{#[[1]],#[[2]]<>" "<>#[[3]]}&/@({"id","first_name","last_name"} /.If[OptionValue[Count]==0,VK["friends.get"," user_id="<>ToString@ID<>"&fields=sex"],VK["fr
29
iends.get","user_id="<>ToString@ID<>"&count=" <>ToString@OptionValue[Count]<>"&fields=sex"] ][[1,2,2,2]])
]]]
VKMutural[ID1_,ID2_,OptionsPattern[{Clea n->False,Photo->True}]]:=Module[{m,i},
m=VK["friends.getMutual","source_uid="<>ToStr ing@ID1<>"&target_uid="<>ToString@ID2][[1,2]]
;
If[OptionValue[Clean]==True,m,
i=VKInfo[StringReplace[ToString[m],{"{"- >"","}"->""," "->""}],Photo- >OptionValue[Photo]];
Flatten[#]&/@({m,i} )
]]
VKInfo[myID,Photo->True] myFriends=VKFriends[myID,Clean->True];
gMyFriends=UndirectedEdge[myID,#]&/@myFr
iends;
AbsoluteTiming[friendsOfFriends=VKMutural[myI D,#,Clean->True]&/@myFriends][[1]]
cleanFoF=DeleteCases[#,_Rule]&/@friendsO fFriends;
gFriendsOfFriends={};
Do[Do[
AppendTo[gFriendsOfFriends,
UndirectedEdge[myFriends[[i]],cleanFoF[[i,j]]
]]
,{j,1,Length[cleanFoF[[i]]]}]
,{i,1,Length[myFriends]}]
30
DuplicateEdgeQ[a_,b_]:=If[a[[1]]==b[[2]], True,False]
graph=
Join[gMyFriends,gFriendsOfFriends];
graph//Length
graph=DeleteDuplicates[graph,DuplicateEd
geQ];
graph//Length
AbsoluteTiming[
friendsInfo=VKInfo[
StringReplace[ToString@Append[myFriends,myID]
,
{"{"->"","}"->""," "->""}], Photo->True]][[1]]
info=Framed[Column[{Style[#[[1]],Bold,Black], #[[2]]},Alignment->Center],Background- >LightGray]&/@friendsInfo;
combined={Append[myFriends,myID],info} ; friends=Rule@@#&/@combined;
Export["C:\\Users\\%USERNAME%\\Desktop\\graph
.pdf",Graph[graph,VertexShape- >friends,ImageSize->10000,VertexSize->1]]
Export["C:\\Users\\%USERNAME%\\Desktop\\
comm.pdf",CommunityGraphPlot@Graph[graph,Vert exShape->friends,ImageSize->10000]]
Результат работы приложения представлен на рис. 10.
31
Рис. 10. Визуализация дружественных связей
32
3. ЗАДАНИЯ ДЛЯ ПРАКТИЧЕСКИХ РАБОТ
Задание № 1. Построение эквивалентного графа
Прежде чем приступать к решению, внимательно ознакомьтесь с комментариями перед каждым вариантом. Не забывайте, что верное решение задачи зависит, в первую очередь, от правильной нумерации вершин.
Вариант 1
На рис. 11 показан пример некоторого сложного графа. Постройте эквивалентный граф. В решении должны быть указаны исходная матрица смежности, измененная матрица смежности и матрица смежности эквивалентного графа. Рассчитайте коэффициенты эквивалентности для выделенных позиций.
Рис. 11. Исходный граф
Комментарии к решению
Прежде всего, надо обратить внимание на оси симметрии, вокруг которых группируются вершины. Точка, через которую пролегает ось симметрии, необязательно должна совпадать с вершинами графа. В этой задаче ось проходит
33
через геометрический центр фигуры, перпендикулярно ее плоскости. Чтобы решить задачу с минимальным количеством шагов, нумерацию лучше начать с крайних вершин и по часовой стрелке двигаться к центру.
Вариант 2
На рис. 12 представлен пример некоторого сложного графа. Постройте эквивалентный граф. В решении должны быть указаны
исходная матрица смежности, измененная матрица смежности и матрица смежности эквивалентного графа. Рассчитайте коэффициенты эквивалентности для выделенных позиций.
Рис. 12. Исходный граф
Комментарии к решению
Основной момент, на который надо обратить внимание, это оси симметрии, вокруг которых группируются вершины. В данной задаче ось
проходит через центр фигуры, перпендикулярно ее плоскости. Чтобы решить задачу с минимальным количеством шагов, нумерацию лучше начать с крайних вершин и по часовой стрелке двигаться к центру.
34
Вариант 3
На рис. 13 показан пример некоторого сложного графа. Постройте эквивалентный граф. В решении должны быть представлены исходная матрица смежности, измененная матрица смежности и матрица смежности эквивалентного графа. Рассчитайте коэффициенты эквивалентности для выделенных позиций.
Рис. 13. Исходный граф
Комментарии к решению
Самое главное, на что следует обратить внимание, это оси симметрии, вокруг которых группируются вершины. В этой задаче ось проходит через центр фигуры и лежит в ее плоскости. Фигура симметрична относительно вертикальной оси. Чтобы решить задачу с минимальным количеством шагов, нумерацию лучше начать с верхних акторов и перемещаться к нижним акторам.
35
Вариант 4
На рис. 14 представлен пример некоторого сложного графа. Постройте эквивалентный граф. В решении должны быть указаны исходная матрица смежности, измененная матрица смежности и матрица смежности эквивалентного графа. Рассчитайте коэффициенты эквивалентности для выделенных позиций
Рис. 14. Исходный граф
Комментарии к решению
Основной момент, на который надо обратить внимание, это оси симметрии, вокруг которых группируются вершины. Фигура симметрична и относительно горизонтальной, и относительно вертикальной оси. В отличие от первого и второго варианта, в этой задаче ось, вокруг которой будет построен эквивалентный граф, проходит через центр фигуры и лежит в ее плоскости. Чтобы решить задачу с минимальным количеством шагов, нумерацию лучше начать с верхних акторов и перемещаться к нижним акторам.
36
Вариант 5
На рис. 15 представлен пример некоторого сложного графа. Постройте эквивалентный граф. В решении должны быть указаны исходная матрица смежности, измененная матрица смежности и матрица смежности эквивалентного графа. Рассчитайте коэффициенты эквивалентности для выделенных позиций.
Рис. 15. Исходный граф
Комментарии к решению
Основной момент, на который надо обратить внимание, это оси симметрии, вокруг которых группируются вершины. В данной задаче ось проходит через центральную вершину фигуры, перпендикулярно ее плоскости. Чтобы решить задачу
сминимальным количеством шагов, нумерацию лучше начать
сцентральной вершины и по часовой стрелке двигаться к крайним вершинам.
Вариант 6
На рис. 16 представлен пример некоторого сложного графа. Постройте эквивалентный граф. В решении должны быть указаны исходная матрица смежности, измененная матрица смежности и матрица смежности эквивалентного
37
графа. Рассчитайте коэффициенты эквивалентности для выделенных позиций.
Рис. 16. Исходный граф
Комментарии к решению
В этой задаче несколько осей симметрии. Основная работа, которую нужно сделать, — найти эти оси и правильно сгруппировать вокруг них вершины. Чтобы выполнить задачу с минимальным количеством шагов, надо провести нумерацию внутри каждой клики и закончить общую нумерацию в графе центральной вершиной.
Вариант 7
На рис. 17 представлен пример некоторого сложного графа. Постройте эквивалентный граф. В решении должны быть указаны исходная матрица смежности, измененная матрица смежности и матрица смежности эквивалентного графа. Рассчитайте коэффициенты эквивалентности для выделенных позиций.
38