Guest User

Untitled

a guest
Dec 16th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.89 KB | None | 0 0
  1. public static void main(String arg[]) {
  2. System.out.println("Hello");
  3. // nFacRuntimeFunc(3);
  4. int[] x = { 2, 3, 2, 4, 5, 6, };
  5. int[] z = new int[10];
  6. z[0] = 1;
  7. z[1] = 2;
  8.  
  9. // printFirstItem(x);
  10. printAllItems(x);
  11. }
  12.  
  13. // static void nFacRuntimeFunc(int n) {
  14. // for (int i = 0; i < n; i++) {
  15. // System.out.println("***" + i);
  16. // System.out.println(n);
  17. // nFacRuntimeFunc(n - 1);
  18. // }
  19. // }
  20.  
  21. // Big O = O(1) = 1 ครับ เพราะไม่มี loop อะไรเลย ส่วน constant ตัดทิ้ง
  22. public static void printFirstItem(int[] arrayOfItems) {
  23. System.out.println(arrayOfItems[0]); // constant
  24. }
  25.  
  26. // Big O = O(n) * O(1) = O(n) นึกเป็นคำพูดในหัวง่ายๆ ทำ n รอบ แต่ละรอบ ทำ
  27. // constant 1 ครั้ง
  28. public static void printAllItems(int[] arrayOfItems) {
  29. for (int item : arrayOfItems) { // O(n)
  30. System.out.println(item); // constant
  31. }
  32. }
  33.  
  34. // Big O = O(n²) เพราะมี 2-nested loop
  35. public static void printAllPossibleOrderedPairs(int[] arrayOfItems) {
  36. for (int firstItem : arrayOfItems) { // O(n)
  37. for (int secondItem : arrayOfItems) { // O(n)
  38. int[] orderedPair = new int[] { firstItem, secondItem }; // constant
  39. System.out.println(Arrays.toString(orderedPair)); // constant
  40. }
  41. }
  42. }
  43.  
  44. // Big O = O(n) + O(n) = O(2n) = O(n) ที่เอามาบวกกันเพราะว่าเป็น loop
  45. // ที่อยู่ level เดียวกัน ไม่ได้ซ้อน nested เข้าไป
  46. // แต่สุดท้ายเราก็ตัดเลขสองออกอยู่ดี ตามหลักการข้อสี่ที่กล่าวไปแล้ว คือ
  47. // เมื่อ n เพิ่มเยอะมากขึ้นเรื่อยๆ การคูณด้วยค่าคงที่ ถือว่าไม่มีนัยสำคัญ
  48. // อารมณ์เหมือน 100M กับ 200M มิลลิวินาที ก็เยอะทั้งคู่อยู่ดีครับ
  49. public void printAllItemsTwice(int[] theArray) {
  50. for (int item : theArray) { // O(n)
  51. System.out.println(item);
  52. }
  53. for (int item : theArray) { // O(n)
  54. System.out.println(item);
  55. }
  56. }
  57.  
  58. // Big O = O(n) + O(n²) = O(n²) เนื่องจากอยู่ level เดียวกัน เลยเอามาบวกกัน
  59. // แต่สุดท้ายก็ตัดเหลือเฉพาะ term ที่ค่า n ส่งผลเยอะที่สุดอยู่ดี
  60. public void printAllNumbersThenAllPairSums(int[] arrayOfNumbers) {
  61. System.out.println("these are the numbers:");
  62. for (int number : arrayOfNumbers) { // O(n)
  63. System.out.println(number);
  64. }
  65. System.out.println("and these are their sums:");
  66. // O (n^2)
  67. for (int firstNumber : arrayOfNumbers) {
  68. for (int secondNumber : arrayOfNumbers) {
  69. System.out.println(firstNumber + secondNumber);
  70. }
  71. }
  72. }
  73.  
  74. public static void bigO(){
  75.  
  76. // Big O = O(2n) = O(n) อยู่ดี
  77. int n =2;
  78. for(int i = 0;i<2*n;i++){ // O(2n)
  79. // cout << i << endl;
  80. }
  81.  
  82. // Big O = O(n) * O(1) = O(n) อันนี้ไม่ใช่เห็น 2-nested loop แล้วจัด O(n²) เลย ผิดนะครับ เพราะ inner-loop เป็น O(1) นะ
  83. for(int i = 0; i < n; i++) { // O(n)
  84. for(int j = 0; j < 2; j++) { // O(1)
  85. // do stuff
  86. }
  87. }
  88.  
  89. // Big O = O(n) * O(log n) = O(n log n) นะครับ สังเกตว่า inner-loop ค่า j จะเพิ่มทีละ 2 เท่า ของ j เดิม ณ ขณะนั้น มันเลยใช้เวลาน้อยครับ ไปตกอยู่ช่วงของ log n นั่นเอง
  90. for(int i = 0; i < n; i++) { // O(n)
  91. for(int j = 1; j <= n; j *= 2) { // O(log n)
  92. // do constant time stuff
  93. }
  94. }
  95. // Big O = O(n) * O(n) = O(n²) ถึงแม้จะไม่มี nested-loop แต่ใน condition มันเป็น n*n นะ ไม่ใช่ n เฉยๆ ระวังๆ
  96. for(int i = 0; i < n*n; i++) { // O(n) * O(n)
  97. // cout << i << endl;
  98. }
  99.  
  100.  
  101. //Big O = O(n) * O(n) * O(n) = O(n³) 3-nested loop เลยทีเดียวเชียว
  102.  
  103. // for(j=1; j<=n; j++) { // O(n)
  104. // for(k=1; k<=n; k++) { // O(n)
  105. // c[j][k] = 1;
  106. // for(l=1; l<=n; l++) { // O(n)
  107. // c[j][k] = c[j][k] * b[l][k];
  108. // }
  109. // }
  110. //
  111. //
  112.  
  113. }
  114.  
  115. //Big O = O(n) * O(n-1) * O(n-2) * … * O(1) = O(n!) หวังว่าคงไม่มีใครทำนะครับ เพราะแค่ n = 10 Big O ก็ปา 3,628,800 แล้ว ลองใส่ไปสักเยอะๆ แล้วรันอัลกอริทึมดูสิครับ ก่อนทำแนะนำให้เช็คประกันคอมก่อนด้วยนะฮ้าฟฟ
  116. void nFacRuntimeFunc(int n) {
  117. for(int i=0; i<n; i++) { // O(n)
  118. nFacRuntimeFunc(n-1); // O(n-1)... because it is recursive
  119. }
  120. }
  121.  
  122. // Big O = O(n) * O(n) * O(n) = O(n³) ใน function A มีแค่ loop เดียวก็จริง แต่ในแต่ละรอบนั้นเรียก functionB ด้วยทุกครั้ง ทำให้เราต้องคูณ Big O ของ functionB เข้าไปกับ Big O ของ functionA ด้วยครับ
  123. // void functionA(int n) {
  124. // for(j=1; j<=n; j++) { // O(n)
  125. // functionB(n) // functionA calls to another function (functionB)
  126. // }
  127. // }
  128. // void functionB(int n) {
  129. // for(k=1; k<=n; k++) { // O(n)
  130. // for(l=1; l<=n; l++) { // O(n)
  131. // // do something
  132. // }
  133. // }
  134. // }
  135.  
  136.  
  137. }
Add Comment
Please, Sign In to add comment