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

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

1. Введение

В этой статье мы покажем несколько алгоритмов поиска шаблона в большом тексте. Мы опишем каждый алгоритм с предоставленным кодом и простой математической базой.

Обратите внимание, что предоставленные алгоритмы — не лучший способ выполнения полнотекстового поиска в более сложных приложениях. Чтобы правильно выполнять полнотекстовый поиск, мы можем использовать Solr или ElasticSearch .

2. Алгоритмы

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

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

1. Введение

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

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

Давайте начнем с объяснения концепции этих алгоритмов на примере простейшего бинарного генетического алгоритма.

2. Как работают генетические алгоритмы

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

1. Введение

В этом уроке мы узнаем об алгоритме градиентного спуска . Мы реализуем алгоритм на Java и проиллюстрируем его шаг за шагом.

2. Что такое градиентный спуск?

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

Градиент — это еще одно слово для обозначения уклона, а спуск означает спуск. Как следует из названия, градиентный спуск идет вниз по склону функции, пока не достигнет конца.

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

1. Обзор

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

2. Графическое представление

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

Во-первых, давайте начнем с определения вершины в Java:

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

1. Введение

В этом руководстве мы познакомим вас с жадными алгоритмами в экосистеме Java.

2. Жадная проблема

Столкнувшись с математической задачей, может быть несколько способов разработать решение. Мы можем реализовать итеративное решение или некоторые передовые методы, такие как принцип «разделяй и властвуй» (например , алгоритм быстрой сортировки ) или подход с динамическим программированием (например , задача о рюкзаке ) и многое другое.

Большую часть времени мы ищем оптимальное решение, но, к сожалению, не всегда получаем такой результат. Однако бывают случаи, когда ценен даже неоптимальный результат. С помощью некоторых конкретных стратегий или эвристик мы могли бы заработать себе такую драгоценную награду.

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

1. Введение

В этом руководстве мы увидим, как работает сортировка кучей, и реализуем ее на Java.

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

2. Структура данных кучи

Куча — это специализированная древовидная структура данных . Поэтому он состоит из узлов. Мы присваиваем элементы узлам: каждый узел содержит ровно один элемент.

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

1. Введение

В этом руководстве мы объясним, как работает алгоритм сортировки на месте.

2. Алгоритмы на месте

Алгоритмы на месте — это те алгоритмы, которые не нуждаются в какой-либо вспомогательной структуре данных для преобразования входных данных. По сути, это означает, что алгоритм не использует дополнительное пространство для обработки ввода. Он практически переопределяет ввод с выводом.

Однако на самом деле алгоритм может потребовать небольшого и непостоянного дополнительного пространства для вспомогательных переменных. Сложность этого пространства в большинстве случаев O(log n) , хотя иногда допускается что-то меньшее, чем линейное.

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

1. Обзор

В этом уроке мы обсудим алгоритм сортировки вставками и рассмотрим его реализацию на Java .

Сортировка вставками — это эффективный алгоритм для упорядочения небольшого количества элементов. Этот метод основан на том, как карточные игроки сортируют карты.

Начинаем с пустой левой рукой и картами, выложенными на стол. Затем мы убираем одну карту со стола и вставляем ее в правильное положение в левой руке. Чтобы найти правильную позицию для новой карты, мы сравниваем ее с уже отсортированным набором карт в руке, справа налево.

Давайте начнем с понимания шагов алгоритма в форме псевдокода.

2. Псевдокод

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

1. Введение

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

2. Мотивация

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

Двоичный поиск разделяет пространство поиска на каждом шаге независимо от распределения данных, поэтому его временная сложность всегда равна O(log(n)) .

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

1. Обзор

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

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

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

2. Неконтролируемые алгоритмы