COMP 250 2016, Assignment 2 Due Thursday February crepeau/COMP250/COMP250-HW2.pdf COMP 250 2016,...

COMP 250 2016, Assignment 2 Due Thursday February crepeau/COMP250/COMP250-HW2.pdf COMP 250 2016, Assignment
COMP 250 2016, Assignment 2 Due Thursday February crepeau/COMP250/COMP250-HW2.pdf COMP 250 2016, Assignment
COMP 250 2016, Assignment 2 Due Thursday February crepeau/COMP250/COMP250-HW2.pdf COMP 250 2016, Assignment
COMP 250 2016, Assignment 2 Due Thursday February crepeau/COMP250/COMP250-HW2.pdf COMP 250 2016, Assignment
COMP 250 2016, Assignment 2 Due Thursday February crepeau/COMP250/COMP250-HW2.pdf COMP 250 2016, Assignment
download COMP 250 2016, Assignment 2 Due Thursday February crepeau/COMP250/COMP250-HW2.pdf COMP 250 2016, Assignment

of 5

  • date post

    13-Nov-2020
  • Category

    Documents

  • view

    0
  • download

    0

Embed Size (px)

Transcript of COMP 250 2016, Assignment 2 Due Thursday February crepeau/COMP250/COMP250-HW2.pdf COMP 250 2016,...

  • COMP 250 2016, Assignment 2 Due Thursday February 18th 2016

    (no programming this time)

    1. Prove that if

    limn→∞ f(n)/g(n) = 0

    then f(n) is O(g(n)) but f(n) is not θ(g(n)).

    2.Solve the following Exercises

    a) 99n b) n2 c) n4 d) n2n e) 3n

    f) f1(n) = 99n2 g) f2(n) = 2lg n h) f3(n) = n2 log log n i) f4(n) = n2n j) f5(n) = 3n

    [6%]

    [5%]

    [5%]

  • 3.

    4.

    5. We know ∑n i=1

    i = n(n+1)/2, ∑ n

    i=1 i 2 = n(n+1)(2n+1)/6, ∑

    n

    i=1 i 3 = (n(n+1)/2)2.

    Prove that in general ∑n i=1

    i k is 𝛩(n k+1) for any positive integer k.

    6.


    [6%]

    [8%]

    [10%]

    [5%]

  • 7. Suppose I give you access to a (singly) linked list by its entry point named "mylist". You can move from one cell to the next by using the ".next" field of each cell. For example, mylist points at the cell containing the blue diamond, whereas mylist.next points at the cell containing the green pentagone. If you walk through this list from the head forward you will notice that it contains no null pointer. This means that at some point this list points into itself. In the example below, you can see this because you see the entire list from the outside. But if you visit all the nodes of the list, one by one, it maybe a bit more difficult to figure out what is going on.

    Now imagine you start two pointers at the beginning of the list: one named "tortoise" and another named "hare". The former moves step by step while the latter moves two steps at a time

    tortoise = tortoise.next hare = hare.next.next

    Repeat this process until the two pointers meet : tortoise == hare.

    a) Where will this occur in the example above ? 


    Once this has happened, move the tortoise back to the beginning of the list. Start moving the two pointers from their current positions in the list, but both in a step by step fashion:

    tortoise = tortoise.next hare = hare.next

    Repeat until the two pointers meet once again : tortoise == hare.

    [3%]

  • b) Where will this occur in the example above ?

    c) Show that whatever is the length x of the initial segment before entering the loop and whatever is the length y of the loop itself, the above process will always find the point connecting the two parts. Provide a formal proof here.

    d) Combine all this together into an algorithm that breaks an arbitrary list mylist into two sub-lists: 
 
 NR = the part of the list from beginning before the connecting point 
 


    R = the part of the list closing into a loop starting at the connecting point.

    Make sure your algorithm works even if the list does not contain a loop, in which case NR contains the whole list and R is an empty list.

    e) Analyse the running time of your algorithm as a function of the number of cells in the list. How much space does your algorithm use as a function of the number of cells in the list.

    f) Let f(s) be a function from a finite set S into itself. Define for all s∈S, f(0)(s) = s and f(n)(s) = f(f(n-1)(s)) for n>0. Give an efficient algorithm to identify for each x the smallest n and k such that f(n)(x) = f(n+k)(x).

    g) Analyse the running time of your algorithm as a function of n and k. How much space does your algorithm use as a function of n and k.

    h) Explain the link between this whole problem and what was asked in HW1 !!!

    [3%]

    [5%] [8%]

    [8%]

    [8%]

    [10%]

    [10%]

  • Le Lièvre et la Tortue

    Rien ne sert de courir ; il faut partir à point. Le Lièvre et la Tortue en sont un témoignage. Gageons, dit celle-ci, que vous n'atteindrez point Sitôt que moi ce but. - Sitôt ? Êtes-vous sage ? Repartit l'animal léger. Ma commère, il vous faut purger Avec quatre grains d'ellébore. - Sage ou non, je parie encore. Ainsi fut fait : et de tous deux On mit près du but les enjeux : Savoir quoi, ce n'est pas l'affaire, Ni de quel juge l'on convint. Notre Lièvre n'avait que quatre pas à faire ; J'entends de ceux qu'il fait lorsque prêt d'être atteint Il s'éloigne des chiens, les renvoie aux Calendes, Et leur fait arpenter les landes. Ayant, dis-je, du temps de reste pour brouter, Pour dormir, et pour écouter D'où vient le vent, il laisse la Tortue Aller son train de Sénateur. Elle part, elle s'évertue ; Elle se hâte avec lenteur. Lui cependant méprise une telle victoire, Tient la gageure à peu de gloire, Croit qu'il y va de son honneur De partir tard. Il broute, il se repose, Il s'amuse à toute autre chose Qu'à la gageure. A la fin quand il vit Que l'autre touchait presque au bout de la carrière, Il partit comme un trait ; mais les élans qu'il fit Furent vains : la Tortue arriva la première. Eh bien ! lui cria-t-elle, avais-je pas raison ? De quoi vous sert votre vitesse ? Moi, l'emporter ! et que serait-ce Si vous portiez une maison?