Timkor

greedyAlgorithm

Feb 25th, 2021 (edited)
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Відпрацювала над своїм кодом і вдосконалила його завдяки Вашим коментам, дякую Вам-)
  2. /* ви добре попрацювали, і зараз у одному кроці до розуміння принципу алгоритму що використовується доволі часто, -
  3.  це жадібний алгоритм. Коли результат рішення на кожному кроці наприкінці дасть результат рішення для всіх вхідних
  4.  даних */
  5. // Се функція для обчислення НАЙБІЛЬШОГО числа з ДВОХ - добре!
  6.  
  7. function max (x, y) {
  8.     return x > y ? x : y
  9. }
  10. /*  так, тернарний оператор доречний саме коли потрібно отримати значення: чи для його повернення, чи для присвоювання.
  11.  А чи спрацює такий код? Це про ті зайві елсе.))
  12. function max (x, y) {
  13.     if (x > y) {
  14.         return x;
  15.     }
  16.     return y;
  17. }
  18. */
  19.  
  20. let a = +prompt ('Введи перше число');
  21. let b = +prompt ('Введи друге число');
  22.  
  23. console. log (max (a, b));
  24.  
  25. // Додаткова задача (для використання створеної мною функції) на вивід максимального числа в масиві, якій вже дан
  26.  
  27. let array = [3, 5, 1, 7, 2, 0, 9, 4, 6, 8];
  28. let matchNum = 0; // Змінна для порівняння чисел в масиві
  29. let maxNum = 0; // Змінна для виводу максимального числа
  30.  
  31. for (let i = 0; i < array.length; i++) {
  32.     max (matchNum, array [i]) /* функція повертає більше з двох, тут вона відпрацює, але ми не збережемо її результату,
  33.     тобто цей виклик функції ніяк не впливає на роботоу програми*/
  34.     matchNum = array [i];
  35.  
  36.  
  37.     if (max (matchNum, array [i])> maxNum) { /* тут вже краще використовуєте значення що повертає функція,  для
  38.     порівняння воно годиться, але можна ще спростити рішення ) */
  39.         maxNum = (max (matchNum, array [i])); /* ось воно!  єдиний рядок потрібний для вирішення, тільки передавати
  40.         до функції треба поточний елемент та максимальний , ну а той що функція поверне зберігати до максимального.)
  41.         Тобто якщо ми по черзі переберемо всі елементи масиву порівнюючи кожний з локальним максимумом - то отримаємо
  42.         глобальний максимум . Локальний максимум - це більше з двох на кожному кроці.*/
  43.     }
  44. }
  45.  
  46. console.log ('===== MAX IS =====   ' + maxNum)
  47.  
  48. //Друга задача на вивод максимального числа з 10-ти чисел користувача (теж з використаннм моєї функції)
  49.  
  50. let numbers = [];
  51. let i = 0;
  52. while (i < 10) {
  53.     numbers [i] = +prompt ('Введи число'); /* насправді ще на цьому етапі можна додати один рядок коду про який
  54.     йдеться далі (та одну змінну), та цього буде достатньо для виявлення максимального, тобто можна до маисву не складати
  55.     навіть. З точки зору декомпозиції код зараз є розділений на етапи : введення даних; пошук максимального;
  56.     Корисно навчитися знаходити максимальне ще на етапі введення даних, уявімо, що пам'яті обмаль- масив створювати ніде;
  57.     або таку ситуацію, що числа вводяться нескінчено, і після введення кожного нам потрібна знати про максимальне .) */
  58.     i++;
  59. }
  60. console.log();
  61. // Виведу сюди створений масив чисел користувача
  62. let j = 0;
  63. while (j < numbers.length) {
  64.     console.put (numbers [j++] + ' ')
  65. }
  66. console.log();
  67. console.log();
  68.  
  69. /* якщо розлядати задачі як окремі то існування повністю ідентичного фрагменту коду можна якось виправдати, але якщо
  70. * таки фрагменти є у однієї програмі - то це не добре, варто дотримуватися принципу DRY, та винести такий повторюючийся
  71. * фрагмент до окремої функції.
  72. *
  73. * Але тут і зараз важливіше розібратися саме з тим як отримати максимальний (чи мінімальний, чи ще якийся) елемент з
  74. * масиву елементів роблячи перевірку на кожному кроці з одним елементом - тобто порівняння того, максимального що маємо  з
  75. * поточним елементом,  та заміна максимального на поточний у разі якщо той "переміг"   -  потрібна одна змінна  та один
  76. * рядок коду в циклі що перебирає масив */
  77.  
  78. let matchNum = 0; // Змінна для порівняння чисел в масиві // не потрібна
  79. let maxNum = 0; // Змінна для виводу максимального числа
  80.  
  81. for (let i = 0; i < numbers.length; i++) {
  82.     max (matchNum, numbers[i])
  83.     matchNum = numbers[i];
  84.  
  85.  
  86.     if (max (matchNum, numbers[i])> maxNum) {
  87.         maxNum = (max (matchNum, numbers[i])); // цей рядок, але порівнюювати потрібно з максимумом
  88.     }
  89. }
  90.  
  91. console.log ('+++++ ' + maxNum + " +++++") /* ці красиві визерунки були для того, щоб ви прониклися ідеєю, що результат
  92. роботи програми (функції) може бути використанний будь-де у будь-якому вигляді, а тому краще повертати лише потрібне значення,
  93. без додаткових штук.
  94. Мені дуже приємно, що ви старанно йдете по курсу. Завжди відкритий до запитань.
  95. Гарного коду!
  96. */
Add Comment
Please, Sign In to add comment