Re: [algogeeks] Reverse dutch flag problem

2011-11-03 Thread ravindra patel
Sorry, small mistake in designated index calculation.
It should be k*p2 % (n-1) instead of (k*p2 -1) % (n - 1).

Thanks,
- Ravindra

On Thu, Nov 3, 2011 at 11:37 PM, ravindra patel wrote:

> This is a special case of shuffling problem. In shuffling problem we have
> to merge k (here k = 3) parts of array such that each kth element is from
> the same sub-array and in same order. For eg -
> a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 c4 should become => a1 b1 c1 a2 b2 c2 a3
> b3 c3 a4 b4 c4.
>
> Usually shuffling problem can be solved only in O(n*logn) time without
> additional space, but here you have an added advantage. You know what the
> sequence should look like exactly. So here goes the O(n) solution with
> constant space.
>
> 1- Take 2 pointers p1 and p2 initialize both of them to index 1 (second
> element)
> 2- now for each element at p2 find the right index where it should go and
> put it thr. The right index is -
>  (k*p2 -1) % (n-1); // k=3 here
>
> 3- Keep doing it until p2 becomes same as p1 again.
> 4- Now advance p1 till the elements are in order 0 1 2 0 
> 5- if p1 is less than n-1 than set p2 = p1. Repeat thru step 2-5 again.
>
> Here is a primitive C code to do the same.
>
> int p1 = p2 = 1;
> int preVal, next, temp;
>
> while (p1 < n)
> {
>preVal = a[p1];
>p2 = p1;
>
>   do{
>   next = (k*p2 -1) % (n-1); // k=3 here
>   temp = a[next];
>   a[next] = preVal;
>   preVal = temp;
>   p2 = next;
>   } while (p2 != p1)
>
>   while(p1 < n)
>   {
>if( ((a[p1] - a[p1-1]) == 1) || (a[p1] - a[p1-1]) == -2)) //
> elements are in sequence 0 1 2 0
> p1++;
> else
> break;
>   }
> }
>
>
> Feedback welcome :-).
> - Ravindra
>
>
> On Wed, Nov 2, 2011 at 6:43 PM, shady  wrote:
>
>> any solutions for this ?
>> dutch national flag problem could be done in O(n) time and O(1) space by
>> considering two pointers, but how to do this (reverse dutch national flag
>> problem) ?
>>
>>
>> On Sat, Aug 20, 2011 at 3:27 PM, Sanjay Rajpal  wrote:
>>
>>> Suppose we are given a string .
>>>
>>> Make it 012012012012 in O(n) time and O(1) space.
>>> Sanju
>>> :)
>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Algorithm Geeks" group.
>>> To post to this group, send email to algogeeks@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> algogeeks+unsubscr...@googlegroups.com.
>>> For more options, visit this group at
>>> http://groups.google.com/group/algogeeks?hl=en.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algogeeks@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



Re: [algogeeks] Reverse dutch flag problem

2011-11-03 Thread ravindra patel
This is a special case of shuffling problem. In shuffling problem we have
to merge k (here k = 3) parts of array such that each kth element is from
the same sub-array and in same order. For eg -
a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 c4 should become => a1 b1 c1 a2 b2 c2 a3
b3 c3 a4 b4 c4.

Usually shuffling problem can be solved only in O(n*logn) time without
additional space, but here you have an added advantage. You know what the
sequence should look like exactly. So here goes the O(n) solution with
constant space.

1- Take 2 pointers p1 and p2 initialize both of them to index 1 (second
element)
2- now for each element at p2 find the right index where it should go and
put it thr. The right index is -
 (k*p2 -1) % (n-1); // k=3 here

3- Keep doing it until p2 becomes same as p1 again.
4- Now advance p1 till the elements are in order 0 1 2 0 
5- if p1 is less than n-1 than set p2 = p1. Repeat thru step 2-5 again.

Here is a primitive C code to do the same.

int p1 = p2 = 1;
int preVal, next, temp;

while (p1 < n)
{
   preVal = a[p1];
   p2 = p1;

  do{
  next = (k*p2 -1) % (n-1); // k=3 here
  temp = a[next];
  a[next] = preVal;
  preVal = temp;
  p2 = next;
  } while (p2 != p1)

  while(p1 < n)
  {
   if( ((a[p1] - a[p1-1]) == 1) || (a[p1] - a[p1-1]) == -2)) //
elements are in sequence 0 1 2 0
p1++;
else
break;
  }
}


Feedback welcome :-).
- Ravindra

On Wed, Nov 2, 2011 at 6:43 PM, shady  wrote:

> any solutions for this ?
> dutch national flag problem could be done in O(n) time and O(1) space by
> considering two pointers, but how to do this (reverse dutch national flag
> problem) ?
>
>
> On Sat, Aug 20, 2011 at 3:27 PM, Sanjay Rajpal  wrote:
>
>> Suppose we are given a string .
>>
>> Make it 012012012012 in O(n) time and O(1) space.
>> Sanju
>> :)
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algogeeks@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



Re: [algogeeks] Reverse dutch flag problem

2011-11-02 Thread shady
any solutions for this ?
dutch national flag problem could be done in O(n) time and O(1) space by
considering two pointers, but how to do this (reverse dutch national flag
problem) ?


On Sat, Aug 20, 2011 at 3:27 PM, Sanjay Rajpal  wrote:

> Suppose we are given a string .
>
> Make it 012012012012 in O(n) time and O(1) space.
> Sanju
> :)
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



Re: [algogeeks] Reverse dutch flag problem

2011-08-25 Thread sachin sabbarwal
one solution might be:
to traverse whole list counting no of zeros and 1's.
and then make another string(or overwrite the same) with the required
pattern,append any other characters(suppose all 0's exhausted and some 1's
and 2's were left) left at the end.
is there any better solution??

On Sat, Aug 20, 2011 at 4:20 PM, sukran dhawan wrote:

> i that .ink the soln for this problem is given in geeksforgeeks.com
>
>
> On Sat, Aug 20, 2011 at 3:27 PM, Sanjay Rajpal  wrote:
>
>> Suppose we are given a string .
>>
>> Make it 012012012012 in O(n) time and O(1) space.
>> Sanju
>> :)
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algogeeks@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



Re: [algogeeks] Reverse dutch flag problem

2011-08-20 Thread sukran dhawan
i think the soln for this problem is given in geeksforgeeks.com

On Sat, Aug 20, 2011 at 3:27 PM, Sanjay Rajpal  wrote:

> Suppose we are given a string .
>
> Make it 012012012012 in O(n) time and O(1) space.
> Sanju
> :)
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



[algogeeks] Reverse dutch flag problem

2011-08-20 Thread Sanjay Rajpal
Suppose we are given a string .

Make it 012012012012 in O(n) time and O(1) space.
Sanju
:)

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.