File:PrimAlgDemo.gif
Da testwiki.
Vai alla navigazione
Vai alla ricerca
PrimAlgDemo.gif (314 × 323 pixel, dimensione del file: 248 KB, tipo MIME: image/gif, ciclico, 58 frame, 29 s)
Questo file proviene da Wikimedia Commons e può essere utilizzato da altri progetti. Di seguito viene mostrata la descrizione presente nella pagina di descrizione del file.
Dettagli
| DescrizionePrimAlgDemo.gif |
English: A demo for Prim's algorithm to find minimum spanning tree on a 2D plane. |
| Data | |
| Fonte | Opera propria |
| Autore | Shiyu Ji |
| GIF sviluppo InfoField |
Python 3 Code
'''
Minimum Spanning Tree generation (SVG) for Prim'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
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 prim(n, points):
n = len(points)
mst = []
S = set()
import heapq
heap = []
nframe = 0
while len(mst)<n-1:
if len(S)==0:
topV = 0
else:
while heap[0][2] in S:
heapq.heappop(heap)
topV = heap[0][2]
saveToSVG(nframe, points, mst, [[points[heap[0][1]], points[heap[0][2]]]])
nframe+=1
mst.append([points[heap[0][1]], points[topV]])
heapq.heappop(heap)
saveToSVG(nframe, points, mst, [])
nframe+=1
S.add(topV)
for i in range(n):
if i not in S:
L = norm(points[i][0]-points[topV][0], points[i][1]-points[topV][1])
heapq.heappush(heap, [L, topV, i])
return mst
# test 30 points temporarily
n = 30
pts = generatePoints(n)
prim(n, pts)
Licenza
Io, detentore del copyright su quest'opera, dichiaro di pubblicarla con la seguente licenza:
Questo file è disponibile in base alla licenza Creative Commons Attribuzione-Condividi allo stesso modo 4.0 Internazionale
- Tu sei libero:
- di condividere – di copiare, distribuire e trasmettere quest'opera
- di modificare – di adattare l'opera
- Alle seguenti condizioni:
- attribuzione – Devi fornire i crediti appropriati, un collegamento alla licenza e indicare se sono state apportate modifiche. Puoi farlo in qualsiasi modo ragionevole, ma non in alcun modo che suggerisca che il licenziante approvi te o il tuo uso.
- condividi allo stesso modo – Se remixi, trasformi o sviluppi il materiale, devi distribuire i tuoi contributi in base alla stessa licenza o compatibile all'originale.
Didascalie
Aggiungi una brevissima spiegazione di ciò che questo file rappresenta
Elementi ritratti in questo file
raffigura
Valore sconosciuto senza un elemento Wikidata
24 dic 2016
image/gif
Cronologia del file
Fare clic su un gruppo data/ora per vedere il file come si presentava nel momento indicato.
| Data/Ora | Miniatura | Dimensioni | Utente | Commento | |
|---|---|---|---|---|---|
| attuale | 13:52, 24 dic 2016 | 314 × 323 (248 KB) | wikimediacommons>Shiyu Ji | User created page with UploadWizard |
Utilizzo del file
La seguente pagina usa questo file:
