Датотека:KruskalDemo.gif
Извор: testwiki
Пређи на навигацију
Пређи на претрагу

Величина овог приказа: 314 × 323 пиксела.
Оригинална датотека (314 × 323 пиксела, величина датотеке: 415 kB, MIME тип: image/gif, петља, 93 кадра, 47 с)
Ова датотека се налази на Викимедијина остава и може да се користи на другим пројектима. Њен опис је приказан испод.
Опис
| ОписKruskalDemo.gif |
English: A demo for Kruskal's algorithm to find minimum spanning tree on a 2D plane. |
| Датум | |
| Извор | Сопствено дело |
| Аутор | Shiyu Ji |
Python 3 Code
'''
Minimum Spanning Tree generation (SVG) for Kruskal's algorithm.
Firstly use this code to generate SVG frames.
Then transform to bitmaps and convert to GIF.
'''
# range size
N = 300
margin = 20
def norm(x, y):
return (x*x+y*y)**.5
class Edge(object):
def __init__(self, source, target, points):
self.u = source
self.v = target
self.len = norm(points[source][0]-points[target][0], points[source][1]-points[target][1])
class UnionNode(object):
def __init__(self):
self.next = None
def saveToSVG(nFrames, points, firmed, trying):
f = open('demo_'+'0'*(3-len(str(nFrames)))+str(nFrames)+'.svg', 'w')
f.write("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n")
for p in points:
f.write("<circle cx=\"" +str(p[0]+margin)+ "\" cy=\""+ str(N-p[1]+margin) +"\" r=\"5\" fill=\"white\" stroke=\"black\"/>\n")
for L in firmed:
f.write("<line x1=\"" +str(L[0][0]+margin)+ "\" y1=\""+ str(N-L[0][1]+margin) +"\" x2=\"" + str(L[1][0]+margin) + "\" y2=\"" + str(N-L[1][1]+margin) + "\" stroke=\"red\" stroke-width=\"5\"/>\n")
for L in trying:
f.write("<line x1=\"" +str(L[0][0]+margin)+ "\" y1=\""+ str(N-L[0][1]+margin) +"\" x2=\"" + str(L[1][0]+margin) + "\" y2=\"" + str(N-L[1][1]+margin) + "\" stroke=\"blue\" stroke-width=\"5\"/>\n")
f.write("</svg>\n")
f.close()
def generatePoints(n):
import random as r
r.seed(100)
res = []
for i in range(n):
pt = [r.randint(0,N) for _ in [0, 1]]
if [pt] not in res:
res += [pt]
return res
def kruskal(n, points):
n = len(points)
union = [UnionNode() for _ in points]
edges = []
for i in range(n-1):
for j in range(i+1, n):
e = Edge(i, j, points)
edges.append(e)
edges.sort(key = lambda x:-x.len)
mst = []
nframe = 0
saveToSVG(nframe, points, mst, [])
nframe+=1
while len(mst)<n-1:
s = edges[-1].u
t = edges[-1].v
saveToSVG(nframe, points, mst, [[points[s], points[t]]])
nframe+=1
p = union[s]
q = union[t]
while p.next != None: p = p.next
while q.next != None: q = q.next
if p!=q:
newNode = UnionNode()
p.next = q.next = newNode
mst.append([points[s], points[t]])
saveToSVG(nframe, points, mst, [])
nframe+=1
edges.pop()
return mst
# test 30 points temporarily
n = 30
pts = generatePoints(n)
kruskal(n, pts)
Лиценцирање
Ја, носилац ауторског права над овим делом, објављујем исто под следећом лиценцом:
Ова датотека је доступна под лиценцом Creative Commons Ауторство-Делити под истим условима 4.0 међународна.
- Дозвољено је:
- да делите – да умножавате, расподељујете и преносите дело
- да прерађујете – да прерадите дело
- Под следећим условима:
- ауторство – Морате да дате одговарајуће заслуге, обезбедите везу ка лиценци и назначите да ли су измене направљене. Можете то урадити на било који разуман манир, али не на начин који предлаже да лиценцатор одобрава вас или ваше коришћење.
- делити под истим условима – Ако измените, преобразите или доградите овај материјал, морате поделити своје доприносе под истом или компатибилном лиценцом као оригинал.
Поднаписи
Укратко шта ова датотека представља/приказује
Ставке приказане у овој датотеци
приказује
неке вредности
24. децембар 2016
425.444 бајт
323 пиксел
314 пиксел
image/gif
29632d222eeed6306182565f60864600f0660a8c
Историја датотеке
Кликните на датум/време да бисте видели тадашњу верзију датотеке.
| Датум/време | Минијатура | Димензије | Корисник | Коментар | |
|---|---|---|---|---|---|
| тренутна | 14:52, 24. децембар 2016. | 314 × 323 (415 kB) | wikimediacommons>Shiyu Ji | User created page with UploadWizard |
Употреба датотеке
Нема страница које користе ову датотеку.