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

Disgrifiad
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:
w:en:Creative Commons
cydnabyddiaeth rhannu ar dermau tebyg
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

24 Rhagfyr 2016

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/AmserBawdlunHyd a lledDefnyddiwrSylw
cyfredol14:52, 24 Rhagfyr 2016Bawdlun y fersiwn am 14:52, 24 Rhagfyr 2016314 × 323 (415 KB)wikimediacommons>Shiyu JiUser created page with UploadWizard

Mae'r 1 tudalennau a ddefnyddir isod yn cysylltu i'r ddelwedd hon: