Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебники 80212

.pdf
Скачиваний:
2
Добавлен:
01.05.2022
Размер:
1.06 Mб
Скачать

ss_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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]