Перейти к основному содержимому

117 записей с тегом "Алгоритмы"

Посмотреть все теги

· 10 мин. чтения

1. Обзор

Сложность алгоритмов во время выполнения часто зависит от характера входных данных.

В этом уроке мы увидим, как тривиальная реализация алгоритма быстрой сортировки имеет низкую производительность для повторяющихся элементов .

Далее мы изучим несколько вариантов быстрой сортировки для эффективного разделения и сортировки входных данных с высокой плотностью повторяющихся ключей.

2. Тривиальная быстрая сортировка

· 9 мин. чтения

1. Обзор

В предыдущей статье мы представили алгоритм Прима для поиска минимальных остовных деревьев . В этой статье мы будем использовать другой подход, алгоритм Крускала, для решения задач минимального и максимального остовных деревьев.

2. Связующее дерево

Остовное дерево неориентированного графа — это связный подграф, покрывающий все вершины графа с минимально возможным числом ребер. В общем случае граф может иметь более одного остовного дерева. На следующем рисунке показан граф с остовным деревом (ребра остовного дерева выделены красным):

./853fa0144788fa1939e4b44ca0bf8d0a.png

· 9 мин. чтения

1. Обзор

В этом уроке мы узнаем, как вычислить медиану потока целых чисел.

Мы продолжим постановку проблемы с примерами, затем проанализируем проблему и, наконец, реализуем несколько решений на Java.

2. Постановка задачи

Медиана — это среднее значение упорядоченного набора данных. Для набора целых чисел существует столько же элементов меньше медианы, сколько больше.

· 3 мин. чтения

1. Обзор

В этом уроке мы увидим, как проверить, содержит ли строка все буквы алфавита или нет.

Вот простой пример: « Фермер Джек понял, что большие желтые одеяла стоят дорого. ” – который на самом деле содержит все буквы алфавита.

Мы обсудим три подхода.

Во-первых, мы смоделируем алгоритм, используя императивный подход. Затем будут использоваться регулярные выражения. И, наконец, мы воспользуемся более декларативным подходом, используя Java 8.

Кроме того, мы обсудим большую сложность используемых подходов.

· 14 мин. чтения

1. Обзор

В этой статье мы рассмотрим головоломку судоку и алгоритмы, используемые для ее решения.

Далее мы реализуем решения на Java. Первым решением будет простая атака грубой силы. Второй будет использовать технику Dancing Links .

Имейте в виду, что основное внимание мы сосредоточим на алгоритмах, а не на дизайне ООП.

2. Головоломка судоку

· 3 мин. чтения

1. Обзор

Имея два целых числа, a и b , мы говорим, что они взаимно просты, если единственный множитель, на который они делятся, равен 1. Взаимно простые или взаимно простые числа являются синонимами относительно простых чисел.

В этом кратком руководстве мы рассмотрим решение этой проблемы с помощью Java.

2. Алгоритм наибольшего общего фактора

Оказывается, если наибольший общий делитель ( gcd ) двух чисел a и b равен 1 (т.е. gcd(a, b) = 1 ), то a и b взаимно просты. В результате определение того, являются ли два числа взаимно простыми, состоит просто в том, чтобы выяснить, равен ли НОД 1.

· 7 мин. чтения

1. Введение

Цель этой серии — объяснить идею генетических алгоритмов и показать наиболее известные реализации.

В этом уроке мы опишем очень мощную Java-библиотеку Jenetics, которую можно использовать для решения различных задач оптимизации.

Если вы чувствуете, что вам нужно больше узнать о генетических алгоритмах, рекомендуем начать с этой статьи .

2. Как это работает?

· 3 мин. чтения

1. Обзор

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

2. Подход к решению

Для начала давайте возьмем пример и посмотрим, что именно должно произойти. Например, мы хотим, чтобы число 1234 стало 4321. Этого можно добиться с помощью следующего подхода:

  1. получить последнюю цифру числа
  • мы можем применить модуль, чтобы получить последнюю цифру
  • 1-я итерация – 1234 % 10 = 4
  • 2-я итерация – 123 % 10 = 3
  1. умножьте обратное число на 10 и добавьте цифру, найденную на предыдущем шаге
  • 1-я итерация — 0 * 10 + 4 = 4 (поскольку для начала нет перевернутого числа, мы умножаем на 0 в 1-й итерации)
  • 2-я итерация – 4*10+3=43
  1. разделите исходное число на 10 и повторите с шага 1 и продолжайте, пока число не станет 0
  • 1-я итерация — 1234/10 = 123
  • 2-я итерация – 123/10=12

· 10 мин. чтения

1. Обзор

В этом туториале мы поговорим о производительности разных коллекций из Java Collection API . Когда мы говорим о коллекциях, мы обычно думаем о структурах данных List, Map и Set , а также об их общих реализациях.

Во-первых, мы рассмотрим понимание сложности Big-O для общих операций. Затем мы покажем реальные цифры времени выполнения некоторых операций сбора.

2. Временная сложность

Обычно, когда мы говорим о временной сложности, мы имеем в виду нотацию Big-O . Проще говоря, нотация описывает, как время выполнения алгоритма растет с увеличением размера входных данных.