Pull to refresh
  • by relevance
  • by date
  • by rating

Нерекурсивная выборка всего дерева Adjacency List

Algorithms
Вообще, чем мне не нравится Adjacency List, так это рекурсией, особенно, когда нужно выбрать дерево, без каких либо ограничений, например:
  • Все дерево комментариев;
  • Карта сайта;
  • Навигационное меню;
  • и т.д.;
Предлагаемые решения формирования массива дерева с помощью указателей, конечно, позволяют избавиться от лишних запросов к базе, но увы не исключают рекурсию, пусть по массиву, но все же. А у нас…
Читать дальше →
Total votes 31: ↑22 and ↓9+13
Views3.4K
Comments 52

dual-pivot quicksort

Algorithms
Улучшенный алгоритм quicksort: iaroslavski.narod.ru/quicksort/DualPivotQuicksort.pdf

Краткое описание:
Обычный quicksort делит массив на два отрезка, выбрав случайный элемент P. Потом сортирует массив так, чтобы все элементы меньше P попали в первый отрезок, а остальные — во второй. Затем алгоритм рекурсивно повторяется на первом и на втором отрезках.

Dual-pivot quicksort делит массив на три отрезка, вместо двух. В результате количество операций перемещения элементов массива существенно сокращается.

В PDF-е автор алгоритма привдит более детализированное описание алгоритма и имплементацию на java.
Total votes 21: ↑13 and ↓8+5
Views8.6K
Comments 8

Мемоизация в Java

Java
Мемоизация — (Memoization, англ) вариант кеширования, заключающийся в том, что для функции создаётся таблица результатов, и будучи вычисленной при определённых значениях параметров результат заносится в эту таблицу. В дальнейшем результат берётся из данной таблицы.
Эта техника позволяет засчёт использования дополнительной памяти ускорить работу программы.Данный подход очень частно применяется в функциональных языках программирования, однако и в императивных ему так же можно найти применение. В данном топике рассматривается использование мемоизации в языке java приводятся различные примеры мемоизации и в конце производится небольшое сравнение производительности данных методов.
Читать дальше →
Total votes 41: ↑37 and ↓4+33
Views7K
Comments 48

Алгоритм Карацубы для умножения двух чисел

Algorithms
Как-то раз пришлось реализовывать умножение длинных чисел, через половинки их представления на C++. 128-битные числа были представлены как пара 64-битных. Оказалось что перемножить два 128-битных числа и получить все 256 бит результата по сложности сравнимо с 4-мя произведениями 64-битных половинок. Как же это работает…

Читать дальше →
Total votes 57: ↑49 and ↓8+41
Views26K
Comments 53

Переполнение при умножении

C++
Sandbox
Перед выполнением умножения C++ приводит множители к одному типу не короче int, а разрядность результата совпадает с разрядностью приведенных множителей. Для того, чтобы не потерять точность, иногда требуется для умножения выполнять дополнительные операции.
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Views11K
Comments 23

Создание собственной View под Android – может ли что-то пойти не так?

Development of mobile applicationsAlgorithmsDevelopment for Android
«Дело было вечером, делать было нечего» — именно так родилась идея сделать вью с возможностью зума, распределяющую юзеров по рангам в зависимости от кол-ва их очков. Так как до этого я не имел опыта в создании собственных вьюшек такого уровня, задача показалась мне интересной и достаточно простой для начинающего… но, *ох*, как же я ошибался.

В статье я расскажу о том, с какими проблемами мне пришлось столкнутся как со стороны Android SDK, так и со стороны задачи (алгоритма кластеризации). Основная задача статьи – не научить делать так называемыми “custom view”, а показать проблемы, которые могут возникнуть при их создании.

Тема будет интересна тем из вас, кто имеет мало (или не имеет вовсе) опыта в создании чего-то подобного, а также тем, кто хочет словить лулзов с автора в сто первый раз уверовать в «гибкость» Android SDK.
Читать дальше →
Total votes 26: ↑24 and ↓2+22
Views35K
Comments 10

Классические алгоритмы и структуры данных на JavaScript

JavaScriptProgrammingAlgorithms
Привет Всем! Я недавно запустил на GitHub проект JavaScript Algorithms and Data Structures, который содержит примеры классических алгоритмов и структур данных написанных на JavaScript с объяснениями, примерами и ссылками для дальнейшего изучения (в частности на соответствующие YouTube видео).

Основная задача проекта — помочь программистам в изучении и применении алгоритмов и сделать это на JavaScript-е.
Читать дальше →
Total votes 76: ↑71 and ↓5+66
Views76K
Comments 31

Наивный Байес, или о том, как математика позволяет фильтровать спам

Spamming and anti-spammingMathematicsRMachine learningStatistics in IT
Sandbox
Привет! В этой статье я расскажу про байесовский классификатор, как один из вариантов фильтрации спам-писем. Пройдемся по теории, затем закрепим практикой, ну и в конце предоставлю свой набросок кода на мною обожаемом языке R. Буду стараться излагать максимально легкими выражениями и формулировками. Приступим!

image
Читать дальше →
Total votes 20: ↑18 and ↓2+16
Views17K
Comments 16

Laplace Blur — Можно ли блюрить Лапласом вместо Гаусса, во сколько раз это быстрее, и стоит ли того потеря 1/32 точности

Abnormal programmingProgrammingAlgorithmsImage processingMathematics
image

«Блюр» в простонародье — эффект размытия, в цифровой обработке изображений. Бывает очень эффектен и сам по себе, и как составляющее анимаций интерфейса, или более сложных производных эффектов (bloom/focusBlur/motionBlur). При всем этом честный блюр в лоб довольно медленен. И часто реализации встроенные в целевую платформу оставляют желать лучшего. То скорость печальна, то артефакты режут глаза. Ситуация рождает множество компромиссных реализаций, лучше или хуже подходящих для определенных условий. Оригинальная реализация с хорошим качеством достоверности и высочайшей скоростью, при этом нижайшей зависимостью от аппаратной части ждет вас под катом. Приятного аппетита!
Читать дальше →
Total votes 41: ↑40 and ↓1+39
Views9.8K
Comments 35

How does a barcode work?

PythonProgrammingAlgorithmsPopular scienceSystems engineering
Hi all!

Every person is using barcodes nowadays, mostly without noticing this. When we are buying the groceries in the store, their identifiers are getting from barcodes. Its also the same with goods in the warehouses, postal parcels and so on. But not so many people actually know, how it works.

What is 'inside' the barcode, and what is encoded on this image?



Lets figure it out, and also lets write our own bar decoder.
Read more →
Total votes 27: ↑25 and ↓2+23
Views11K
Comments 0

A small overview of SIMD in .NET/C#

.NETC#

Here’s a quick look at algorithm vectorization capabilities in .NET Framework and .NET Core. This article is for those who know nothing about these techniques. I will also show that .NET doesn’t actually lag behind "real compiled" languages for native development.

Read more →
Total votes 8: ↑7 and ↓1+6
Views12K
Comments 0

Задача о сумме

Algorithms
В знаменитой задаче с монетами, которыми необходимо отсчитать сдачу, как известно, есть две беды.
— первая – это количество номиналов монет,
— вторая – это количество разрядов числа, представляющего сдачу.
И обе эти величины оказывают экспоненциальное воздействие на нагрузку машины Тьюринга, которая собственно и занимается подсчётом.
Признавать, что человек имеет сразу две зависимости, не принято даже в обществе алкоголиков. Поэтому я решил подстраховаться и избавиться от одной из этих проблем заранее. Путь это будет количество номиналов монет.
Читать дальше →
Total votes 9: ↑6 and ↓3+3
Views6.1K
Comments 23

Стыкуемся с МКС с помощью JavaScript и циркуля

JavaScriptAlgorithmsArtificial IntelligenceAstronauticsAstronomy
Компания SpaceX, основанная небезызвестным Илоном Маском, выпустила симулятор ручной стыковки корабля Crew Dragon с МКС. Если все пойдет по плану, стыковку проведут 27 мая 2020 года. Она будет проходить в полностью автоматическом режиме, но экипаж корабля сможет переключиться на ручное управление. Собственно, именно ручной режим и воспроизведен в симуляторе.

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

Космический челнок так и норовит улететь не туда… А точность с которой нужно попасть в шлюз составляет 20 см… по трем осям, а также по угловой скорости, скорости смещения и т.д.

Во мне заиграли патриотичные чувства и как-то стало обидно, за бывшую космическую державу, и я принял этот симулятор как вызов. Раз Маск решил показать сложность стыковки, и какие сложности их инженеры проходили, чтобы сделать программу автоматической стыковки, я решил написать, в свободное от работы время, программу на JavaScript, которая с легкостью состыкует Dragon и МКС в этом симуляторе.

Как тебе такое, Илон Маск?

image
Курение вредит вашему здоровью
Читать дальше →
Total votes 71: ↑69 and ↓2+67
Views24K
Comments 96

Найти подстроку в строке

ProgrammingAlgorithmsDesignSoftwareData Engineering
Sandbox

Алгоритм поиска строки Бойера — Мура — алгоритм общего назначения, предназначенный для поиска подстроки в строке.

Давайте попробуем найти вхождение подстроки в строку.

Подготовка к собеседованию
Total votes 22: ↑20 and ↓2+18
Views7.6K
Comments 12