1. Введение
В этом руководстве мы опишем алгоритм сортировки Shell в Java.
Сложность алгоритмов во время выполнения часто зависит от характера входных данных.
В этом уроке мы увидим, как тривиальная реализация алгоритма быстрой сортировки имеет низкую производительность для повторяющихся элементов .
Далее мы изучим несколько вариантов быстрой сортировки для эффективного разделения и сортировки входных данных с высокой плотностью повторяющихся ключей.
В предыдущей статье мы представили алгоритм Прима для поиска минимальных остовных деревьев . В этой статье мы будем использовать другой подход, алгоритм Крускала, для решения задач минимального и максимального остовных деревьев.
Остовное дерево неориентированного графа — это связный подграф, покрывающий все вершины графа с минимально возможным числом ребер. В общем случае граф может иметь более одного остовного дерева. На следующем рисунке показан граф с остовным деревом (ребра остовного дерева выделены красным):
В этом уроке мы узнаем, как вычислить медиану потока целых чисел.
Мы продолжим постановку проблемы с примерами, затем проанализируем проблему и, наконец, реализуем несколько решений на Java.
Медиана — это среднее значение упорядоченного набора данных. Для набора целых чисел существует столько же элементов меньше медианы, сколько больше.
В этом уроке мы увидим, как проверить, содержит ли строка все буквы алфавита или нет.
Вот простой пример: « Фермер Джек понял, что большие желтые одеяла стоят дорого.
” – который на самом деле содержит все буквы алфавита.
Мы обсудим три подхода.
Во-первых, мы смоделируем алгоритм, используя императивный подход. Затем будут использоваться регулярные выражения. И, наконец, мы воспользуемся более декларативным подходом, используя Java 8.
Кроме того, мы обсудим большую сложность используемых подходов.
В этой статье мы рассмотрим головоломку судоку и алгоритмы, используемые для ее решения.
Далее мы реализуем решения на Java. Первым решением будет простая атака грубой силы. Второй будет использовать технику Dancing Links .
Имейте в виду, что основное внимание мы сосредоточим на алгоритмах, а не на дизайне ООП.
Имея два целых числа, a
и b
, мы говорим, что они взаимно просты, если единственный множитель, на который они делятся, равен 1. Взаимно простые или взаимно простые числа являются синонимами относительно простых чисел.
В этом кратком руководстве мы рассмотрим решение этой проблемы с помощью Java.
Оказывается, если наибольший общий делитель ( gcd
) двух чисел a
и b
равен 1 (т.е. gcd(a, b) = 1
), то a
и b
взаимно просты. В результате определение того, являются ли два числа взаимно простыми, состоит просто в том, чтобы выяснить, равен ли НОД
1.
Цель этой серии — объяснить идею генетических алгоритмов и показать наиболее известные реализации.
В этом уроке мы опишем очень мощную Java-библиотеку Jenetics, которую можно использовать для решения различных задач оптимизации.
Если вы чувствуете, что вам нужно больше узнать о генетических алгоритмах, рекомендуем начать с этой статьи .
В этом уроке мы увидим, как инвертировать число, используя математический подход в Java. Сначала мы увидим, какие математические операции необходимы для этого, а затем рассмотрим три различных способа реализации.
Для начала давайте возьмем пример и посмотрим, что именно должно произойти. Например, мы хотим, чтобы число 1234 стало 4321. Этого можно добиться с помощью следующего подхода:
В этом туториале мы поговорим о производительности разных коллекций из Java Collection API . Когда мы говорим о коллекциях, мы обычно думаем о структурах данных List, Map
и Set
, а также об их общих реализациях.
Во-первых, мы рассмотрим понимание сложности Big-O для общих операций. Затем мы покажем реальные цифры времени выполнения некоторых операций сбора.
Обычно, когда мы говорим о временной сложности, мы имеем в виду нотацию Big-O . Проще говоря, нотация описывает, как время выполнения алгоритма растет с увеличением размера входных данных.