Рубрика «структуры данных»

Всем привет! Давно хотел собрать пост по структурам данным, которые есть в C++ и кратенько описать преимущество каждой из них.
В первой итерации статьи начнем с тех, что есть в стандартной библиотеке STL.

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

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

Список — это абстрактный тип данных, хранящий в себе упорядоченный набор значений. Обозначается через квадратные скобки [].

Способы инициализации

Список можно создавать разными способами — от прямого задания в исходном коде до использования функции list() или ввода данных с клавиатуры.

1. Пустой список

arr = []

Читать полностью »

Хочу сразу сказать что не являюсь профессиональным разработчиком и только учусь, статью написал чтобы самому лучше разобраться в теме и помочь таким же начинающим как я сам.

Ну что, начнем.

При создании массива с фиксированными размерами под него выделяется определенная память. Например, пусть у нас будет массив с пятью элементами:

double numbers[5] = {1.0, 2.0, 3.0, 4.0, 5.0};

Читать полностью »

Всем привет!

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

Сначала все шло неплохо: я успешно решал легкие задачки, используя обычные циклы (for, while). Редко когда надо было прям зависать и задумываться над решениями. Чаще, если даже решение было неверным, можно было в процессе искать ошибки и исправлять их. Но тут я наткнулся на задачу с пометкой "Easy" и названием "Merge Two Sorted Lists".

Читать полностью »

JavaScript: структуры данных и алгоритмы. Часть 11 - 1

Привет, друзья!

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

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

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

Интересно? Тогда прошу под кат.

Читать полностью »

В этой статье я расскажу о стеке и задачах в которых он применяется. Включая задачу с заключительного этапа Всероссийской олимпиады школьников по информатике 2025 года.

Что такое стек?

Стек (англ. stack — "стопка") — это структура данных, работающая по принципу LIFO (Last In, First Out) — "последним пришёл, первым ушёл". Реализация стека приведена во многих языках программирования.

Основные операции со стеком:

  1. push(x) — добавить элемент x на вершину стека.

  2. pop() — удалить верхний элемент.

  3. top() — возвращает верхний элемент без удаления.

    Читать полностью »

Когда я увидела в разделе Easy LeetCode задачи со связными списками, сначала было недоумение: что это такое???? Я погуглила, но это не помогло, потому что мне не нужны были ответы вроде:

  • Почему связный список эффективнее, чем то-то и то-то?

  • Как хранит данные связный список?

  • И при чём тут вообще O(n)???

Мне хотелось найти подробное и понятное объяснение вот чего:

  • Связный список и список — это одно и то же?

  • Как им пользоваться? (Не супералгоритмы, а просто увидеть, что он хранит внутри.)

  • Читать полностью »

  1. Нотация О большое для оценки сложности алгоритмов

  2. Структуры данных и их применение в алгоритмах

  3. Некоторые рекомендации для разработки на .NET

При написании алгоритмов нужно учитывать их масштабируемость. Для этих целей используется понятие «О большое», представленное Паулем Бахманном в 1894 году для того, чтобы приблизительно оценивать, как время выполнения алгоритма будет расти при увеличении размеров входных данных.

Пусть f(n) — время выполнения алгоритма, а g(n)  - временная сложность, которая проверяется для алгоритма. Тогда f(n)=O(g(n))Читать полностью »

Почему СУБД такие медленные - 1

Недавно на Хабре публиковался перевод статьи «Просто выберите Postgres» (оригинал, англ. яз) с аргументами, что Postgres — оптимальная БД для десктопных и мобильных приложений. Аналогичное мнение высказывают в других популярных статьях вроде «До свидания MongoDB, здравствуй PostgreSQL». Главным недостатком SQLite называют то, что данные хранятся в одном файле, а MongoDB (а также DynamoDB и Cassandra) — низкую производительность:

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

…Если паттерны доступа существенно изменятся, то может потребоваться полная повторная обработка всех данных».

Более производительные резидентные БД хранят данные в памяти (Redis, Valkey), но их использование ограничено объёмом ОЗУ.

После такого заявления интересно посмотреть на независимые тесты производительности разных СУБД.Читать полностью »

Как правильно тестировать конкурентные структуры данных - 1


Есть потрясающая библиотека Rust под названием loom, которую можно использовать для тщательного тестирования неблокируемых (lock-free) структур данных. Я давно хотел разобраться, как она работает. И сейчас хочу! Но недавно я случайно реализовал небольшой эксперимент, который, как мне кажется, содержит часть идей loom, поэтому о нём стоит написать. Моя цель — не научить вас тому, что нужно использовать на практике (если вы хотите этого, то почитайте документацию loom), а, скорее, вывести пару идей из фундаментальных принципов.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js