[algogeeks] Google Telephonic interview

2011-08-04 Thread Anand Shastri
*You have given a structure which has two member, One which stores the
time and other stores the function pointer Your function has to call the *
*function stored in the fuction poitner after the time given in the
structure elapses.
Design that function? *

Approach: To design this function I would use a min Heap data structure.
Each node of a heap has
two parameters one is the running time and other one is the
function pointer.

// Initialise a function pointer
typedef void (*functionToBeCalled)(int arg1, int arg2);

// Timer structure
typedef struct timer
{
   float runingTime;   // in terms of seconds
   functionToBeCalled funcToBeCall; // function pointer
}TIMER;

void initTimer()
{
   Initialise few nodes with running time and its corresponding function
   Initialise a MIN heap data structure
}

void addTimer(uint32 runingTime, functionToBeCalled func)
{
 TIMER *temp;
  temp = (TIMER *)malloc(sizeof(TIMER));
  temp-runingTime = runningTime
  temp-funcToBeCall = func;
  HeapAdd(temp);
  Heapify();
}

void scheduler()
{
uint32 currentTime = ObtainCurrentTime();
// Obtain the runing time of top most element of the min Heap
uint32 runingTime = PeakHeap();
// if the runningTime is equal to current time then extract the
top most
// element of the heap and execute the function associate with
it
// Heapify the MIN heap data structure
// Obtain the runing time of top most element of the min heap
// scheduler sleep for that much amount of time.
if(runingTime == currentTime)
{
 TIMER * node = ExtractMinHeap();
  CreateThread(node-func, Thread);
  Heapify();
  runingTime = PeakHeap();
 sleep(runningTime);
}
else
{
   // scheduler updates its sleep time
  // if runing time is not equal to current time
  sleep(runningTime);
}

 }

Let me know your comments

-- 
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] Google Telephonic interview

2011-08-04 Thread Anand Shastri
You mean to say linked to maintain all time task with its corresponding
running time and associate function. In that case how will find the task
which has the closed running time.

If you use min heap it would be easy to find the task that has closest
runing time in O(1) complexity.

On Thu, Aug 4, 2011 at 10:57 AM, mohit verma mohit89m...@gmail.com wrote:

 why are u maintaining heap? can't we use link list here?

   On Thu, Aug 4, 2011 at 11:16 PM, Anand Shastri 
 anand.shastr...@gmail.com wrote:

   *You have given a structure which has two member, One which stores the
 time and other stores the function pointer Your function has to call the
 *
 *function stored in the fuction poitner after the time given in the
 structure elapses.
 Design that function? *

 Approach: To design this function I would use a min Heap data structure.
 Each node of a heap has
 two parameters one is the running time and other one is
 the function pointer.

 // Initialise a function pointer
 typedef void (*functionToBeCalled)(int arg1, int arg2);

 // Timer structure
 typedef struct timer
 {
float runingTime;   // in terms of seconds
functionToBeCalled funcToBeCall; // function pointer
 }TIMER;

 void initTimer()
 {
Initialise few nodes with running time and its corresponding function
Initialise a MIN heap data structure
 }

 void addTimer(uint32 runingTime, functionToBeCalled func)
 {
  TIMER *temp;
   temp = (TIMER *)malloc(sizeof(TIMER));
   temp-runingTime = runningTime
   temp-funcToBeCall = func;
   HeapAdd(temp);
   Heapify();
 }

 void scheduler()
 {
 uint32 currentTime = ObtainCurrentTime();
 // Obtain the runing time of top most element of the min Heap
 uint32 runingTime = PeakHeap();
 // if the runningTime is equal to current time then extract
 the top most
 // element of the heap and execute the function associate with
 it
 // Heapify the MIN heap data structure
 // Obtain the runing time of top most element of the min heap
 // scheduler sleep for that much amount of time.
 if(runingTime == currentTime)
 {
  TIMER * node = ExtractMinHeap();
   CreateThread(node-func, Thread);
   Heapify();
   runingTime = PeakHeap();
  sleep(runningTime);
 }
 else
 {
// scheduler updates its sleep time
   // if runing time is not equal to current time
   sleep(runningTime);
 }

  }

 Let me know your comments

 --
 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.




 --
 
 *MOHIT VERMA*

 --
 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] Google Telephonic interview

2011-08-04 Thread Anand Shastri
Obviously you need to run the task that a closet running time.

For Example

Task 1 : running time = 2 secs

Task 2: running time = 4 secs

This means I want to run the task 1 after 2 secs and task 2 after 4 second.

How I hope the question is clear to you know

On Thu, Aug 4, 2011 at 11:37 AM, mohit verma mohit89m...@gmail.com wrote:

 there is nothing like search min or max time and then call function given
 . It can be the case: call the functions in order of nodes or times saved
 in objects. M i wrong?


 On Thu, Aug 4, 2011 at 11:56 PM, Anand Shastri 
 anand.shastr...@gmail.comwrote:

 You mean to say linked to maintain all time task with its corresponding
 running time and associate function. In that case how will find the task
 which has the closed running time.

 If you use min heap it would be easy to find the task that has closest
 runing time in O(1) complexity.

   On Thu, Aug 4, 2011 at 10:57 AM, mohit verma mohit89m...@gmail.comwrote:

 why are u maintaining heap? can't we use link list here?

   On Thu, Aug 4, 2011 at 11:16 PM, Anand Shastri 
 anand.shastr...@gmail.com wrote:

   *You have given a structure which has two member, One which stores
 the
 time and other stores the function pointer Your function has to call the
 *
 *function stored in the fuction poitner after the time given in the
 structure elapses.
 Design that function? *

 Approach: To design this function I would use a min Heap data structure.
 Each node of a heap has
 two parameters one is the running time and other one is
 the function pointer.

 // Initialise a function pointer
 typedef void (*functionToBeCalled)(int arg1, int arg2);

 // Timer structure
 typedef struct timer
 {
float runingTime;   // in terms of seconds
functionToBeCalled funcToBeCall; // function pointer
 }TIMER;

 void initTimer()
 {
Initialise few nodes with running time and its corresponding function
Initialise a MIN heap data structure
 }

 void addTimer(uint32 runingTime, functionToBeCalled func)
 {
  TIMER *temp;
   temp = (TIMER *)malloc(sizeof(TIMER));
   temp-runingTime = runningTime
   temp-funcToBeCall = func;
   HeapAdd(temp);
   Heapify();
 }

 void scheduler()
 {
 uint32 currentTime = ObtainCurrentTime();
 // Obtain the runing time of top most element of the min
 Heap
 uint32 runingTime = PeakHeap();
 // if the runningTime is equal to current time then extract
 the top most
 // element of the heap and execute the function associate
 with it
 // Heapify the MIN heap data structure
 // Obtain the runing time of top most element of the min
 heap
 // scheduler sleep for that much amount of time.
 if(runingTime == currentTime)
 {
  TIMER * node = ExtractMinHeap();
   CreateThread(node-func, Thread);
   Heapify();
   runingTime = PeakHeap();
  sleep(runningTime);
 }
 else
 {
// scheduler updates its sleep time
   // if runing time is not equal to current time
   sleep(runningTime);
 }

  }

 Let me know your comments

 --
 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.




 --
 
 *MOHIT VERMA*

 --
 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.




 --
 
 *MOHIT VERMA*

 --
 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

Re: [algogeeks] Google Telephonic interview

2011-08-04 Thread Anand Shastri
/* Create a Timer Task that takes in the running time and it's associated
   function to be called after its running time is elapsed */
#include time.h

#define NUM 5
typedef void (*funcToBeCalled)(void);

typedef struct timer TIMER;

struct timer
{
  int runningTime;
  funcToBeCalled func;
};
static TIMER timerArray[NUM];
static time_t reference;
static int count;

