Асимптотический анализ — практика
https://www.udemy.com/course/algorithms-and-data-structure/learn/lecture/26307284#overview
Question 1 🟢
// O(n)
function search(arr: number[], x: number): number {
for (let i = 0; i < arr.length; ++i) {
if (arr[i] === x) {
return i + 1;
}
}
return -1;
}Так как у нас цикл в котором на каждом шагу мы делаем действий, то выходит
Question 2 🟢
// О(1)
let c = 4;
for (let i = 0; i < c; ++i) {
console.log(i);
}Так как делается константное количество действий, то это
Question 3 🟢
// O(n*n)
for (let i = 0; i < n; ++i) {
for (let j = 0; j < n; ++j) {
console.log(i + ' ' + j);
}
}Так как у нас 2 цикла друг в друге и каждый идет до n, то выходит
Question 4 🟢
// O(log(n))
let sum = 0;
while (n !== 0) {
sum += n % 10;
n = Math.floor(n / 10);
}Так как у нас цикл в котором на каждом шагу мы уменьшаем наше n в 10 раз, значит, что цикл будет работать раз, и так как в цикле действия оцениваются в , то выходит
Question 5 🟢
// O(n + m)
for (let i = 0; i < n; ++i) {
console.log(i);
}
for (let i = 0; i < m; ++i) {
console.log(i);
}Так как у нас 2 цикла друг за другом, один идет до n, а другой до m, и у нас нет никакой связи между n и m, то мы вынуждены писать , потому что однозначно не известно кто из них больше.
Question 6 🔴
// O(n ^ 5)
for (let i = 0; i < n; ++i) {
for (let j = 0; j < n * n; ++j) {
for (let k = 0; k < j; ++k) {
console.log(i + ' ' + j + ' ' + k);
}
}
}Самый внутренний делает приблизительно действий, что значит это . Добавляя внешние циклы получаем
Question 7 🟢
// O(n * sqrt(n))
for (let i = 0; i < n; ++i) {
for (let j = 0; j * j <= n; ++j) {
console.log(i + j);
}
}Переписав условие второго цикла как j < sqrt(n), мы получим