Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр В Битве Героев вы будете уничтожать монстров, отправляться на приключения со своим кланом. Вас множество локаций, монстров, снаряжения. Приведи своего героя к победе!

Битва Героев

Приключения, Ролевые, Мидкорные

Играть

Топ прошлой недели

  • SpongeGod SpongeGod 1 пост
  • Uncleyogurt007 Uncleyogurt007 9 постов
  • ZaTaS ZaTaS 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
2
DELETED
1 год назад
Лига программистов

Алгоритмы поиска⁠⁠

В программировании одной из наиболее часто встречающихся задач является поиск. При решении таких задач мы исходим из предположения, что группа данных, в которой необходимо найти заданный элемент, является фиксированной.
Пример: Пусть задан массив из n элементов array[0...n-1]. Обычно items описывает запись с некоторым полем, выполняющим роль ключа. Задача заключается в поиске элемента, ключ которого равен заданному аргументу поиска x (a[i], key = x). Полученный в результате i, удовлетворяющий условию a[i] = key = x, обеспечивает доступ к другим полям обнаруженного элемента. Так как нас интересует в первую очередь сам процесс поиска, а не обнаруженные данные, то мы будем считать, что тип item включает только ключ (item = key).
1. Линейный поиск
Линейный поиск заключается в простом, последовательном просмотре массива с увеличением шаг за шагом той его части, где желаемого элемента не обнаружено. Условием окончания поиска является либо нахождение элемента, либо просмотр всего массива без обнаружения совпадений. Этот метод просто проверяет каждый элемент массива по очереди, пока не найдет искомый элемент или не просмотрит весь массив.

Линейный поиск
int i = 0;
const int n = 100;
int arr[n] = {...};
int x;
cin >> x;
while((i < n) && (arr[i] != x)) {
i += 1;
}
2. Линейный поиск с барьером
При линейном поиске на каждом шаге требуется вычислять логические выражения и увеличивать индекс. Чтобы увеличить скорость поиска, можно упростить само логическое выражение. Это можно сделать, если мы гарантируем, что совпадение всегда произойдет. Для этого в конец массива достаточно поместить дополнительный элемент x. Такой вспомогательный элемент называется барьером. Он охраняет нас от перехода за пределы массива. Этот метод упрощает линейный поиск, добавляя искомый элемент в конец массива. Это гарантирует, что поиск всегда будет успешным, и упрощает условие окончания поиска.
const int n = 100;
int arr[n] = {0...n};
int x;
cin >> x;
arr[n] = x;
int i = 0;
while (arr[i] != x) i += 1;
3. Бинарный поиск
Для рассмотрения алгоритма мы будем считать, что массив будет заранее упорядочен, то есть удовлетворяет условию 1 <= k < N; a[k-1] <= a[k]. Основная идея алгоритма выбрать случайно некоторый элемент, предположим a[m] и сравнить его с аргументом поиска x. Если он равен x, то поиск заканчивается. Если меньше x, то мы заключаем, что все элементы с индексами <= m можно исключить из дальнейшего поиска. Это соображение приводит нас к алгоритму, который называется поиск делением пополам. Этот метод использует преимущество отсортированного массива, чтобы ускорить поиск. Он выбирает элемент в середине массива и сравнивает его с искомым. Если элемент в середине меньше искомого, то поиск продолжается в правой половине массива. Если элемент в середине больше искомого, то поиск продолжается в левой половине массива. Этот процесс повторяется, пока не будет найден искомый элемент или пока не останется непроверенных элементов.
int n = 100, left = 0, right = n - 1;
int arr[n] = {0...n};
int x;
bool found = false;

cout << "Введите число для поиска: ";
cin >> x;

while(left <= right && !found) {
int m = (left+right)/2;
if(arr[m] == x) {
found = true;
cout << "Число найдено на позиции: " << m << endl;
}
else if(arr[m] < x) left = m + 1;
else right = m - 1;
}

if(!found) {
cout << "Число не найдено." << endl;
}

Бинарный поиск
Эффективность алгоритма можно несколько улучшить, если поменять местами заголовки условных операторов. Проверку на равенство можно выполнить во вторую очередь, так как она встречается лишь единожды и приводит к окончанию работы.
Поиск в таблице
Поиск в массиве = поиск в таблице. Особенно если ключ сам является составным объектом, таким как массив чисел или массив символов. Часто встречается поиск символов, когда массив символов называют строками или словами. Строковый тип определяется так, string = char arr[0...n-1]. Для установки факта совпадения, мы должны убедиться, что все символы сравниваемых строк соответственно равны один к другому, поэтому сравнение составных операндов сводится к поиску их на неравенство. Если нет не равных частей, то это равенство. Чаще всего используется 2 представления о размерах строк. 1) Размер указывается неявно, благодаря добавлению кольцевого символа, который больше нигде не употребляется. Обычно используется непечатаемый символ со значением 0C ('/0') (минимальный символ из всех символов). 2) Размер явно хранится в качестве первого элемента массива, то есть строка s имеет вид s = s0, s1, ..., s(n-1). Эти символы являются фактическими в строке, а s0 = char(n) (определяет размер строки). Этот метод аналогичен поиску в массиве, но применяется к строкам. Здесь мы ищем подстроку в строке, сравнивая каждый символ подстроки с соответствующим символом строки.
Задача: упорядоченная таблица T (в алфавитном порядке); Аргумент поиска = x (string); T = string arr[0...n-1]. N достаточно велико.
int n = ...; // Замените на конкретное значение
string arr[n] = {...}; // Замените на конкретные значения
string x;
int l = 0, r = n;

cout << "Введите строку для поиска: ";
cin >> x;

while(l < r) {
int m = (l + r) / 2;
if(arr[m] == x) {
cout << "Строка найдена на позиции: " << m << endl;
break;
}
else if(arr[m] < x) l = m + 1;
else r = m;
}

if(l == r) {
cout << "Строка не найдена." << endl;
}

Прямой поиск строки
Пусть задан массив s из n элементов. И задан массив p из m элементов. 0 < m <= n. s: array[0...n-1] of item, p: array[0...n-1] of item. Поиск строки обнаруживает первое вхождение p в s. Обычно item это символы, то есть их можно считать некоторым текстом, а p является образом или словом. Мы хотим найти первое вхождение в слово. Рассмотрим прямолинейный поиск алгоритма. Поиск можно представить, как повторяющие сравнения. Этот метод ищет первое вхождение подстроки в строке, сравнивая каждый символ подстроки с соответствующим символом строки.
string P = "..."; // Замените на искомую строку
string T = "..."; // Замените на текст, в котором ищем
int M = P.size();
int N = T.size();
bool found = false;
for(int i = 0; i <= N - M && !found; i++) {
int j = 0;
while(j < M && T[i + j] == P[j]) {
j++;
}
if(j == M) {
found = true;
cout << "Строка найдена на позиции: " << i << endl;
}
}
if(!found) {
cout << "Строка не найдена." << endl;
}

Алгоритмы поиска Алгоритм, IT, Программист, C++, Гифка, Длиннопост
Алгоритмы поиска Алгоритм, IT, Программист, C++, Гифка, Длиннопост
Показать полностью 2
[моё] Алгоритм IT Программист C++ Гифка Длиннопост
26
DELETED
1 год назад
Лига программистов
Серия Алгоритмы и структуры данных

Типы данных⁠⁠

Тип данных - это набор значений и операций, которые можно проводить над этими значениями.

Концепция типа данных:

  1. Тип данных определяет, какие значения может принимать переменная или выражение.

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

  3. Каждая операция или функция требует аргументов определенного типа.

Простейшие типы данных

Простейшие типы данных - это базовые типы, которые определяются через перечисление значений.

Например, если у нас есть новый тип NAME, мы можем определить его значения как Value1, Value2, и так далее. Это выглядит примерно так: TYPE NAME = (Value1, Value2, ..., ValueN). Это значит, что переменная этого типа может принимать любое из этих значений.

[моё] Программирование IT Алгоритм Программист Данные Текст
41
DELETED
1 год назад
Лига программистов

Простейшие и составные стандартные типы данных⁠⁠

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

Целые числа (integer): Это числа без десятичных знаков. Диапазон этих чисел зависит от количества бит, выделенных под их хранение. Если используется n бит, то диапазон будет от −2^(n−1) до 2^(n−1)−1. Операции над данными этого типа точны и следуют арифметическим правилам. Если результат выходит за допустимые пределы, происходит переполнение и вычисления останавливаются.

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

Логический тип (boolean): Имеет только два значения - True (истина) и False (ложь). Используется для логических операций.

Символьный тип (char): Представляет собой одиночные символы. Стандарт ASCII был принят для кодировки этих символов, но сейчас часто используются utf-8, utf-16, utf-64.

Ограниченные типы данных: Это типы данных с определенным диапазоном значений. Например, TYPE T = [MIN, MAX].

Массивы: Это структура данных, которая содержит элементы одного типа. Каждый элемент можно получить по его индексу. Например, TYPE T = ARRAY[N] OF REAL.

Записи (RECORD): Это составные типы данных, которые могут содержать элементы различных типов.

Множества (SET): Это тип данных, который может содержать уникальные элементы определенного типа. Например, TYPE T = SET OF T0.

Последовательности (sequence): Это тип данных, который содержит упорядоченный набор элементов.

Строки (string): Это последовательности символов. Например, Type T = String(T0).

Показать полностью
[моё] Технологии IT Программирование Программист Алгоритм Текст
42
DELETED
1 год назад
Серия Алгоритмы и структуры данных

Алгоритмы и структуры данных⁠⁠

Информация - сведение, независимое от типов данных. Информация бывает аналоговой и цифровой.

Данные - сведение для вывода, решения

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

Особенности алгоритма:

1) Конечность: Алгоритм всегда должен завершаться после выполнения конечного числа шагов. Это означает, что он не бесконечно продолжается, а имеет четкую точку завершения.