int LEFT(int index)
{
  if(index  NUM)
 return (index * 2 + 1);
}
int RIGHT(int index)
{
  if(index  NUM)
 return (index * 2 + 2);
}
static void print(void)
{
   printf(Timer task has been called\n);
}

// Initialise the timer data structure
void Init()
{
   int index;

   count = NUM;
   // Note down the reference time
   reference = time(0);
   printf(reference : %ld\n, reference);

   // Initialise the data structure such that associate function gets
   // called after 3, 6, 9, 12, 15 seconds respectively.
   for(index = 0; index  count; index++)
   {
  timerArray[index].runningTime = (index + 1) * 3;
  timerArray[index].func = print;
   }
}

// This function check the min heap property and arrange
// the element such that at every node, root node should be
// less than its right and left child element.
Heapify(int index)
{
  int left, right, minIndex;
  TIMER temp;
  left = LEFT(index);
  right = RIGHT(index);
  if(left  (count) 
(timerArray[left].runningTime  timerArray[index].runningTime))
  {
 minIndex = left;
  }
  else
  {
 minIndex = index;
  }
  if(right  (count) 
(timerArray[right].runningTime  timerArray[minIndex].runningTime))
  {
 minIndex = right;
  }
  if(minIndex != index)
  {
temp.runningTime = timerArray[index].runningTime;
temp.func = timerArray[index].func;

timerArray[index].runningTime = timerArray[minIndex].runningTime;
timerArray[index].func = timerArray[minIndex].func;

timerArray[minIndex].runningTime = temp.runningTime;
timerArray[minIndex].func   = temp.func;

Heapify(minIndex);
  }
}

// This function builds the MIN heap data structure
void BuildHeap()
{
  int len, i;
  len = sizeof(timerArray)/sizeof(timerArray[0]);
  i = (len - 1)/2;
  while(i = 0)
  {
Heapify(i);
i--;
  }
  Heapify(0);
}


// This function extract the top element of the heap
// Min heap has the min  element at the top always.
int HeapExtract()
{
  TIMER temp;
  // Swap the 0 the element with last element of the array
  temp.runningTime = timerArray[0].runningTime;
  temp.func = timerArray[0].func;

  timerArray[0].runningTime = timerArray[count-1].runningTime;
  timerArray[0].func = timerArray[count-1].func;

  timerArray[count-1].runningTime = temp.runningTime;
  timerArray[count-1].func = temp.func;

  count--;

  // Check the heap property heapify if it got violated
  Heapify(0);
  // return the minimum element of the heap
  return (count);
}
void scheduler()
{
  time_t now;
  int diff_time, minIndex;
  while(count = 0)
  {
 now = time(0);
 printf(Current Time: %ld\n, time(0));
 diff_time = now- reference;
 printf(diff_time : %ld\n, diff_time);
 if(diff_time = timerArray[0].runningTime)
 {
   minIndex  = HeapExtract();
   timerArray[minIndex].func();
 }
 else
 {
sleep(timerArray[0].runningTime - diff_time);
 }
  }
}
main()
{
  int index, minIndex;
  TIMER temp;

  // Initialise the data structure
  Init();

  // Build MIn heap data structure
  BuildHeap(timerArray);

  // Run the scheduler
  scheduler();

   return;
}
The ouput of above code is

Timer Task is about to run
reference : 1312510772


Current Time: 1312510775
diff_time : 3
Timer task has been called

Current Time: 1312510778
diff_time : 6
Timer task has been called

Current Time: 1312510781
diff_time : 9
Timer task has been called

Current Time: 1312510784
diff_time : 12
Timer task has been called

Current Time: 1312510787
diff_time : 15
Timer task has been called

Please share your comments

