Файл:DijkstraDemo.gif

ДейкстраДемо.gif (521 × 518 пикселей, размер файла: 5,94 МБ, тип MIME: image/gif , зацикленный, 127 кадров, 1 мин 4 с)

Краткое содержание

ОписаниеДейкстраДемо.gif
Русский: Демонстрация алгоритма Дейкстры на основе евклидового расстояния. Красные линии — кратчайший путь покрытия. Синие линии указывают, где происходит релаксация.
Дата
ИсточникСобственная работа
АвторШию Джи

Код Python 3

''' Кратчайший путь покрытия Дейкстры (SVG) с использованием очереди приоритетов. Сначала используйте этот код для генерации кадров SVG. Затем преобразуйте в битовые изображения и конвертируйте в GIF. '''# размер диапазона N  =  500 поле  =  20def  norm ( px ,  py ):  return  (( px [ 0 ] - py [ 0 ]) ** 2 + ( px [ 1 ] - py [ 1 ]) ** 2 ) ** .5def  saveToSVG ( nFrames ,  points ,  edges ,  firmed ,  relax ):  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 " ) для p в точках : f . write ( "<circle cx= \" " + str ( p [ 0 ] + margin ) + " \" cy= \" " + str ( N - p [ 1 ] + margin ) + " \" r= \" 5 \" fill= \" white \" stroke= \" black \" /> \n " ) for i in range ( len ( edges )): for j in edge [ i ]: f .запись ( "<строка x1= \" " + str ( точки [ i ][ 0 ] + отступ ) + " \" y1= \" " + str ( N - точки [ i ][ 1 ] + отступ ) + " \" x2= \" " + str ( точки [ j ][ 0 ] + отступ ) + " \" y2= \"                          "  +  str ( N ​​- points [ j ][ 1 ] + margin )  +  " \" stroke= \" grey \" stroke-width= \" .5 \" /> \n " )  для  L  в  фиксированном состоянии :  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 " ) для L в расслабленном состоянии : f .запись ( "<строка 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 ):  импорт  случайных чисел  как  r  r . seed ( 10 )  res  =  []  для  i  в  диапазоне ( n ):  pt  =  [ r . randint ( 0 , N )  для  _  в  [ 0 ,  1 ]]  если  pt  не  в  res :  res  +=  [ pt ]  вернуть  res# эвристика: сосед с радиусом, например, N/3 def generateEdges (  n , points )  : импортировать  случайный  как  r  r.seed  ( 10 ) sides = [ ] for i in range ( n ): dst = [] for j in range ( n ) : if i != j and norm ( points [ i ] , points [ j ] ) < N / 3 : dst.append ( j ) ; sides.append ( dst ) return sides                         def  dijkstra ( n ,  points ,  sides ):  nframe  =  0  dist  =  [ float ( "inf" )  for  i  in  range ( n )]  prev  =  [ -1 for _ in range ( n )] cover = [] import heapq dist [ 0 ] = 0.0 heap = [[ dist [ i ]  , i ] for i in range ( n )] while len ( heap ) > 0 : u = heap [ 0 ] [ 1 ] if prev [ u ] !=- 1 : cover.append ([ points [ prev [ u ]], points [ u ]]) saveToSVG ( nframe , points , sides , cover , [ ]) nframe += 1 heapq . heappop ( куча ) для i в ребрах [ u ]: если i != u и dist [ i ] > dist [ u ] + norm ( points [ i ], points [ u ]): dist [ i ] = dist [ u ] + norm ( points [ i ], points [ u ]) prev [ i ] = u для j в диапазоне ( len ( куча )): if heap [ j ][                                                               1 ]  ==  i :  heap [ j ][ 0 ]  =  dist [ i ]  break  heapq . heapify ( heap )  saveToSVG ​​( nframe ,  points ,  sides ,  cover ,  [[ points [ u ],  points [ i ]]])  nframe += 1  возврат  расст. ,  пред.# тест 50 баллов временно n  =  50 баллов  =  generatePoints ( n ) es  =  generateEdges ( n ,  pts ) dijkstra ( n ,  pts ,  es )

Лицензирование

Я, владелец авторских прав на данную работу, настоящим публикую ее на условиях следующей лицензии:
w:ru:Creative Commons
атрибуция доля одинаково
Этот файл лицензирован в соответствии с лицензией Creative Commons Attribution-Share Alike 4.0 International.
Вы свободны:
  • делиться – копировать, распространять и передавать работу
  • ремиксовать – адаптировать произведение
При следующих условиях:
  • атрибуция – Вы должны указать соответствующее авторство, предоставить ссылку на лицензию и указать, были ли внесены изменения. Вы можете сделать это любым разумным способом, но не таким образом, который подразумевает, что лицензиар одобряет вас или ваше использование.
  • распространяйте на равных условиях – если вы делаете ремиксы, преобразуете или дополняете материал, вы должны распространять свои вклады по той же или совместимой лицензии, что и оригинал.
https://creativecommons.org/licenses/by-sa/4.0CC BY-SA 4.0Creative Commons Attribution-Share Alike 4.0истинныйистинный

Подписи

Add a one-line explanation of what this file represents

Items portrayed in this file

depicts

creator

some value

author name string: Shiyu Ji
Wikimedia username: Shiyu Ji
URL: http://commons.wikimedia.org/wiki/User:Shiyu_Ji

copyright status

copyrighted

copyright license

Creative Commons Attribution-ShareAlike 4.0 International

inception

28 December 2016

source of file

original creation by uploader

media type

image/gif

История файла

Нажмите на дату/время, чтобы просмотреть файл в том виде, в котором он был в тот момент.

Дата/ВремяМиниатюраРазмерыПользовательКомментарий
текущий12:26, ​​28 декабря 2016 г.521 × 518 (5,94 МБ)Шию ДжиПользователь создал страницу с помощью UploadWizard

Глобальное использование файлов

Этот файл используют и другие вики:

  • Использование на de.wikipedia.org
    • Алгоритм Дейкстры
  • Использование на he.wikipedia.org
    • אלגוריתם דייקסטרה
    • משתמש:Garanty/אלגוריתם דייקסטרה
  • Использование на ko.wikipedia.org
    • 데이크스트라 알고리즘
  • Использование на no.wikipedia.org
    • алгоритм Дейкстры
Retrieved from "https://en.wikipedia.org/wiki/File:DijkstraDemo.gif"