what if new task gets added every time.

On Thu, Aug 4, 2011 at 8:24 PM, Gaurav Menghani
<gaurav.mengh...@gmail.com>wrote:

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

Reply via email to