Advertisement
Guest User

Untitled

a guest
May 22nd, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.80 KB | None | 0 0
  1. Tenta Mars 10
  2.  
  3. Uppgift 1
  4.  
  5. a) for-loopen har tidkomplexiteten O(logN) pga funktionen halverar varje gång.
  6.  
  7. b) Antingen kommer den kanske aldrig hitta talet vi sökte efter (NOT_FOUND) eller så kommer den hoppa fram och tillbaka mellan vänster-halvan och höger-halvan och i värsta fall fastna i en evig loop.
  8.  
  9. c) Vet inte ifall detta är bästa men det är en lösning
  10. metoden börjar i mitten av arrayen och kollar ”grann-elementerna” till mid osv för att se ifall arrayen är sorterad
  11. public boolean check (int [] a, int x){
  12. mid = a.length/2;
  13. low = mid-1;
  14. high = mid+1;
  15.  
  16. while (high <= a.length || low >= 0{
  17. if (high <= a.length && a[high] > a[high+1){
  18. return false;
  19. high++;
  20. }
  21.  
  22. if (low => 0 && a[low] < a[low-1]{
  23. return false;
  24. low++;
  25. }
  26. return true;
  27.  
  28. d) Eftersom tidskomplexiteten kommer vara O(n) för att kolla om arrayen är sorterad så kommer O(n) vara den dominanta. Då binarySearch är O(logN). Vilket i detta fal försämrar tidskomplextiteten och Tonys lösning är värdelös
  29.  
  30. Uppgift 2
  31.  
  32. a1) De personer som är födda samma år kommer att läggas på samma plats och kollision kommer hända.
  33. Istället hade man kunnat välja hela personnumret istället då varje personnr är unikt.
  34.  
  35. a2) vid pop() vid position 0 kommer ej gå ifall vi gör push() flera gånger. Eftersom vid pop() i stackar så tar vi alltid det senaste elementet som senast pushades in. (TopOfStack)
  36. Hade man velat ha ut ett element med ett speciellt index hade vi kunnat använda en annan datastruktur, typ ArrayList
  37.  
  38. b) o c) har jag inte skrivit ned tyvärr
  39.  
  40. Uppgift 3
  41. public class BoundedBuffer {
  42. ListNode head;
  43. ListNode tail;
  44. int maxSize;
  45. int size;
  46.  
  47. public BoundedBuffer(int theSize){
  48. head = new ListNode(head);
  49. tail = new ListNode(tail);
  50. maxSize = theSize;
  51. size = 0;
  52. }
  53.  
  54. //Sätter in elementet x i bufferten om den inte är full.
  55. //Om bufferten innehåller maximalt antal tillåtna element genereras BuffertOverflowException
  56. public void insert(Object x){
  57. ListNode nynode = new ListNode(x);
  58. ListNode temp = head;
  59.  
  60. if (isFull()){
  61. System.out.println("BuffertOverflowException!");
  62. }
  63. while (temp != tail){
  64. if (temp.next == tail){
  65. temp.next = nynode;
  66. x.next = tail;
  67. size++;
  68. break;
  69. }
  70. temp = temp.next;
  71. }
  72.  
  73. //Returnerar och tar bort första elementet i bufferten.
  74. //Om bufferten är tom returneras null.
  75. public Object getFirst(){
  76. if(head.next == tail){
  77. return null;
  78. }
  79. Object remove = head.element;
  80. head = head.next;
  81. return remove;
  82. }
  83.  
  84. //Undersöker om bufferten är tom
  85. public boolean isEmpty() {
  86. return size == 0;
  87. }
  88.  
  89. //Undersöker om bufferten innehåller maximalt antal tillåtna element
  90. public boolean isFull() {
  91. return size == maxSize;
  92. }
  93.  
  94. //Skriver ut innehållet i bufferten
  95. public void print(){
  96. ListNode node = head.next;
  97. while (node != tail){
  98. System.out.println(node.element);
  99. node = node.next;
  100. }
  101. }
  102.  
  103. Uppgift 4
  104.  
  105. a1) Nej det är inte ett binärt sökträd. Ett binärt sökträd har maxim två barn för varje nod. Elementen är även ordnade. Lägre värde till vänster och högre värde till höger.
  106. För vilken nod som helst i trädet, alla noder som innehåller ett värde mindre än sitt eget värde befinner sig i det vänstra delträdet.
  107. Alla noder som innehåller ett värde som är större än sitt värde befinner sig i det högra delträdet.
  108.  
  109. a2) Ja det är ett balanserat träd. Eftersom höjdskillnaden mellan det vänstra och högra delträdet är maximun 1.
  110.  
  111. a3) Ja, det är en MinHeap. Värdet i förälder är alltid mindre än sina barn. Objektet med den minsta prioritetsnumret (högst prioritet) finns alltid i roten vid minHeap.
  112.  
  113. b) Postfix: 5 3 4 2 ^ * 6 / +
  114.  
  115. c1) 34 45 3 67 65 1 17 19
  116.  
  117. c2) Problemet som uppstår är att de andra värdena som har samma index kommer att försvinna. Vid remove måste vi sätta en ”markering” ifall andra element har samma plats.
  118.  
  119. d) QuickSort använder en divide and conquer - strategi som går ut på att man delar ett problem i två mindre ”subproblem” rekursivt repeterade gånger (tills det inte går att dela mer).
  120.  
  121. 7 13 5 2 18 10
  122. Välj ut pivot genom att ta left(7), mid(2), right(10) i arrayen. medianen är 7 av dom 3.
  123. Lägg minsta värdet till left och pivoten o störta värdet till right.
  124.  
  125. 2 13 5 18 7 10
  126.  
  127. pivot = 7
  128. left = 13
  129. right = 5 byt plats på left och right
  130.  
  131. 2 5 13 18 7 10
  132.  
  133. pivot = 7
  134. left = 13 byt plats på pivot och left
  135.  
  136. 2 5 7 18 13 10
  137.  
  138. Elementen till vänster är mindre än 7. Elementen till höger är större än 7.
  139. Vilket ger oss två nya subproblem.
  140.  
  141. vänstra halvan: 2 5 -> left = 2, right = 5. Färdig!
  142. pivot 7 -> pivot index
  143. högra halvan: 18 13 10 -> left = 18, right = 10
  144.  
  145. Så nu kör vi quickSort på högra halvan bara. osv osv osv osv :) :)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement