Delwedd:KruskalDemo.gif
Oddi ar testwiki
Neidio i'r panel llywio
Neidio i'r bar chwilio
KruskalDemo.gif (314 × 323 picsel, maint y ffeil: 415 KB, ffurf MIME: image/gif, dolennog, 93 ffrâm, 47e)
Daw'r ffeil hon o Comin Wikimedia a gellir ei defnyddio gan brosiectau eraill. Dangosir isod y disgrifiad sydd ar dudalen ddisgrifio'r ffeil yno.
Crynodeb
| DisgrifiadKruskalDemo.gif |
English: A demo for Kruskal's algorithm to find minimum spanning tree on a 2D plane. |
| Dyddiad | |
| Ffynhonnell | Gwaith fy hun |
| Awdur | 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)
Trwyddedu
Yr wyf fi, deiliad yr hawlfraint ar y gwaith hwn, yn ei gyhoeddi yn ôl termau'r drwydded a ganlyn:
Trwyddedir y ffeil hon yn ôl termau'r drwydded Creative Commons Attribution-Share Alike 4.0 International.
- Mae'n rhydd i chi:
- rhannu – gallwch gopïo, dosbarthu a throsglwyddo'r gwaith
- ailwampio – gallwch addasu'r gwaith
- Ar yr amodau canlynol:
- cydnabyddiaeth – Mae'n rhaid i chi nodi manylion y gwaith hwn, rhoi dolen i'r drwydded, a nodi os y bu golygu arni, yn y modd a benwyd gan yr awdur neu'r trwyddedwr (ond heb awgrymu o gwbl eu bod yn eich cymeradwyo chi na'ch defnydd o'r gwaith).
- rhannu ar dermau tebyg – Os byddwch yn addasu'r gwaith hwn, neu yn ei drawsnewid, neu yn adeiladu arno, mae'n rhaid i chi ddosbarthu'r gwaith dan drwydded sy'n union yr un fath a'r gwreiddiol.
Captions
Add a one-line explanation of what this file represents
Items portrayed in this file
yn portreadu
some value
24 Rhagfyr 2016
source of file Saesneg
original creation by uploader Saesneg
data size Saesneg
425,444 byte
323 pixel
314 pixel
media type Saesneg
image/gif
checksum Saesneg
29632d222eeed6306182565f60864600f0660a8c
Hanes y ffeil
Cliciwch ar ddyddiad / amser i weld y ffeil fel ag yr oedd bryd hynny.
| Dyddiad/Amser | Bawdlun | Hyd a lled | Defnyddiwr | Sylw | |
|---|---|---|---|---|---|
| cyfredol | 14:52, 24 Rhagfyr 2016 | 314 × 323 (415 KB) | wikimediacommons>Shiyu Ji | User created page with UploadWizard |
Defnydd y ffeil
Mae'r 1 tudalennau a ddefnyddir isod yn cysylltu i'r ddelwedd hon:
