Efficient Connectivity Testing of Hypercubic Networks with Faults Tom´aˇs Dvoˇra´k1, Jiˇr´ı Fink1, , Petr Gregor1, , V´aclav Koubek1, , and Tomasz Radzik2 1
Faculty of Mathematics and Physics, Charles University, Prague, Czech Republic {dvorak@ksvi,fink@kam,gregor@ktiml,koubek@ktiml}.mff.cuni.cz 2 Department of Computer Science, King’s College London, United Kingdom
[email protected]
Abstract. Given a connected graph G and a set F of faulty vertices of G, let G − F be the graph obtained from G by deletion of all vertices of F and edges incident with them. Is there an algorithm, whose running time may be bounded by a polynomial function of |F | and log |V (G)|, which decides whether G − F is still connected? Even though the answer to this question is negative in general, we describe an algorithm which resolves this problem for the n-dimensional hypercube in time O(|F |n3 ). Furthermore, we sketch a more general algorithm that is efficient for graph classes with good vertex expansion properties.
1
Introduction
A study of interconnection networks, originally initiated by particular applications in telephone and computer networks, has become fairly pervasive in many different areas in the recent decade. In a whole avenue of problems that arise in the course of network design, a good deal of attention has been paid to the aspect of reliability: If some nodes of the network become overloaded or unavailable, can the network still preserve its functionality? If interconnection networks are modeled as simple undirected graphs, our problem may be formulated as follows: Suppose we are given a class G of graphs such that each graph G ∈ G has a property P. Note that to describe an arbitrary vertex of G, we need a string of length Ω(log |V (G)|) in the worst case. Let nG : V (G) → 2V (G) be an oracle which for a given vertex v ∈ V (G) returns the set N (v) of all neighbors of v in G in time O(|N (v)| · log |V (G)|). Problem 1.1. Is there an algorithm which – given an oracle nG for a graph G ∈ G and a set F of faulty vertices of G, – decides whether the graph G − F , obtained from G by deletion of all vertices of F and edges incident with them, still possesses the property P, – whose running time is bounded by a polynomial function of |F | and log |V (G)|?
The Institute for Theoretical Computer Science (ITI) is supported by project 1M0545 of the Czech Ministry of Education. Partially supported by the Czech Science Foundation Grant 201/08/P298.
C.S. Iliopoulos and W.F. Smyth (Eds.): IWOCA 2010, LNCS 6460, pp. 181–191, 2011. c Springer-Verlag Berlin Heidelberg 2011
182
T. Dvoˇr´ ak et al.
The requirement on the time complexity is motivated by practical considerations. Recall that to describe an arbitrary input F , a string of length |F |Ω(log |V (G)|) is needed. It is plausible to presume that the number of nodes which may become faulty at the same time would be just a fraction of the total number of nodes of the network. A typical instance of this problem may be a network topology modeled by the graph of the n-dimensional hypercube with 2n vertices, while the number of faults is bounded by O(nk ) for some natural number k [5,7]. In this case it would be useful to design an algorithm for Problem 1.1, running in time proportional to the length of the input F , possibly searching only some local neighborhood of F in G, rather than exploring the whole graph G − F . A natural requirement imposed on each reasonable interconnection network is its connectivity. In this paper we therefore study an instance of Problem 1.1 where property P equals connectivity. To the best of our knowledge, no results on this problem have been reported previously. It should be noted that although graph connectivity is a textbook example of an algorithmic problem that may be solved in linear time [3], our variant is more involved. In particular, we claim that if G may be an arbitrary connected graph, an algorithm testing the connectivity of G − F in time |F |k for some natural number k does not exist. Indeed, suppose that Gx,y and Gx,z are two connected graphs containing distinct vertices x = y and x = z, respectively. Let G1 be the graph obtained from Gx,y and Gx,z by gluing together vertex x of Gx,y with vertex x of Gx,z , and G2 be the graph obtained from G1 by adding edge yz. In order to verify the connectivity of G1 − {x} or G2 − {x}, it is necessary to check the presence of edge yz, since only this edge distinguishes the connected graph G2 −{x} from disconnected G1 −{x}. Since the choice of y and z was quite arbitrary, it follows that any algorithm that correctly decides on the connectivity of G − F must necessarily read all edges of this graph. It follows that its running time is bounded from below by the size of the input graph, which need not be necessarily a polynomial in |F | and log |V (G)|. This argument shows that it is necessary to restrict class G to some proper subclass of connected graphs. In this paper, we resolve our problem for the class of hypercubes, which has served for decades as a popular topology of interconnection networks for parallel or distributed computing [10] It is worth mentioning that a fairly special instance of Problem 1.1 for G being the class of hypercubes and property P being the existence of (i) Hamiltonian cycles and paths [4], (ii) long cycles and paths [5,7], has been studied previously. There are positive results for a special case when the number of faults is bounded by a certain linear (i) or quadratic (ii) function of n. On the other hand, when the number of faults is not limited, the problems are NP-hard [1,6]. The main results of this paper is an algorithm which verifies the connectivity of the n-dimensional hypercube with f faults in time O(f n3 ). We also describe a more general algorithm based on vertex-expansion properties that for the class of hypercubes works in time O(f 2 n3.5 ). The rest of the paper is laid out as follows.
Efficient Connectivity Testing of Hypercubic Networks with Faults
183
After introducing some necessary concepts and notations, we start with vertexexpansion approach in Section 3. In Section 4 we study walk transformations. This is our main technical tool, applied in Section 5 to derive a theorem relating connectivity of faulty hypercube with that of certain local neighborhood of the set of faults. Based on these theoretical results, in Section 6 we describe an algorithm for connectivity testing and analyze its time complexity. The paper is concluded with some open problems and directions for further research.
2
Preliminaries
The concepts used in this paper but undefined below may be found e. g. in [3]. In the rest of this text, n always denotes a positive integer while [n] stands for the set {1, 2, . . . , n}. Vertex and edge sets of a graph G are denoted by V (G) and E(G), respectively. Given a set V ⊆ V (G) let G[V ] denote the subgraph of G induced by V while G− V stands for G[V (G)\ V ]. The distance between vertices u, v in G is denoted by dG (u, v), the subscript being omitted if no ambiguity may arise. A square of the graph G, denoted by G2 , is the graph on vertices of G and edges between every two distinct vertices that are at distance at most two in G. Given a vertex u, an edge vw and sets S, T ⊆ V (G), we define d(u, S) = min{d(u, v) | v ∈ S}, d(S, T ) = min{d(u, T ) | u ∈ S}, d(u, vw) = d(u, {v, w}), N (u) = {v ∈ V (G) | d(u, v) = 1}, N (S) = {v ∈ V (G) | d(v, S) = 1}. The n-dimensional hypercube Qn is a graph with all binary vectors of length n as vertices, an edge joining two vertices whenever they differ in a single coordinate. For two vertices u, v of Qn let u v be the set of coordinates in which u and v differ. Note that |u v| = d(u, v). The direction of an edge uv of Qn is the integer i ∈ [n] in which u and v differ; that is, u v = {i}.
3
Expansion Approach
In this section we describe an algorithm for testing vertex-deleted connectivity which works efficiently for graph classes with good vertex expansion. The set N (S) contaning neighbors of vertices from S ⊆ V (S) that are not in S is called the boundary of S. The graph G is said to have vertex expansion ε if |N (S)| ≥ ε · |S| for every S ⊆ V (G) with |S| ≤ |V (G)|/2. Note that nonzero expansion implies connectedness; otherwise, a component of at most half of the vertices would have empty boundary.
184
T. Dvoˇr´ ak et al.
Theorem 3.1. Let (Gn )n∈N be a sequence of graphs Gn with vertex expansion εn > 0 and maximal degree Δn . There is an algorithm that for input n ∈ N, F ⊆ V (Gn ), |V (Gn )|, and εn > 0 tests the connectivity of Gn − F in time 2 |F | · Δ2n · log(|V (Gn )|) O . εn Proof (A sketch.). A component of Gn − F induced by vertices S ⊆ V (Gn ) \ F is said to be – major if |S| > |V (Gn )|/2; – small if |S| ≤ |F |/εn . Obviously, there is at most one major component. If |F | > |V (Gn )|εn /2, we can afford to run a standard search algorithm in Gn − F . Otherwise, it follows from vertex expansion of Gn that every component of Gn − F is either major or small. The key idea is that we can afford searching through small components completely. Furthermore, if we find more than |F |/εn vertices in the same component, we know that we are in the major component (and thus we can stop our search). Hence, the algorithm works as follows. We start searching Gn − F from each (non-faulty) neighbor v of a faulty vertex u. If we find a component of more than |F |/εn vertices, we stop the search from v with a remark that there exists a major component. If we have found a complete small component, we report that the graph Gn − F is disconnected. Otherwise, we continue the search until we check all non-faulty neighbors v of all faulty vertices u. In this case, we report that the graph Gn − F is connected. The time complexity is obtained as follows. There are at most |F | · Δn nonfaulty neighbors of faulty vertices. From each of them we search for at most |F |/εn vertices. For every vertex found we ask oracle for its neighbors, and each query takes O(Δn · log(|V (Gn )|)) time.
It follows from classical results of Harper [8] on isoperimetric problems that the hypercube Qn has a vertex expansion √cn for some constant c. Corollary 3.1. There is an algorithm for testing connectivity of Qn − F that runs in O(|F |2 · n3.5 ) time.
4
Transformations of Walks in Hypercubes
In this section we introduce a useful concept of transformations of one walk to another walk of the hypercube. This is where the structure of the hypercube plays its role. A walk in a simple graph G is a sequence W = (v0 , v1 , . . . , vk ) of vertices in G such that vi and vi+1 are adjacent for all 0 ≤ i < k. If W starts with the vertex u and ends with the vertex v, we say that W is a uv-walk. Let W = (v0 , v1 , . . . , vk ) be a walk in Qn . Let di be the direction of the edge between vi−1 and vi for every i ∈ [k] . Then the sequence (d1 , d2 , . . . , dk ) is called
Efficient Connectivity Testing of Hypercubic Networks with Faults
185
the transitional sequence of the walk W . For a sequence τ over [n] and i ∈ [n] let #(τ, i) be the number of occurrences of i in τ . It is easy to see that a sequence τ over [n] is a transitional sequence of some uv-walk in Qn if and only if u v = {i ∈ [n]; #(τ, i) is odd}.
(4.1)
Thus, we may identify uv-walks in Qn with sequences over [n] satisfying (4.1). We use both representations of a uv-walk as a sequence of vertices and as its transitional sequence, depending on what is more convenient. Let τ be a transitional sequence of a uv-walk W . Consider the following three operations on τ : swap(τ1 , i, j, τ2 ) = (τ1 , j, i, τ2 )
for τ = (τ1 , i, j, τ2 ),
inserti (τ1 , τ2 ) = (τ1 , i, i, τ2 ) delete(τ1 , i, i, τ2 ) = (τ1 , τ2 )
for τ = (τ1 , τ2 ), for τ = (τ1 , i, i, τ2 ),
where τ1 , τ2 are contiguous subsequences of τ and i, j ∈ [n]. Since these operations preserve (4.1), their results are also transitional sequences of some uv-walk. We say that two uv-walks σ and τ in Qn are equivalent if #(σ, i) = #(τ, i) for all i ∈ [n]. Note that the operation swap transforms a uv-walk to an equivalent uv-walk. Conversely, the following proposition holds. Proposition 4.1. For every two equivalent uv-walks σ and τ in Qn , there is a sequence of swaps that transforms σ into τ . Proof. Since σ and τ are equivalent, they have the same length k. Moreover, there is a permutation f : [k] → [k] such that σ(i) = τ (f (i)) for all i ∈ [k]. An arbitrary decomposition of f into consecutive transpositions gives us a sequence of swaps that transforms σ into τ .
Let W = (v0 , v1 , . . . , vk ) be a walk in Qn with a transitional sequence τ = (d1 , d2 , . . . , dk ). We say that inserti (τ1 , τ2 ) on τ is performed in the vertex vi where 0 ≤ i ≤ k if τ1 = (d1 , d2 , . . . , di ) and τ2 = (di+1 , di+2 , . . . , dk ). Proposition 4.2. For every two uv-walks σ and τ , there are two sequences of inserts that transform σ into σ and τ into τ , respectively, such that σ and τ are equivalent. Moreover, these inserts can be performed in arbitrary vertices. Proof. For every direction i ∈ [n] we perform the operations inserti on σ if #(σ, i) < #(τ, i), or on τ if #(σ, i) > #(τ, i) until we obtain #(σ, i) = #(τ, i). These inserts can be performed on any position.
Since delete is an inverse of insert, we obtain the following corollary. Corollary 4.1. For every two uv-walks σ and τ in Qn there is a sequence of inserts, swaps and deletes (in this order) that turns σ into τ .
186
5
T. Dvoˇr´ ak et al.
Local Connectivity
For a given set F of vertices in Qn we define a subgraph G(F ) = (A ∪ B ∪ F, E) of Qn by A = N (F ),
B = N (A) \ F,
E = {uv ∈ E(Qn ); u ∈ A ∪ F }.
That is, G(F ) is the subgraph of Qn on all vertices at distance at most 2 from F and with all edges at distance at most 1 from F . Our aim in this section is to show that if G(F ) is connected and G(F ) − F is disconnected, then Qn − F is also disconnected. Note that if Q2n [F ] is connected, then G(F ) is connected as well. Let W be a walk in Qn and let u be a vertex on W . We say that u is a port on W if u ∈ A and exactly one of his neighbors on W is in F . Note that if u is a port on W and not an endvertex, then his second neighbor on W is in A ∪ B. Furthermore, since u may have several occurrences on the walk W , the notion of ports is defined with respect to a particular occurrence of u on W , and not the vertex u itself. For a connected component C of G(F ) − F let p(C, W ) denote the number of ports on the walk W from the component C. First, we show that swap performed on W preserves the parity of p(C, W ).
u
v
u
v
u
v
u
v
u
v
swap ↔ ↔ ↔ ↔ ↔
u
v
u
v
u
v
u
v
u
v
Fig. 1. All possible swaps that change ports
Lemma 5.1. Let W2 be a walk in Qn obtained from a walk W1 by a single swap, and let F ⊆ V (Qn ). For every component C of G(F ) − F , the numbers p(C, W1 ) and p(C, W2 ) differ by 0 or 2. Proof. See Figure 1 for all configurations of swaps that change ports. The vertices of F are full (red), the vertices of A ∪ B are empty (blue), the ports are circled.
Efficient Connectivity Testing of Hypercubic Networks with Faults
187
The edges of walks W1 , W2 that are incident to F are dashed (red), the edges of W from G(F ) − F are full (blue). Note that in each case, the ports change on the vertices u and v. Since u and v are connected by edges of G(F ) − F , they are in the same component C of G(F ) − F . In the first, third and last case, the numbers of ports of C changes by 2, whereas in the second and fourth case, it remains unchanged.
Corollary 5.1. For every F ⊆ V (Qn ), every component C of G(F ) − F , and every equivalent walks W1 and W2 in Qn , the parity of p(C, W1 ) and p(C, W2 ) is the same. Now we show that global connectivity implies local connectivity. That is, disconnected Qn − F can be recognized locally on G(F ) − F . Lemma 5.2. Let F ⊆ V (Qn ) be such that G(F ) is connected. If Qn − F is connected, then G(F ) − F is also connected. Proof. Suppose for a contradiction that there are vertices u, v ∈ A ∪ B = V (G(F ) − F ) that are connected in Qn − F by a walk P but are disconnected in G(F ) − F . Clearly, the walk P contains some vertex x that is not from A; otherwise, P is in G(F ) − F . Let Cu and Cv denote the components of G(F ) − F containing the vertices u and v, respectively. Since G(F ) is connected, there is a uv-walk R in G(F ). As u and v are disconnected in G(F ) − F , the walk R contains some vertex y ∈ F , and an odd number of ports from each component Cu and Cv . By Proposition 4.2, the walks P and R can be transformed by inserts to walks P and R in Qn , respectively, such that P and R are equivalent. Moreover, inserts on P and on R can be performed at the vertices x and y, respectively. It follows that the sets of ports on P and R do not change by these transformations. In particular, p(C, P ) = p(C, P ) and p(C, R ) = p(C, R) for every component C of G(F ) − F . However, from Corollary 5.1 it follows that p(Cu , P ) and p(Cv , P ) have odd parity. Hence, the walk P contains some port, and consequently, some vertex of F . This is a contradiction with the assumption that P is a walk in Qn − F .
Lemma 5.3. Let F be a set of vertices of Qn such that G(C) − C is connected for every component C of Q2n [F ]. Then Qn − F is connected as well. Proof. Let u, v ∈ V (Qn ) \ F and P be an arbitrary uv-walk in Qn . If P contains no vertex from F , we are done. Otherwise it contains a subwalk S = (x, y1 , . . . , ym , z) whose all vertices except x and z are in F . Then y1 , . . . , ym belong to the same component C of Q2n [F ]. By our assumption, G(C) − C contains an xz-walk T . Replacing the subwalk S of P with T , we obtain a uv-walk which contains less vertices from F than P . Repeating this process for every subwalk of P of the described type, we finally obtain a uv-walk in Qn − F , and the desired conclusion follows.
Theorem 5.1. Let F ⊆ V (Qn ). The graph Qn − F is connected if and only if G(C) − C is connected for every component C of Q2n [F ].
188
T. Dvoˇr´ ak et al.
Proof. Let Qn − F be connected and C be a component of Q2n [F ]. By Lemma 5.2 it suffices to prove that G(C) is connected in order to prove that G(C) − C is connected. Let u, v be vertices of G(C) and our aim is to prove that u and v belong into the same component of G(C). There exist vertices u , v ∈ C such that d(u, u ) ≤ 2 and d(v, v ) ≤ 2. Since C is a component of Q2n [F ], there exists a sequence u = w1 , w2 , . . . , wk = v of vertices of C such that d(wi , wi+1 ) ≤ 2 for every 1 ≤ i < k. Therefore, vertices w1 , w2 , . . . , wk belong to the same component of G(C). Consequently, u and v are in the same component of G(C) as well. The other implication follows from Lemma 5.3.
6
Algorithm
In this section we apply Theorem 5.1 to design an algorithm for testing the connectivity of Qn − F . To accomplish this task, we employ the following data structures. List F of faulty vertices of Qn . Disjoint-set data structure D [3, Chapter 22] with operations – Make(v, D) creates a singleton set {v}, – Find(v, D) returns a pointer to the set containing v, – Union(u, v, D) unites the sets containing u and v, whose amortized time complexity may be loosely bounded by O(log m), provided that Make(v, D) was executed m times. We use D to detect the connectivity of G(C) where C is a component of Q2n [F ]. Binary trie T [9, Section 6.3] which stores information about some vertices of Qn . Each vertex of Qn stored in T is represented by a leaf of T , which we denote by vT . Moreover, vT includes the following additional information: – a pointer to v in the disjoin-set data structure D – a boolean variable indicating whether v is healthy or faulty, – a boolean variable visited indicating that v has been visited and v ∈ N (F ) ∪ F . Note that we mark as visited only faulty vertices and their neighbors, even though our algorithm inspects also vertices at distance 2 from F . Given a vertex v of Qn , – Insert(v, T ) inserts v into T and returns vT , – Retrieve(v, T ) returns vT or NIL if it does not exist. Both operations require O(n) time. Given a list F of faulty vertices of Qn , Algorithm 6.1 finds all components of Q2n [F ] using a depth–first search (DFS), described as Procedure 6.2. For every f ∈ F , all vertices v at distance at most two from f are visited. If v is faulty, DFS is applied recursively on v, which ensures that the algorithm indeed finds the components of Q2n [F ]. If v is healthy, then v is inserted into the disjoint-set
Efficient Connectivity Testing of Hypercubic Networks with Faults
189
data structure D. Furthermore, sets of D containing vertices u and v are united for every edge uv at distance one from f . In that way, after a call to DFS(f ) (line 8 of Algorithm 6.1) is completed, disjoint sets of D represent components of the graph G(C) − C for the component C of Q2n [F ] containing f . This verifies the condition of Theorem 5.1. The trie T is used to store information about the vertices visited during the search. Note that due to the time and space constraints, T cannot contain each of 2n vertices of Qn . Faulty vertices are inserted into T during the initialization of Algorithm 6.1. Healthy vertices of G(C) for a component C of Q2n [F ] are inserted into T during the DFS of C. When the whole component of Q2n [F ] is found, all healthy vertices are removed from T . Algorithm 6.1. Connectivity(n, F ) Input: Positive integer n, a list F of faulty vertices of Qn Output: “Qn − F is connected” or “Qn − F is disconnected”
10
T ← empty trie foreach f ∈ F do fT ← Insert(f, T ) ; mark fT as faulty and non-visited foreach f ∈ F do fT ← Retrieve(f, T ) if fT is not visited then mark fT as visited D ← empty data structure for disjoint sets DFS(f ) // DFS of the component C of Q2n [F ] containing f if D contains more than one set then return “Qn − F is disconnected” remove all healthy vertices from T and clean-up data structure D
11
return “Qn − F is connected”.
1 2 3 4 5 6 7 8 9
Removing all healthy vertices from trie T (line 10 of Algorithm 6.1) may be implemented using the depth-first search of T . Since the total number of calls to Insert(·, T ) is bounded by O(|F |n2 ), the total time complexity of this clean-up is O(|F |n3 ). To analyze the time complexity of our algorithm, observe that DFS(f ) is called exactly once for each faulty vertex f ∈ F . Next, considering the code of Procedure 6.2, the outer for-loop (line 1) is executed for every neighbor of f , while the inner for-loop (line 8) is executed for some vertices at distance two from f . Therefore, the total number of the inner loop executions is bounded by |F |n2 . The time critical operation are Retrieve(·, T ) and Insert(·, T ), requiring O(n) time for each call as noted above. Hence, the total running time of the algorithm is bounded by O(|F |n3 ). Theorem 6.1. Given an integer n ≥ 1 and a set of vertices F of Qn , the problem whether the graph Qn − F is connected can be decided in O(n3 |F |) time.
190
T. Dvoˇr´ ak et al.
Procedure 6.2. DFS(f ) Input: Faulty vertex f of Qn // f belongs to a component C of Q2n [F ] Data: Binary trie T , disjoint-set data structure D 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
7
foreach u ∈ N (f ) do uT ← Retrieve(u, T ) if uT = NIL then uT ← Insert(u, T ); mark uT as healthy and non-visited; Make(u, D) if uT is not visited then mark uT as visited if uT is healthy then foreach v ∈ N (u) do vT ← Retrieve(v, T ) if vT = NIL then vT ← Insert(v, T ); mark vT as healthy and non-visited; Make(v, D) if vT is healthy then if Find(u, D) = Find(v, D) then Union(u, v, D) // edge uv belongs to G(C) else if vT is not visited then mark vT as visited; DFS(v) // faulty vertex v belongs to C else DFS(u)
// faulty vertex u belongs to C
Concluding Remarks
In this paper we have described two algorithms for testing the connectivity of the n-dimensional hypercube with f faulty vertices. The (more general) expansion algorithm runs in O(f 2 n3.5 ) time, whereas the local connectivity algorithm runs in O(f n3 ) time. It is worth pointing out the following corollary: If |F | = O(nk ) for some k ∈ N, the size of Qn − F is exponential in n, but our algorithm still tests the connectivity of Qn − F in time which is polynomial in n. We believe that it would be interesting to find other classes of graphs for which the connectivity instance of Problem 1.1 has a positive solution. Natural candidates are other hypercubic networks [10] whose fault-tolerance has been investigated previously [2,11]. In some networks, transformations of walks are possible if we allow swaps on larger cycles (of bounded-size), e.g. hexagonal grids, n-dimensional torus Cdn with fixed d, planar graphs with faces of bounded size. We think that the approach described in Section 5 works for such networks as well. Another question is what other properties can be efficiently tested in vertexdeleted graphs. A biconnectivity can be defined such that a graph G = (V, E) is biconnected if G − {x} is connected for every vertex x. If F is a set of faulty vertices of a hypercube Qn then every vertex x of distance at least 2 from F has a connected neighborhood of distance 2 in Qn − F . Thus it suffices to verify
Efficient Connectivity Testing of Hypercubic Networks with Faults
191
connectedness for vertices from A ∪ B. Hence there exists an algorithm deciding a biconnectivity for Qn − F which requires O(|F |2 · n5 ) time. An analogous idea can work for multidimensional meshes and also for multiconnectivity.
References 1. Chan, M.Y., Lee, S.-J.: On the existence of Hamiltonian circuits in faulty hypercubes. SIAM J. Discrete Math. 4, 511–527 (1991) 2. Chen, Y.-C., Huang, Y.-Z., Hsu, L.-H., Tan, J.J.M.: A family of Hamiltonian and Hamiltonian connected graphs with fault tolerance. J. Supercomput. 54, 229–238 (2010) 3. Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C.: Introduction to Algorithms. MIT Press, Cambridge (2001) 4. Dvoˇr´ ak, T., Gregor, P.: Partitions of faulty hypercubes into paths with prescribed endvertices. SIAM J. Discrete Math. 22, 1448–1461 (2008) 5. Dvoˇr´ ak, T., Koubek, V.: Long paths in hypercubes with a quadratic number of faults. Inf. Sci. 179, 3763–3771 (2009) 6. Dvoˇr´ ak, T., Koubek, V.: Computational complexity of long paths and cycles in faulty hypercubes. Theor. Comput. Sci. 411, 3774–3786 (2010) 7. Fink, J., Gregor, P.: Long paths and cycles in hypercubes with faulty vertices. Inf. Sci. 179, 3634–3644 (2009) 8. Harper, L.H.: Optimal Numberings and Isoperimetric Problems on Graphs. J. Comb. Theory 1, 385–393 (1966) 9. Knuth, D.E.: The Art of Computer Programming: Sorting and Searching, 2nd edn., vol. III. Addison-Wesley, Reading (1998) 10. Leighton, F.T.: Introduction to Parallel Algorithms and Architectures: Arrays, Trees, Hypercubes. Morgan Kaufmann, San Mateo (1992) 11. Park, J.-H., Kim, H.-C., Lim, H.-S.: Many-to-Many Disjoint Path Covers in the Presence of Faulty Elements. IEEE Trans. Comput. 58, 528–540 (2009)