algorithm учебник
Начало работы с алгоритмом
Поиск…
замечания
Введение в алгоритмы
Алгоритмы повсеместно распространены в области компьютерных наук и разработки программного обеспечения. Выбор соответствующих алгоритмов и структур данных повышает эффективность нашей программы в стоимости и времени.
Что такое алгоритм? Неформально алгоритм является процедурой для выполнения конкретной задачи. [Skiena: 2008: ADM: 1410219] В частности, алгоритм представляет собой четко определенную вычислительную процедуру, которая принимает некоторое значение (или набор значений) в качестве входных данных и выдает некоторое значение или набор значений в качестве вывода . Таким образом, алгоритм представляет собой последовательность этапов вычисления, которые преобразуют входной сигнал в выходной сигнал. Cormen et. и др. явно не замечает, что алгоритм не обязательно требует ввода. [Кормен: 2001: IA: 580470]
Формально алгоритм должен удовлетворять пяти особенностям: [Knuth: 1997: ACP: 260999]
- Конечность . Алгоритм должен всегда заканчиваться после конечного числа шагов.
- Определенность . Каждый шаг алгоритма должен быть точно определен; действия, которые необходимо выполнить, должны быть строго определены. Именно это качество [Cormen: 2001: IA: 580470] относится к термину «четко определенный».
- Вход . Алгоритм имеет ноль или более входных данных . Это величины, которые задаются алгоритму первоначально до его начала или динамически по мере его запуска.
- Выход . Алгоритм имеет один или несколько выходов . Это величины, которые имеют определенное отношение к входам. Мы ожидаем, что алгоритм выдаст один и тот же результат при повторении одного и того же ввода.
- Эффективность . Как правило, ожидается, что алгоритм будет эффективным . Его операции должны быть достаточно базовыми, чтобы их можно было выполнять в принципе и за конечный промежуток времени кем-то, использующим карандаш и бумагу.
Процедура, которая не имеет конечности, но удовлетворяющая всем остальным характеристикам алгоритма, может быть названа вычислительным методом . [Кнут: 1997: ACP: 260999]
Пример алгоритмической задачи
Алгоритмическая проблема задается путем описания полного набора экземпляров, над которыми он должен работать, и их вывода после запуска в одном из этих экземпляров. Это различие между проблемой и экземпляром проблемы является основополагающим. Алгоритмическая проблема, известная как сортировка , определяется следующим образом: [Skiena: 2008: ADM: 1410219]
- Проблема: Сортировка
- Вход: последовательность из n ключей,
a_1, a_2, ..., a_n
. - Выход: переупорядочение входной последовательности так, что
a'_1 <= a'_2 <= ... <= a'_{n-1} <= a'_n
Экземпляром сортировки может быть массив строк, например { Haskell, Emacs }
или последовательность чисел, например { 154, 245, 1337 }
.
Начало работы с Simple Fizz Buzz Algorithm in Swift
Для тех из вас, кто новичок в программировании в Swift, и для тех из вас, которые исходят из разных баз программирования, таких как Python или Java, эта статья должна быть весьма полезной. В этом посте мы обсудим простое решение для реализации быстрых алгоритмов.
Fizz Buzz
Возможно, вы видели Fizz Buzz, написанную как Fizz Buzz, FizzBuzz или Fizz-Buzz; все они относятся к одному и тому же. Эта «вещь» является главной темой сегодняшнего обсуждения. Во-первых, что такое FizzBuzz?
Это общий вопрос, который возникает в собеседовании.
Представьте себе серию чисел от 1 до 10.
1 2 3 4 5 6 7 8 9 10
Fizz и Buzz относятся к любому числу, которое кратно 3 и 5 соответственно. Другими словами, если число делится на 3, оно заменяется на fizz; если число делится на 5, оно заменяется шумом. Если число одновременно кратно 3 И 5, число заменяется на «fizz buzz». По сути, он эмулирует знаменитую игру детей «fizz buzz».
Чтобы решить эту проблему, откройте Xcode, чтобы создать новую игровую площадку и инициализировать массив, как показано ниже:
// for example
let number = [1,2,3,4,5]
// here 3 is fizz and 5 is buzz
Чтобы найти все fizz и buzz, мы должны перебирать массив и проверять, какие числа являются fizz, а какие - шум. Для этого создайте цикл for для итерации через инициализированный массив:
for num in number {
// Body and calculation goes here
}
После этого мы можем просто использовать условие «if else» и оператор модуля в swift ie -%, чтобы найти fizz и buzz
for num in number {
if num % 3 == 0 {
print("\(num) fizz")
} else {
print(num)
}
}
Большой! Вы можете перейти на консоль отладки на игровой площадке Xcode, чтобы увидеть выход. Вы обнаружите, что «шипы» были отсортированы в вашем массиве.
Для части Buzz мы будем использовать ту же технику. Попробуем попробовать, прежде чем прокручивать статью - вы можете проверить свои результаты против этой статьи, как только закончите это делать.
for num in number {
if num % 3 == 0 {
print("\(num) fizz")
} else if num % 5 == 0 {
print("\(num) buzz")
} else {
print(num)
}
}
Проверьте выход!
Это довольно прямолинейно - вы разделили число на 3, fizz и разделили число на 5, гул. Теперь увеличьте числа в массиве
let number = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Мы увеличили диапазон чисел от 1-10 до 1-15, чтобы продемонстрировать концепцию «fizz buzz». Поскольку 15 кратно и 3, и 5, число должно быть заменено на «fizz buzz». Попробуйте сами и проверьте ответ!
Вот решение:
for num in number {
if num % 3 == 0 && num % 5 == 0 {
print("\(num) fizz buzz")
} else if num % 3 == 0 {
print("\(num) fizz")
} else if num % 5 == 0 {
print("\(num) buzz")
} else {
print(num)
}
}
Подожди ... это еще не конец! Вся цель алгоритма заключается в правильной настройке среды выполнения. Представьте, если диапазон увеличивается от 1-15 до 1-100. Компилятор проверяет каждый номер, чтобы определить, делится ли он на 3 или 5. Затем он снова пробегает числа, чтобы проверить, делятся ли числа на 3 и 5. Код, по существу, должен будет проходить через каждое число в массиве дважды - сначала нужно будет выполнить число на 3, а затем запустить его на 5. Чтобы ускорить процесс, мы можем просто сказать, что наш код будет делить числа на 15 напрямую.
Вот окончательный код:
for num in number {
if num % 15 == 0 {
print("\(num) fizz buzz")
} else if num % 3 == 0 {
print("\(num) fizz")
} else if num % 5 == 0 {
print("\(num) buzz")
} else {
print(num)
}
}
Как простой, вы можете использовать любой язык по вашему выбору и приступить к работе
Наслаждайтесь кодированием