Excerpt from The Satellite List and New Data Structures for Symmetric Traveling Salesman Problems ††

by Colin Osterman and César Rego

 

Hearin Center for Enterprise Science, School of Business Administration,

University of Mississippi, University, MS 38677, USA.  

Latest Revision: March, 2003.

 

 

3.1 The Satellite List

Our new data structure, the satellite list, provides a basis for representing any symmetric path or cycle that may have been previously encoded using a doubly-linked list. The satellite list can operate in the same capacity as a doubly-linked list with the following key difference: the satellite list represents a tour without implying a fixed orientation of the path, which is why we qualify our claim for symmetric tours. The “next” node in the path depends on the current orientation, information that is naturally preserved in traversing the satellite list but otherwise neglected by the doubly-linked list. A primary consequence of avoiding a fixed orientation is that the subpath reversal operation is performed easily and in constant time. In addition, the satellite list retains the same efficiency as the doubly-linked list in terms of the memory it occupies and the commands it requires to access adjacent nodes.

To obtain a suitable structure that lacks the structural weakness of the linked list but retains its simplicity, its strict representation is disassembled. A linked list node contains two data members: a pointer to the previous client node and a pointer to the next client node. Pointers should operate in a symmetric fashion, suggesting that they point toward “adjacent” nodes, rather than “next” or “previous” ones. To accomplish this, the pointers are first removed from the structure and given their own structures, called satellites, whose sole purpose is handling the links among clients in the list. Each satellite points not to an adjacent list node, as in the linked list representation, but rather to the list node’s satellite. To read the tour starting from a client, one of its satellites is chosen to begin the traversal. It is arbitrary which satellite is chosen, just as it should be, since it makes no difference in which direction a symmetric tour is traversed. The traversal operation then follows the satellite’s pointer to the next satellite, the client is noted, and the process continues. Therefore, reading the tour involves traversing one of two distinct singularly linked lists of satellites and noting the associated cities.

 

3.2 Logical Representation

Figure 3.1 depicts a city represented first as a doubly-linked list node and then as a satellite list node. The distinguishing characteristic of the satellite list node is its avoidance of direct links with adjacent structures. Instead, its satellites link the cities indirectly. The dashed lines in the figure emphasize the parts of the structure that indicate relationships among components of the list node. From a satellite, there exists some means to immediately access the complement satellite. A similar relationship associates a satellite with its city. It is possible for these relationships to be constructed (e.g. storing a pointer or an index value of the desired component), but it is more efficient to take advantage of the implementation in which these relationships are implied, as is illustrated in more detail in the next section …

 

 

 

Figure 3.1. The Doubly-Linked List vs. the Satellite List

 

Figure 3.1 discloses the functional differences between the two types of nodes. The city represented by the doubly-linked list node is constructed in memory in such a way that its data members (typically “Next” and “Previous”) cannot be referenced directly. The data members are accessed by name, and are thus not interchangeable and necessitate an orientation. Also, since the data members store references to entire list nodes, the node from which a reference was obtained is not remembered. For instance, it is not correct to assume that a node has been obtained from the “Next” pointer of the preceding node because it is equally likely to have been obtained from the “Previous” pointer of the following node, and storing the information explicitly costs time and memory. On the other hand, this information remains evident when using the satellite list because each satellite is reached from a distinct source. Furthermore, two satellites sharing a list node operate as independent nodes in separate singly-linked lists, lending directional independence to the list node as a whole. Its unique symmetry allows the “direction” of the node to depend on how the node was obtained without incorporating any costly, explicit decision making into the code.

 

3.3 Efficient Physical Representation

A satellite list may be constructed and used without specifically declaring each satellite’s links (pointers or indices) to its associated complement satellite or its client (city). This property reduces the number of pointers needed to represent a list node from four to two, cutting the memory requirement by half.

The tour is maintained in a single one-dimensional array of length twice n (where n is the number of cities). Each element in the array is a satellite node and contains the value of (or pointer to) its adjacent satellite. For each city, there exists two physical array positions (satellites), which, together, are considered a logical position representing the client. The city itself needs no physical position since it can be uniquely identified by the indices of its satellites. Figure 3.2 diagrams an example satellite list stored in an integer array representing the circuit (0,1,2,3,4,0).

 

Figure 3.2. Example of Efficient Satellite List Implementation

 

A key factor that makes the use of the efficient implementation desirable is the ease with which the implied relationships mentioned in the previous section can be found. Given some satellite, the queries are to determine its complement satellite and its client (city). The general formulas to compute these queries are given in the figure along with the equivalent bitwise operations in the C language. A satellite’s client (city) can be computed by integer-dividing the index by 2 (no remainder). An identical result is achieved with the bitwise shift operator, “>>”. To find a satellite’s complement, the index should be incremented if it is even and decremented if it is odd. The “%” gives the remainder of division. A bitwise operator is also available for computing a satellite’s complement satellite—the exclusive or, “^”. These and other bitwise operators are extremely fast because they don’t request any arithmetical or logical computation from the processor; thus, the measure of overhead they contribute to routine operations such as Previous() is insignificant. For languages that do not support bitwise operations, using the general formulas may be too costly. In this case, the computational overhead can be avoided by storing “client” and “complement” explicitly, although doing so doubles the memory requirement for the structure. Example C code for both full and efficient implementations and for queries using the bitwise operators is provided in the appendix.

Although Figure 3.2 shows all odd satellites pointing to odd satellites, the list is perfectly functional when some odd satellites point to even satellites, or vice versa. Indeed, this becomes the case for the endpoints of a reversed subpath. Interestingly, when a satellite list is organized so that the entire list can be read from just the even or

odd satellites, the satellite list array can be unioned with a doubly-linked list structure, and the tour can be read correctly from either.

3.4 Memory and Time Efficiency

Unlike other data structures proposed for the TSP, the satellite list does not impose additional memory requirements for representing the tour. The memory required to store a tour represented by the satellite list is exactly equal to that required by the doubly-linked list—two pointer slots per city. This is not to say that additional fields cannot be added to a list node for use with specialized algorithms.

Also, the satellite list does not impose additional computational effort for the traversal procedures. Enumerating across several nodes is simply a matter of following a singly-linked list of satellite nodes; thus, the computational cost is the same as for the array representation. There is no need to check a “Reverse” bit (2-level tree) or to splay to the root of a tree (splay tree).

 

3.5 Subpath Reversal

We return to the subpath reversal issue, discussed in Section 2.2. This problem has been of great interest to scholars studying TSP data structures due to its occurrence in both classic k-opt and state-of-the-art search methods. In fact, this issue motivates the satellite list design.

The tree-based data structures mentioned in Section 2 were proposed with the aim of lowering the computational complexity of the subpath reversal operation. The splay tree claims to handle the operation in O time, while the 2-level tree claims (log)n(On) time, with better results for problems as large as n = 106 due to lower overhead costs. Clearly, however, because of the satellite list’s symmetric design, the subpath reversal operation is a natural one and is performed easily in constant time, . The ease of the operation is illustrated in Figure 3.3.

 

 

 

Figure 3.3. Subpath Reversal with a Linked List vs. a Satellite List


Figure 3.3 depicts isolated subpaths for a doubly-linked list (top) and a satellite list (bottom), where straight arcs point to the following nodes in the list, and the curved arcs point to preceding nodes (only applicable to the doubly-linked list). An analogy would be to view the linked list as a one-way street and the satellite list as a two-lane road. As is easily seen, the subpath in the satellite list reforms the original structure when rotated 180 degrees—only pointers associated with nodes in the broken edges need to be changed. The subpath in the doubly-linked list, however, does not match correctly when rotated—every pointer associated with nodes in the subpath must be changed. The “street” analogy would have traffic flowing smoothly only on the two-lane road if a section of the road were reversed. In the linked list, additional computational time must be taken to correct the intermediate arcs in the reversed subpath. Although the 2-level tree reduces the time complexity of this correction, the satellite data structure eliminates the problem. The data structure currently thought to be the state-of-the-art, the 2-level tree, maintains for each level a doubly-linked list. Therefore, it is a natural idea to use the satellite list to improve the 2-level tree for any algorithm that is thought to be most efficiently implemented with this structure….

In pointer-supporting languages, it is, in fact, possible to obtain a direct reference for these members, but the reference can only be used to indirectly retrieve values that can also be stored directly, and so the reference is not meaningful

 

††Traveling salesman problem.

 

If a salesman starts at point A, and if the distances between any two points is known, what is the shortest round-trip the salesman can make which will visit all points once and return to point A?

 

If a salesman starts at point A, and if the distances between any two points is known, what is the shortest round-trip the salesman can make which will visit all points once and return to point A?

 

The traveling salesman problem[1] (TSP) is a problem in discrete or combinatorial optimization. It is a prominent illustration of a class of problems in computational complexity theory which are hard to solve.

 

Problem statement

Given a number of cities and the costs of traveling from any city to any other city, what is the cheapest round-trip route that visits each city exactly once and then returns to the starting city?

An equivalent formulation in terms of graph theory is: Given a complete weighted graph (where the vertices would represent the cities, the edges would represent the roads, and the weights would be the cost or distance of that road), find a Hamiltonian cycle with the least weight. It can be shown that the requirement of returning to the starting city does not change the computational complexity of the problem.

The problem is of considerable practical importance, apart from evident transportation and logistics areas. A classic example is in printed circuit manufacturing: scheduling of a route of the drill machine to drill holes in a PCB. In robotic machining or drilling applications, the "cities" are parts to machine or holes (of different sizes) to drill, and the "cost of travel" includes time for retooling the robot (single machine job sequencing problem