GithubHelp home page GithubHelp logo

grokkingalgogolangedition's Introduction

Личная выдержка книги Бахаргава Адитья "Грокаем Алгоритмы" с примерами кода на GO

Перевод книги совсем не инженерный.. придётся что-то переработать.

Глава 1 -Знакомство с алгоритмами

Алгоритмом называется набор инструкций для выполнения некоторой задачи.

Повышение скорости работы алгоритмов зачастую связано с декомпозицией (разделени целого на части) задачи.

Формулировака "Разделяй и властвуй" в книге - профанация ИМХО.

Предположим, вы ищете фамилию человека в телефонной книге (какая древняя технология!). Она начинается с буквы «К». Конечно, можно начать с самого начала и перелистывать страницы, пока вы не доберетесь до буквы «К». Но скорее всего для ускорения поиска лучше раскрыть книгу на середине: ведь буква «К» должна находиться где-то ближе к середине телефонной книги. Или предположим, что вы ищете слово в словаре, и оно начинается с буквы «0». И снова лучше начать с середины.

Теперь допустим, что вы вводите свои данные при входе на Facebook. При этом Facebook необходимо проверить, есть ли у вас учетная запись на сайте. Для этого ваше имя пользователя нужно найти в базе данных. Допустим, вы выбрали себе имя пользователя karlrnageddon. Facebook может начать с буквы А и проверять все подряд, но разумнее будет начать с середины.

Перед нами типичная задача поиска. И во всех этих случаях для решения задачи можно применить один алгоритм: бинарный поиск. Бинарный поиск - это алгоритм; на входе он получает отсортированный список элементов (позднее я объясню, почему он должен быть отсортирован). Если элемент, который вы ищете, присутствует в списке, то бинарный поиск возвращает ту позицию, в которой он был найден. В противном случае бинарный поиск возвращает null.

Бинарный поиск (итерационный метод в цикле)


func iterBinarySearch(array []int, target int, lowIndex int, highIndex int) int {
	startIndex := lowIndex
	endIndex := highIndex
	var mid int
	for startIndex < endIndex {
		mid = int((startIndex + endIndex) / 2)
		if array[mid] > target {
			endIndex = mid
		} else if array[mid] < target {
			startIndex = mid
		} else {
			return mid
		}
	}
	return -1
}

О-большое

«O» большое — математические обозначения для сравнения асимптотического поведения (асимптотики) функций.

Фраза «сложность алгоритма есть O(f(n))» означает, что с увеличением параметра n, характеризующего количество входной информации алгоритма, время работы алгоритма будет возрастать не быстрее, чем f(n) умноженная на некоторую константу;

Время выполнение алгоритма не всегда на прямую зависит от нотации "О" большое. Также стоит принимать во внимание скорость отработки одного шага алгоритма.

(Простой поиск - прямым перебором)

OBigPic

Шпаргалка

  • Бинарный поиск работает намного быстрее простого.
  • Время выполнения O(log п) быстрее О(п), а с увеличением размера списка, в котором ищется значение, оно становится намного быстрее. -Скорость алгоритмов не измеряется в секундах.
  • Время выполнения алгоритма описывается ростом количества операций.
  • Время выполнения алгоритмов выражается как «О-большое~.

Глава 2 - Сортировка выбором

  • Массивы и Linked Lists
  • Сортировка выбором

Глава 3 - Сортировка выбором

Глава 4 - Сортировка выбором

Глава 5 - Сортировка выбором

grokkingalgogolangedition's People

Contributors

jarnsida avatar

Watchers

 avatar

Forkers

nkkrops

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.