Using Double Ended Queues (Deques) for Transpose Sequences
This is an interesting question that may be more interesting than helpful. Let's say I want to copy two of its comment ( DQ1_a
and DQ1_b
) in the copies ( DQ2_a
and DQ2_b
).
DQ1_a= <A,B,C,D,E,F>
DQ1_b= <G,H,I,J,K,L,M>
But we want to exchange "strands" for D<->J
. Thus, we want to get
DQ2_a= <A,B,C,(D or J),K,L,M>
DQ2_b= <G,H,I,(J or D),E,F>
or
exists because it depends on whether it includes elements denoting an exchange or not.
Question 1
: Find the algorithm that ends up with the transposed data structure DQ2_*
, starting with the score data DQ1_*
and the items exchanged ex=(D<->J); ex[a]=D; ex[b]=J
. Allowed operations are deque - left_push,left_pop,right_push,right_pop,deque_empty
(the latter returns whether empty or not).
Decision:
left_item <- left_pop(DQ1_a)
while (left_item!=ex[a]):
right_push(DQ2_a,left_item)
left_item<-left_pop(DQ1_a)
right_item <- right_pop(DQ1_b)
while (right_item!=ex[b]):
left_push(DQ2_b,right_item)
right_item<-right_pop(DQ1_b)
# if not inclusive
right_push(DQ2_a,left_item)
left_push(DQ2_b,right_item)
# else
#right_push(DQ2_b,left_item)
#left_push(DQ2_a,right_item)
left_item <- left_pop(DQ1_b)
while (not deque_empty(DQ1_b)):
right_push(DQ2_a,left_item)
left_item<-left_pop(DQ1_a)
right_item <- right_pop(DQ1_a)
while (not deque_empty(DQ1_a)):
left_push(DQ2_b,right_item)
right_item<-rightt_pop(DQ1_a)
Question 2
: This is what hits me. Given a set DQ1_*
(more than 2) - you need to copy them to DQ2_*
using the exchange list
ex={s: s is a given set of exchanges of the form: (ith element of DQ1_x)<->(jth element of DQ1_y)}
Any better solutions to this problem are appreciated!
source to share
No one has answered this question yet
Check out similar questions: