Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
basics_of_algorithms:algorithmic_complexity [2023/10/20 16:19] werwolf |
basics_of_algorithms:algorithmic_complexity [2023/10/20 16:33] (текущий) werwolf [Выводы] |
||
|---|---|---|---|
| Строка 1184: | Строка 1184: | ||
| - При общих равных условиях программисты выбирают самые быстрые и самые экономичные алгоритмы | - При общих равных условиях программисты выбирают самые быстрые и самые экономичные алгоритмы | ||
| - Выбрать самый быстрый алгоритм оказывается не так просто. Измерения на конкретных данных не позволяют прогнозировать время и память алгоритмов на других данных | - Выбрать самый быстрый алгоритм оказывается не так просто. Измерения на конкретных данных не позволяют прогнозировать время и память алгоритмов на других данных | ||
| + | - Программисты используют нотацию О-большое, чтобы оценить производительность алгоритмов в целом | ||
| + | - Чаще всего встречаются такие сложности, как константная, логарифмическая, линейная, линейно-логарифмическая, квадратическая, экспоненциальная и факториальная. В этом списке они распределены в порядке от самой быстрой к самой медленной | ||
| + | - Нотация О-большое оценивает не только скорость алгоритма, но и память, которую он использует | ||
| + | ===== Примеры ===== | ||
| + | Реализуйте функцию, которая проверяет являться ли число простым или нет. | ||
| + | |||
| + | Оптимизируйте алгоритм так, чтобы он выполнялся за наименьшее количество итераций | ||
| + | |||
| + | **solutions/solution.js** | ||
| + | Реализуйте и экспортируйте функцию по умолчанию | ||
| + | <code javascript> | ||
| + | import isPrime from './solution.js'; | ||
| + | |||
| + | isPrime(2147483648) // false | ||
| + | isPrime(87178291199) // true | ||
| + | </code> | ||
| + | |||
| + | **Решение:** | ||
| + | <code javascript> | ||
| + | const isPrime = (number) => { | ||
| + | if (number < 2) { | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | const sqrt = Math.sqrt(number); | ||
| + | for (let i = 2; i <= sqrt; i += 1) { | ||
| + | if (number % i === 0) { | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return true; | ||
| + | }; | ||
| + | |||
| + | export default isPrime; | ||
| + | </code> | ||
| + | |||
| + | |||
| + | <details> | ||
| + | <summary>**solutions/solution.php**</summary> | ||
| + | Реализуйте функцию <color red>solution</color>. | ||
| + | <code php> | ||
| + | <?php | ||
| + | |||
| + | solution(2147483648) # False | ||
| + | solution(87178291199) # True | ||
| + | </code> | ||
| + | **Решение:** | ||
| + | <code php> | ||
| + | <?php | ||
| + | |||
| + | function solution(int $num): bool | ||
| + | { | ||
| + | if ($num < 2) { | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | for ($i = 2; $i <= sqrt($num); $i += 1) { | ||
| + | if ($num % $i == 0) { | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return true; | ||
| + | } | ||
| + | </code> | ||
| + | </details> | ||
| + | |||
| + | |||
| + | |||
| + | <details> | ||
| + | |||
| + | <summary>**solutions/solution.py**</summary> | ||
| + | Реализуйте функцию solution. | ||
| + | <code python> | ||
| + | from solution import solution | ||
| + | |||
| + | solution(2147483648) # False | ||
| + | solution(87178291199) # True | ||
| + | </code> | ||
| + | **Решение:** | ||
| + | <code python> | ||
| + | import math | ||
| + | |||
| + | |||
| + | def solution(number): | ||
| + | if number < 2: | ||
| + | return False | ||
| + | |||
| + | sqrt = math.sqrt(number) | ||
| + | for i in range(2, int(sqrt)): | ||
| + | if number % i == 0: | ||
| + | return False | ||
| + | |||
| + | return True | ||
| + | </code> | ||
| + | </details> | ||
| + | |||
| + | |||
| + | <details> | ||
| + | <summary>**solutions/Solution.java**</summary> | ||
| + | В файле определите пакет <color red>solutions</color>. Создайте в нем публичный класс Solution и реализуйте в нем публичный статический метод <color red>run()</color>. Метод принимает в качестве параметра целое число типа <color red>long</color> и проверяет, является ли оно простым или нет | ||
| + | <code java> | ||
| + | Solution.run(2147483648); // false | ||
| + | Solution.run(87178291199); // true | ||
| + | </code> | ||
| + | Оптимизируйте алгоритм так, чтобы он выполнялся за наименьшее количество итераций | ||
| + | **Решение:** | ||
| + | <code java> | ||
| + | package solutions; | ||
| + | |||
| + | public class Solution { | ||
| + | public static boolean run(long number) { | ||
| + | if (number < 2) { | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | var sqrt = Math.sqrt(number); | ||
| + | |||
| + | for (var i = 2; i <= sqrt; i++) { | ||
| + | if (number % i == 0) { | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return true; | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | </details> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| - | \\ | ||