2) Определенность: Каждый шаг алгоритма должен быть четко определен и иметь однозначное значение. Это означает, что действия, которые нужно выполнить, не могут иметь двусмысленных интерпретаций.

3) Ввод: Алгоритм имеет некоторое число входных данных, которые задаются до начала его работы или динамически определяются во время выполнения. Простыми словами, алгоритму нужно знать, с чем он будет работать.

4) Вывод: У алгоритма есть одно или несколько выходных данных, которые связаны с входными данными.

5) Эффективность: Эффективность алгоритма определяется тем, насколько простыми являются его операторы. Если мы можем точно выполнить эти операторы с помощью карандаша и бумаги в течение ограниченного времени, то алгоритм считается эффективным.

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

В псевдокоде используется:

  1. Выражения: Используйте арифметические операции, чтобы вычислить значения.

  2. Объявления метода: Определите функции или методы для выполнения конкретных задач.

  3. Структура принятия решений: Используйте условные операторы (if-else) для выбора разных путей в зависимости от условий.

  4. Циклы: Используйте циклы (например, for или while) для повторения действий.

  5. Индексирование массива: Обращайтесь к элементам массива по индексу.

  6. Обращения к методам: Вызывайте методы объектов для выполнения определенных действий.

  7. Возвращаемое значение метода: Убедитесь, что ваши методы возвращают нужные значения.

Давайте подробнее разберемся с алгоритмом нахождения наибольшего общего делителя (НОД) для двух натуральных чисел N и M.

  1. Инициализация: Пусть P будет минимальным из чисел N и M. Это позволяет сократить диапазон поиска общих делителей.

  2. Инициализация t: Устанавливаем t равным 1. Начальное значение НОД.

  3. Проверка P: Если P равно 1, переходим к шагу 5. В противном случае переходим к шагу 4.

  4. Поиск делителей:Задаем i последовательностью всех целых чисел от 2 до P.

  5. По возрастанию проверяем каждое i:Если M делится на i без остатка (M % i == 0) и N делится на i без остатка (N % i == 0), то обновляем t: t = i. Это означает, что i является общим делителем для N и M.

  6. Завершение алгоритма: Результатом НОД будет значение t.

Пример: Пусть N = 12 и M = 18.

  • P = min(12, 18) = 12.

  • t = 1 (начальное значение).

  • Проверяем i от 2 до 12:i = 2: 12 % 2 == 0 и 18 % 2 == 0, обновляем t: t = 2.

  • i = 3: 12 % 3 == 0 и 18 % 3 == 0, обновляем t: t = 3.

  • i = 4: 12 % 4 == 0 и 18 % 4 != 0 (не делится на 4).

  • …

  • i = 12: 12 % 12 == 0 и 18 % 12 == 0, обновляем t: t = 12.

  • НОД(12, 18) = 6 (так как 6 - наибольший общий делитель).

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

Показать полностью
[моё] Программирование Алгоритм IT Программист Текст
4
artydev
artydev
1 год назад

Algo trading⁠⁠

Algo trading

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

Зашел на не очень большие деньги - пока выглядит нормально, посмотрим на результат через пару недель, месяц.

У кого есть желание спустить деньги в унитаз попробовать - пишите в личку, скину проект.

На скриншоте P&L c 7 марта

__
artydev & Co

Algo trading Кросспостинг, Pikabu Publish Bot, Telegram (ссылка), Криптовалюта, Алгоритм, Трейдинг, Биткоины, Бизнес, Биржа, Личный опыт
Показать полностью 1
Кросспостинг Pikabu Publish Bot Telegram (ссылка) Криптовалюта Алгоритм Трейдинг Биткоины Бизнес Биржа Личный опыт
0
WILD.WIND77
1 год назад

Помогите с домашкой, плиз⁠⁠

помоги, Сила Пикабу!

Помогите с домашкой, плиз Домашнее задание, Алгоритм, Помощь, Нужен совет, Скриншот

сын в последний момент вспомнил о домашке((
4-й класс, алгоритмика. до 9-го задания решили вместе, но тут я застрял.
отправил его спать сам сижу и не могу решить

[моё] Домашнее задание Алгоритм Помощь Нужен совет Скриншот
35
10035
marse1ka
1 год назад

В X/Twitter раскрыли как работают алгоритмы в службах такси⁠⁠

В X/Twitter раскрыли как работают алгоритмы в службах такси Юмор, Такси, Алгоритм, Грустный юмор, Таксист, Яндекс Такси, Telegram (ссылка), Скриншот, Мат

Источник - Дневник Технаря

Показать полностью 1
Юмор Такси Алгоритм Грустный юмор Таксист Яндекс Такси Telegram (ссылка) Скриншот Мат
566
1
PaulKraw
1 год назад

Авито когда исчезнут перекупы. время тратить неохота народу⁠⁠

Авито когда исчезнут перекупы. время тратить неохота народу
Авито Сервис Алгоритм Отзыв Скриншот
5
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии