Рубрики
Алгоритмы Массивы "поиск"

Массивы «Бинарный поиск»

O(log2n)
для массива из 1000 элементов
O(log21000)

время сортировки массива более длительнее чем работа линейного поиска

требование
массив отсортирован по порядку

Процесс выполнения

смотрим по середине символ
— если символ идет раньше, которую мы открыли, то будем
рассматривать левую часть
— если символ идет позже, которую мы открыли, то будем
рассматривать правую часть
таким образом каждый раз мы отсеиваем ровно половину в массиве пока не найдем элемент

количество итераций — счетчик выполнения оператора for

const arr=[1,4,5,8,51,2,7,5,5,2,11]
let cnt = 0;

function binarySearch(arr, item){
 let start = 0
 let end = arr.length;
 let middle;
 let found = false;
 let position = -1;
 while (found === false && start <= end){
  cnt+=1
  middle = Math.floor((start+end)/2);
  if (arr[middle] === item){
   found = true
   position = middle
   return position;
  }
  if (item < arr[middle]){
   end = middle-1
  } else {
   start = middle+1
  }
  return position;
}
console.log(binarySearch(arr,0))
console.log(cnt);

  • рекурсивный код более локаничный
cnt=0;
function recursiveBinarySearch(arr,item,start,end){
  let middle = Math.floor((start+end)/2);
  cnt+=1
  if (item == arr[middle]){
   return middle;
  }
  if (item < arr[middle]){
   return recursiveBinarySearch(arr,item,start,middle-1)
} else {
  return recursiveBinarySearch(arr,item,middle+1,end)
 }
}
console.log(recursiveBinarySearch(arr,12,0,arr.length))
console.log(cnt);
Рубрики
Алгоритмы Массивы "поиск"

Массивы «линейный поиск»

последовательно сравниваем с тем элементом, который ищем

массив из n элементов
O(n)
n — количество итераций в массиве

для массива из 1000 элементов
O(1000)

лучший случай
элемент находим в начале списка за одну операцию

худший случай
элемент находим в конце списка

сложность
нам необходимо пройтись по каждому элементу, который в этом списке находится

const arr=[1,4,5,8,51,2,7,5,5,2,11]
let cnt = 0;//количество итераций
function linearSearch(arr, item){
 for (let i =0; i< arr.length; i++){
  cnt+=1;
  if (arr[i] === item) {
   return i;
  }
 }
 return null;
}
console.log(linearSearch(arr, 11));
console.log('count = ', count);
Рубрики
Алгоритмы

О(n)

«О большое»

сложность алгоритма, или же его скорость алгоритмов описывается с помощью специальной аннотации

(n) в скобках

указывается количество операций, за которое этот алгоритм приходит к финальному результату

указывается всегда наихудшая ситуация

типы графиков

по скорости выполнения
от лучшего до наихудшего

t=1
t=log2n
t=n
t=n*log2n
t=n*n
t=n!

Например

Поиск элемента в массиве (линейный)

для массива из 1000 элементов
O(1000)

массив из n элементов
O(n)

Рубрики
Алгоритмы

Алгоритм «понятие»

алгоритм — это набор последовательных действий

  1. решают задачу
    любой фрагмент кода — это алгоритм
  2. оценка сложности
    некоторые алгоритмы могут быть эффективнее других
    эффективность не всегда равна скорости работы алгоритма
    в некоторых ситуациях более медленный алгоритм может оказаться на определённой выборке данных более эффективным
Рубрики
ООП

Парадигма ООП «понятие»

Был придуман объектно-ориентированный подход, который воспринимался сообществом программистов, как нечто грандиозное, способное решить все проблемы

КЛАСС — ОБЪЕКТ

Рассмотрим два основных понятия
объектно-ориентированных парадигмы

Есть человек
Человека можно охарактеризовать следующими свойствами

  • Имя
  • Фамилия
  • Возраст
  • Вес
  • Рост

Это некоторый список характеристик, с помощью которого можно охарактеризовать любого человека. При этом в контексте ООП подобная характеристика называется КЛАССОМ. (Класс Человек, Класс Human, Класс Person)

ОБЪЕКТ

Конкретный представитель КЛАССАЭКЗЕМПЛЯР называется ОБЪЕКТОМ. В данном примере — это Вася Пупкин, которому 27 лет

КЛАСС

Класс — это некоторое описание характеристик, а Объект — это конкретный экземпляр, у которого каждая характеристика имеет какое-то значение (Например Имя=Вася)

СВОЙСТВА

В контексте ООП эти характеристики (Имя, Фамилия и т.д.) называются СВОЙСТВАМИ.

МЕТОДЫ

А действия, которые может совершать тот или иной объект называются МЕТОДАМИ (Например Ходить, Рисовать, Говорить и т.д.)

КОНСТРУКТОР

У любого класса есть конструктор — это специальный метод, некоторый блок инструкций, который вызывается при создании объекта. Он также может принимать в себя некоторые аргументы. Обычно в конструкторе свойством объекта присваиваются какие-то значения. С помощью оператора new мы можем создать объект (отдельный экземпляр какого-либо класса).

Особенности Класса

У созданного объекта мы можем вызвать соответствующий метод, который нам вернёт значение (результат). При этом из любого класса мы можем создать столько объектов, сколько нам потребуется.

Каждый класс может включать в себя столько свойств и методов — сколько потребуется, но хорошей практикой является делать классы под конкретные ЗАДАЧИ.