Задания
Версия для печати и копирования в MS Word
Тип 27 № 76695
i

В ла­бо­ра­то­рии про­во­дит­ся экс­пе­ри­мент, со­сто­я­щий из мно­же­ства ис­пы­та­ний. Ре­зуль­тат каж­до­го ис­пы­та­ния пред­став­ля­ет­ся в виде пары чисел. Для ви­зу­а­ли­за­ции ре­зуль­та­тов эта пара рас­смат­ри­ва­ет­ся как ко­ор­ди­на­ты точки на плос­ко­сти, и на чер­те­же от­ме­ча­ют­ся точки, со­от­вет­ству­ю­щие всем ис­пы­та­ни­ям.

По ре­зуль­та­там экс­пе­ри­мен­та про­во­дит­ся кла­сте­ри­за­ция по­лу­чен­ных ре­зуль­та­тов: на плос­ко­сти вы­де­ля­ет­ся не­сколь­ко кла­сте­ров  — кру­гов ра­ди­у­са не более 2 еди­ниц так, что каж­дая точка по­па­да­ет ровно в один кла­стер.

Цен­тром кла­сте­ра счи­та­ет­ся та из вхо­дя­щих в него точек, для ко­то­рой ми­ни­маль­но мак­си­маль­ное из рас­сто­я­ний до всех осталь­ных точек кла­сте­ра.

При этом рас­сто­я­ние вы­чис­ля­ет­ся по стан­дарт­ной фор­му­ле рас­сто­я­ния между точ­ка­ми на ев­кли­до­вой плос­ко­сти.

В файле за­пи­сан про­то­кол про­ве­де­ния экс­пе­ри­мен­та. Каж­дая стро­ка файла со­дер­жит два числа: ко­ор­ди­на­ты X и Y точки, со­от­вет­ству­ю­щей од­но­му ис­пы­та­нию. По дан­но­му про­то­ко­лу надо опре­де­лить ми­ни­маль­ное рас­сто­я­ние между цен­тра­ми двух раз­лич­ных кла­сте­ров.

Файл A

Файл B

Вам даны два вход­ных файла (A и B), каж­дый из ко­то­рых имеет опи­сан­ную выше струк­ту­ру.

В от­ве­те за­пи­ши­те два числа: сна­ча­ла ми­ни­маль­ное рас­сто­я­ние между цен­тра­ми кла­сте­ров для файла A, затем для файла B.

В ка­че­стве зна­че­ния ука­зы­вай­те целую часть от умно­же­ния най­ден­но­го чис­ло­во­го зна­че­ния на 10 000.

 

Ответ:

Спрятать решение

Ре­ше­ние.

По­стро­им диа­грам­мы для файла А и Б. Для этого вос­поль­зу­ем­ся таб­лич­ным ре­дак­то­ром.

 

Диа­грам­ма для файла А:

Диа­грам­ма для файла Б:

 

При­ведём ре­ше­ние на языке Python для файла А.

import math

f = open('27A.txt')

claster = [[] for i in range(3)]

for s in f:

x,y = [float(c) for c in s.split()]

if y < -2:

claster[0].append ([x,y])

elif x > 4:

claster[1].append ([x,y])

else:

claster[2].append ([x,y])

def cent(cl):

rad = []

for i in cl:

rad.append((sum(math.dist(i,j) for j in cl),i))

return min(rad)[1]

center = [cent(i) for i in claster]

print(center)

mini = float('inf')

for i in range(len(center) - 1):

for j in range(i + 1, len(center)):

mini = min(mini, math.dist(center[i], center[j]))

print(int(mini * 10000))

 

При­ведём ре­ше­ние на языке Python для файла B.

import math

f = open('27B.txt')

claster = [[] for i in range(5)]

for s in f:

x,y = [float(c) for c in s.split()]

if y > 0 and x < -1:

claster[0].append ([x,y])

elif y >1.5 and x < 2:

claster[1].append ([x,y])

elif x > 1.5:

claster[2].append ([x,y])

elif y <-2 and x > 0:

claster[3].append ([x,y])

else:

claster[4].append ([x,y])

def cent(cl):

rad = []

for i in cl:

rad.append((sum(math.dist(i,j) for j in cl),i))

return min(rad)[1]

center = [cent(i) for i in claster]

print(center)

mini = float('inf')

for i in range(len(center) - 1):

for j in range(i + 1, len(center)):

mini = min(mini, math.dist(center[i], center[j]))

print(int(mini * 10000))

 

 

 

 

Ответ: 86630;35219.