On Thu, Aug 4, 2011 at 11:43 AM, Anand Shastri anand.shastr...@gmail.comwrote:

 Obviously you need to run the task that a closet running time.

 For Example

 Task 1 : running time = 2 secs

 Task 2: running time = 4 secs

 This means I want to run the task 1 after 2 secs and task 2 after 4 second.

 How I hope the question is clear to you know

   On Thu, Aug 4, 2011 at 11:37 AM, mohit verma mohit89m...@gmail.comwrote:

 there is nothing like search min or max time and then call function
 given . It can be the case: call the functions in order of nodes or times
 saved in objects. M i wrong?


 On Thu, Aug 4, 2011 at 11:56 PM, Anand Shastri anand.shastr...@gmail.com
  wrote:

 You mean to say linked to maintain all time task with its corresponding
 running time and associate function. In that case how will find the task
 which has the closed running time.

 If you use min heap it would be easy to find the task that has closest
 runing time in O(1) complexity.

   On Thu, Aug 4, 2011 at 10:57 AM, mohit verma mohit89m...@gmail.comwrote:

 why are u maintaining heap

Re: [algogeeks] Google Telephonic interview

2011-08-04 Thread Anand Shastri
what if new task gets added every time.

On Thu, Aug 4, 2011 at 8:24 PM, Gaurav Menghani
gaurav.mengh...@gmail.comwrote:

 Instead of a heap, sort the array once. Pick the first element every
 time, and remove it from the array, or just move the 'head pointer'
 ahead.

 On Fri, Aug 5, 2011 at 8:01 AM, Anand Shastri anand.shastr...@gmail.com
 wrote:
  /* Create a Timer Task that takes in the running time and it's associated
 function to be called after its running time is elapsed */
  #include time.h
 
  #define NUM 5
  typedef void (*funcToBeCalled)(void);
 
  typedef struct timer TIMER;
 
  struct timer
  {
int runningTime;
funcToBeCalled func;
  };
 
  static TIMER timerArray[NUM];
  static time_t reference;
  static int count;
 
  int LEFT(int index)
  {
if(index  NUM)
   return (index * 2 + 1);
  }
  int RIGHT(int index)
  {
if(index  NUM)
   return (index * 2 + 2);
  }
  static void print(void)
  {
 printf(Timer task has been called\n);
  }
 
  // Initialise the timer data structure
  void Init()
  {
 int index;
 count = NUM;
 // Note down the reference time
 reference = time(0);
 printf(reference : %ld\n, reference);
 
 // Initialise the data structure such that associate function gets
 // called after 3, 6, 9, 12, 15 seconds respectively.
 for(index = 0; index  count; index++)
 {
timerArray[index].runningTime = (index + 1) * 3;
timerArray[index].func = print;
 }
  }
 
  // This function check the min heap property and arrange
  // the element such that at every node, root node should be
  // less than its right and left child element.
  Heapify(int index)
  {
int left, right, minIndex;
TIMER temp;
left = LEFT(index);
right = RIGHT(index);
if(left  (count) 
  (timerArray[left].runningTime  timerArray[index].runningTime))
{
   minIndex = left;
}
else
{
   minIndex = index;
}
if(right  (count) 
  (timerArray[right].runningTime  timerArray[minIndex].runningTime))
{
   minIndex = right;
}
if(minIndex != index)
{
  temp.runningTime = timerArray[index].runningTime;
  temp.func = timerArray[index].func;
 
  timerArray[index].runningTime = timerArray[minIndex].runningTime;
  timerArray[index].func = timerArray[minIndex].func;
 
  timerArray[minIndex].runningTime = temp.runningTime;
  timerArray[minIndex].func   = temp.func;
 
  Heapify(minIndex);
}
  }
 
  // This function builds the MIN heap data structure
  void BuildHeap()
  {
int len, i;
len = sizeof(timerArray)/sizeof(timerArray[0]);
i = (len - 1)/2;
while(i = 0)
{
  Heapify(i);
  i--;
}
Heapify(0);
  }
 
 
  // This function extract the top element of the heap
  // Min heap has the min  element at the top always.
  int HeapExtract()
  {
TIMER temp;
// Swap the 0 the element with last element of the array
temp.runningTime = timerArray[0].runningTime;
temp.func = timerArray[0].func;
 
timerArray[0].runningTime = timerArray[count-1].runningTime;
timerArray[0].func = timerArray[count-1].func;
 
timerArray[count-1].runningTime = temp.runningTime;
timerArray[count-1].func = temp.func;
count--;
// Check the heap property heapify if it got violated
Heapify(0);
// return the minimum element of the heap
return (count);
  }
  void scheduler()
  {
time_t now;
int diff_time, minIndex;
while(count = 0)
{
   now = time(0);
   printf(Current Time: %ld\n, time(0));
   diff_time = now- reference;
   printf(diff_time : %ld\n, diff_time);
   if(diff_time = timerArray[0].runningTime)
   {
 minIndex  = HeapExtract();
 timerArray[minIndex].func();
   }
   else
   {
  sleep(timerArray[0].runningTime - diff_time);
   }
}
  }
  main()
  {
int index, minIndex;
TIMER temp;
 
// Initialise the data structure
Init();
 
// Build MIn heap data structure
BuildHeap(timerArray);
 
// Run the scheduler
scheduler();
 
 return;
  }
  The ouput of above code is
 
  Timer Task is about to run
  reference : 1312510772
 
  Current Time: 1312510775
  diff_time : 3
  Timer task has been called
 
  Current Time: 1312510778
  diff_time : 6
  Timer task has been called
  Current Time: 1312510781
  diff_time : 9
  Timer task has been called
 
  Current Time: 1312510784
  diff_time : 12
  Timer task has been called
 
  Current Time: 1312510787
  diff_time : 15
  Timer task has been called
 
  Please share your comments
 
  On Thu, Aug 4, 2011 at 11:43 AM, Anand Shastri 
 anand.shastr...@gmail.com
  wrote:
 
  Obviously you need to run the task that a closet running time.
 
  For Example
 
  Task 1 : running time = 2 secs
 
  Task 2: running time = 4 secs
 
  This means I want to run the task 1 after 2 secs and task 2 after 4
  second.
 
  How I hope the question is clear to you know
 
  On Thu, Aug

