<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=VonNeumannAirport%2FLeonardong</id>
	<title>VonNeumannAirport/Leonardong - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=VonNeumannAirport%2FLeonardong"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=VonNeumannAirport/Leonardong&amp;action=history"/>
	<updated>2026-05-15T01:01:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=VonNeumannAirport/Leonardong&amp;diff=40090&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:28, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=VonNeumannAirport/Leonardong&amp;diff=40090&amp;oldid=prev"/>
		<updated>2021-02-07T05:28:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Traffic하고  Configuration을 각각 2차원 행렬로 표현했다. Traffic은 ( origin, destination )에 따른 traffic양이고, Configuration은 origin에서 destination 까지 떨어진 거리를 저장한 행렬이다. 전체 트래픽은 행렬에서 같은 위치에 있는 원소끼리 곱하도록 되어있다. 입출력 부분은 제외하고 전체 트래픽 구하는 기능까지만 구현했다.&lt;br /&gt;
&lt;br /&gt;
매우 데이터에 의존적인 프로그램이라는 생각이 든다. 만약 석천이형 생각대로 요구사항이 바뀐다면 지금 프로그램은 감당해낼 수 있을까?&lt;br /&gt;
&lt;br /&gt;
리팩토링 할 것.&lt;br /&gt;
 현재 요구사항에 맞추더라도 행렬에 해당하는 기능을 정리하고, 트래픽이나 거리 계산에는 행렬을 이용하는 식이 되어야 할 것이다. 지금처럼 상속받을 까닭이 없다.&lt;br /&gt;
 행렬 곱셈 연산을 정의하면 이를 이용하기 위해서는 트래픽이나 거리 행렬 중 어느 한 쪽은 전치행렬이 되어야 한다. 그러려면 전치 행렬 연산도 있어야겠다.&lt;br /&gt;
 거리를 계산하는 더 좋은 알고리즘이 있을까? 지금은 O(num of city^2).&lt;br /&gt;
 &lt;br /&gt;
 #1h 48m&lt;br /&gt;
 import unittest&lt;br /&gt;
 &lt;br /&gt;
 class Matrix:&lt;br /&gt;
     def __init__(self, numofGates):&lt;br /&gt;
         self.matrix = []&lt;br /&gt;
         for i in range( numofGates ):&lt;br /&gt;
             self.matrix.append([0]*numofGates)&lt;br /&gt;
     def getElement( self, origin, destination ):&lt;br /&gt;
         return self.matrix[origin-1][destination-1]&lt;br /&gt;
     &lt;br /&gt;
 class DistanceMatrix(Matrix):&lt;br /&gt;
     def __init__(self, numofGates):&lt;br /&gt;
         Matrix.__init__(self, numofGates)&lt;br /&gt;
     def construct( self, origins, destinations ):&lt;br /&gt;
         for o in origins:&lt;br /&gt;
             for d in destinations:&lt;br /&gt;
                 self.matrix[o-1][d-1] = abs( origins.index(o)&lt;br /&gt;
                                              - destinations.index(d) ) + 1&lt;br /&gt;
     def getDistance( self, origin, destination ):&lt;br /&gt;
         return self.getElement( origin, destination )&lt;br /&gt;
 &lt;br /&gt;
 class TrafficMatrix(Matrix):&lt;br /&gt;
     def __init__(self, numofGates):&lt;br /&gt;
         Matrix.__init__(self, numofGates)&lt;br /&gt;
     def construct( self, origin, traffics ):&lt;br /&gt;
         for traffic in traffics:&lt;br /&gt;
             self.matrix[origin-1][traffic.destination-1] = traffic.load&lt;br /&gt;
     def getLoad( self, origin, destination ):&lt;br /&gt;
         return self.getElement( origin, destination )&lt;br /&gt;
 &lt;br /&gt;
 class Traffic:&lt;br /&gt;
     def __init__(self, destination, load):&lt;br /&gt;
         self.destination = destination&lt;br /&gt;
         self.load = load&lt;br /&gt;
 &lt;br /&gt;
 def total( traffic, distance ):&lt;br /&gt;
     result = 0&lt;br /&gt;
     for origin in range( 1, MAX+1 ):&lt;br /&gt;
         for dest in range( 1, MAX+1 ):&lt;br /&gt;
             result += distance.getDistance(origin, dest)\&lt;br /&gt;
                       * traffic.getLoad(origin, dest)&lt;br /&gt;
     return result&lt;br /&gt;
 MAX = 25&lt;br /&gt;
 class TestDistance(unittest.TestCase):&lt;br /&gt;
     def setUp(self):    &lt;br /&gt;
         self.distMatrix = DistanceMatrix(MAX)&lt;br /&gt;
         self.traffic = TrafficMatrix(MAX)&lt;br /&gt;
     def testOneToOneDistance(self):&lt;br /&gt;
         self.distMatrix.construct( origins     = range(1,MAX+1),&lt;br /&gt;
                                    destinations= range(1,MAX+1) )&lt;br /&gt;
         for i in range( 1, MAX+1 ):&lt;br /&gt;
             self.assertEquals( 1, self.distMatrix.getDistance(i, i) )&lt;br /&gt;
     def testReversalDistance(self):&lt;br /&gt;
         self.distMatrix.construct( origins     = range(1,MAX+1),&lt;br /&gt;
                                    destinations= range(MAX,0,-1) )&lt;br /&gt;
         self.assertEquals( 1, self.distMatrix.getDistance( 1, MAX ) )&lt;br /&gt;
         self.assertEquals( MAX, self.distMatrix.getDistance( 1, 1 ) )&lt;br /&gt;
         self.assertEquals( 1, self.distMatrix.getDistance( MAX/2+1,# middle&lt;br /&gt;
                                                            MAX/2+1 ) )&lt;br /&gt;
     def testTraffic(self):&lt;br /&gt;
         self.traffic.construct( origin   = 1,&lt;br /&gt;
                                 traffics = [Traffic(1,100),&lt;br /&gt;
                                             Traffic(2,50)] )&lt;br /&gt;
         self.assertEquals( 100, self.traffic.getLoad( origin     = 1,&lt;br /&gt;
                                                       destination= 1 ) )&lt;br /&gt;
         self.assertEquals( 50, self.traffic.getLoad( origin     = 1,&lt;br /&gt;
                                                      destination= 2 ) )&lt;br /&gt;
     def testTotal(self):&lt;br /&gt;
         self.traffic.construct( origin   = 1,&lt;br /&gt;
                            traffics = [Traffic(2,100)])&lt;br /&gt;
         self.traffic.construct( origin   = 2,&lt;br /&gt;
                            traffics = [Traffic(1,200)])&lt;br /&gt;
         self.distMatrix.construct( origins      = [1,2],&lt;br /&gt;
                                    destinations = [1,2] )&lt;br /&gt;
         self.assertEquals( 600, total( self.traffic, self.distMatrix ) )&lt;br /&gt;
         self.distMatrix.construct( origins      = [1,2],&lt;br /&gt;
                                    destinations = [2,1] )&lt;br /&gt;
         self.assertEquals( 300, total( self.traffic, self.distMatrix ) )&lt;br /&gt;
     def testReal(self):&lt;br /&gt;
         self.traffic.construct( origin   = 1,&lt;br /&gt;
                    traffics = [Traffic(2,10), Traffic(3,15)])&lt;br /&gt;
         self.traffic.construct( origin   = 2,&lt;br /&gt;
                    traffics = [Traffic(3,10)])&lt;br /&gt;
         self.traffic.construct( origin   = 3,&lt;br /&gt;
                    traffics = [Traffic(1,12), Traffic(2,20)])&lt;br /&gt;
         self.distMatrix.construct( origins      = [1,2,3],&lt;br /&gt;
                                    destinations = [2,3,1] )&lt;br /&gt;
         self.assertEquals( 122, total( self.traffic, self.distMatrix ) )&lt;br /&gt;
         self.distMatrix.construct( origins      = [2,3,1],&lt;br /&gt;
                                    destinations = [3,2,1] )&lt;br /&gt;
         self.assertEquals( 119, total( self.traffic, self.distMatrix ) )&lt;br /&gt;
 if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
     unittest.main()&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>