Датотека:KruskalDemo.gif

Извор: testwiki
Пређи на навигацију Пређи на претрагу
    Оригинална датотека (314 × 323 пиксела, величина датотеке: 415 kB, MIME тип: image/gif, петља, 93 кадра, 47 с)

    Ова датотека се налази на Викимедијина остава и може да се користи на другим пројектима. Њен опис је приказан испод.

    Опис

    Опис
    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)
    

    Лиценцирање

    Ја, носилац ауторског права над овим делом, објављујем исто под следећом лиценцом:
    w:sr:Creative Commons
    ауторство делити под истим условима
    Дозвољено је:
    • да делите – да умножавате, расподељујете и преносите дело
    • да прерађујете – да прерадите дело
    Под следећим условима:
    • ауторство – Морате да дате одговарајуће заслуге, обезбедите везу ка лиценци и назначите да ли су измене направљене. Можете то урадити на било који разуман манир, али не на начин који предлаже да лиценцатор одобрава вас или ваше коришћење.
    • делити под истим условима – Ако измените, преобразите или доградите овај материјал, морате поделити своје доприносе под истом или компатибилном лиценцом као оригинал.

    Поднаписи

    Укратко шта ова датотека представља/приказује

    Ставке приказане у овој датотеци

    приказује

    24. децембар 2016

    323 пиксел

    314 пиксел

    29632d222eeed6306182565f60864600f0660a8c

    Историја датотеке

    Кликните на датум/време да бисте видели тадашњу верзију датотеке.

    Датум/времеМинијатураДимензијеКорисникКоментар
    тренутна14:52, 24. децембар 2016.Минијатура за верзију на дан 14:52, 24. децембар 2016.314 × 323 (415 kB)wikimediacommons>Shiyu JiUser created page with UploadWizard

    Нема страница које користе ову датотеку.