[algogeeks] Google interview question

2011-07-15 Thread Anand Shastri
Given a file containing 4,300,000,000  integers, how
can you *find **one* that *appears* at *least **twice*

-- 
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] Google interview question

2011-07-15 Thread Anand Shastri
file any way contains integers why do we need hash those integers? why not
use the same integers to index an array.

On Fri, Jul 15, 2011 at 6:36 PM, radha krishnan 
radhakrishnance...@gmail.com wrote:

 just hash it

 On Fri, Jul 15, 2011 at 6:28 PM, Anand Shastri
 anand.shastr...@gmail.com wrote:
  Given a file containing 4,300,000,000  integers, how
  can you find one that appears at least twice
 
  --
  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] Google interview question

2011-07-15 Thread Anand Shastri
File has 4,300,000,000 integers if you hash it will create a distinct hash
for 4,300,000,000 integers.

On Fri, Jul 15, 2011 at 7:09 PM, radha krishnan 
radhakrishnance...@gmail.com wrote:

 if number is (131) -1  u declare a 2GB array ?

 On Fri, Jul 15, 2011 at 6:59 PM, Anand Shastri
  anand.shastr...@gmail.com wrote:
  file any way contains integers why do we need hash those integers? why
 not
  use the same integers to index an array.
 
  On Fri, Jul 15, 2011 at 6:36 PM, radha krishnan
  radhakrishnance...@gmail.com wrote:
 
  just hash it
 
  On Fri, Jul 15, 2011 at 6:28 PM, Anand Shastri
  anand.shastr...@gmail.com wrote:
   Given a file containing 4,300,000,000  integers, how
   can you find one that appears at least twice
  
   --
   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.
 

 --
 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.