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

Вы не увидите эту рекламу в Instagram, потому что Facebook обиделся

Instant Messaging *Algorithms *Internet marketing Display advertising The future is here

Такие компании, как Facebook, создают технологии не для вас, а для ваших данных. Они "пылесосят" все, что могут, из FB, Instagram и WhatsApp, чтобы сделать жизнь людей абсолютно прозрачной.

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

Тем не менее, обнародовать то, что должно оставаться тайным, способны и собственные алгоритмы Facebook. Отголоски такого “палева” прослеживаются в рекламе, которую вы видите. Мы решили использовать те же самые инструменты и показать каждому, как работает большинство технологий. Для этого мы попытались купить рекламу в Instagram.

Доступ запрещен

Мы создали многовариантную таргетированную рекламу, которая должна была продемонстрировать пользователям, какие персональные данные о них собирает и продает Facebook. В объявлении генерировалась и отображалась информация о зрителе, которую использует рекламная платформа. Facebook был не в курсе нашей задумки.

Читать далее
Total votes 63: ↑58 and ↓5 +53
Views 10K
Comments 3

Асимптотический анализ алгоритмов

Algorithms *
Прежде чем приступать к обзору асимптотического анализа алгоритмов, хочу сказать пару слов о том, в каких случаях написанное здесь будет актуальным. Наверное многие программисты читая эти строки, думают про себя о том, что они всю жизнь прекрасно обходились без всего этого и конечно же в этих словах есть доля правды, но если встанет вопрос о доказательстве эффективности или наоборот неэффективности какого-либо кода, то без формального анализа уже не обойтись, а в серьезных проектах, такая потребность возникает регулярно.
В этой статье я попытаюсь простым и понятным языком объяснить, что же такое сложность алгоритмов и асимптотический анализ, а также возможности применения этого инструмента, для написания собственного эффективного кода. Конечно, в одном коротком посте не возможно охватить полностью такую обширную тему даже на поверхностном уровне, которого я стремился придерживаться, поэтому если то, что здесь написано вам понравится, я с удовольствием продолжу публикации на эту тему.

Читать дальше →
Total votes 75: ↑66 and ↓9 +57
Views 111K
Comments 81

Сравнение характеристик структур для операций поиска

Lumber room
При рассмотрении реализаций поиска нашёл интересную таблицу с характеристиками структур, применяемых для реализации символьных таблиц. Причём рассматриваются худшие и средние случаи.
Читать дальше →
Total votes 11: ↑5 and ↓6 -1
Views 193
Comments 4

Penisland, или как написать спеллчекер

Algorithms *
Есть хорошая статья Питера Норвига, в которой он рассказывает как написать спеллчекер в 20 строк кода. В этой статье он показывает как поисковые системы могут исправлять ошибки в запросах. И делает это довольно элегантно. Однако, у его подхода есть два серьезных недостатка. Во-первых, исправление более трех ошибок требует больших ресурсов. А гугл, кстати, неплохо справляется и с четырьмя ошибками. Во-вторых, нет возможности проверки связного текста.



Итак, хочется исправить эти проблемы. А именно, написать корректор коротких фраз или запросов, который:
  • умел бы выявлять три (и более) ошибки в запросе;
  • умел бы проверять «разорванные» или «слипшиеся» фразы, например expertsexchange — experts_exchange, ma na ger — manager
  • не требовал много кода для реализации
  • мог бы достраиваться до исправления ошибок на других языках и других типов" ошибок

Остальное — под катом.
Читать дальше →
Total votes 133: ↑131 and ↓2 +129
Views 11K
Comments 49

Наивный Байесовский классификатор в 25 строк кода

Python *
Наивный Байесовский классификатор один из самых простых из алгоритмов классификации. Тем не менее, очень часто он работает не хуже, а то и лучше более сложных алгоритмов. Здесь я хочу поделиться кодом и описанием того, как это все работает.

И так, для примера возьму задачу определения пола по имени. Конечно, чтобы определить пол можно создать большой список имен с метками пола. Но этот список в любом случае будет неполон. Для того чтобы решить эту проблему, можно «натренировать» модель по маркированным именам.
Если интересует, прошу
под кат
Total votes 37: ↑37 and ↓0 +37
Views 76K
Comments 24

Сортировка данных и возвращение им прежнего порядка

Sport programming *
Довольно часто в спортивном программировании или же просто реализации алгоритмов необходимо отсортировать массив входных данных по определённому критерию. В то время как в ответе требуется исходный порядок. В статье я рассмотрю несколько способов сделать это минимальной кровью на C++. Если интересна эта тематика или имеются интересные предложения, прошу под кат…


Автор изображения: Tobias Rad, лицензия Creative Commons Attribution-Share Alike 3.0 Unported
Читать дальше →
Total votes 38: ↑30 and ↓8 +22
Views 3.4K
Comments 42

Alpha-blending за одно умножение на пиксель на Windows Mobile

Algorithms *
Sandbox
Те, кто занимался графикой на Windows Mobile, наверняка слышали о графической библиотеке GapiDraw. Если заглянуть в их Feature List, то в разделе High Performance можно обнаружить следующие слова: «drawing surfaces with opacity will only require one multiplication per pixel». То есть, они утверждают, что для рисования полупрозрачных картинок требуется всего по одному умножению на каждый пиксель.

В данной статье я попытаюсь объяснить, как это возможно.
Читать дальше →
Total votes 53: ↑50 and ↓3 +47
Views 3.2K
Comments 12

MS SQL 2008, заметки на полях. Очень много случайный чисел

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

Всех кого заинтересовала тема, добро пожаловать под кат…
Читать дальше →
Total votes 5: ↑3 and ↓2 +1
Views 3.8K
Comments 6

Unrolled linked list на Java

Java *Algorithms *
Sandbox
Всем привет.

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

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

Одним из представителей этой группы является Unrolled linked list.

Что же это такое?
Читать дальше →
Total votes 40: ↑36 and ↓4 +32
Views 2.2K
Comments 22

EPAM IT Share #3: Поиск схожих изображений. Define Cloud Computing

EPAM corporate blog
Привет подписчикам корпоративного хабраблога EPAM Systems Ukraine!

В четверг, 6 декабря, прошел третий EPAM IT Share в Харькове, во время которого Вячеслав Колбасин, Алексей Трегубов lemieux66, Егор Сопов и Андрей Кожокару korjik поделились знаниями об алгортимах поиска схожих изображений и рассказили о ключевых определениях облачных вычислений.

В этом небольшом отчете вы найдете видеоматериалы встречи и файлы презентации.
Читать дальше →
Total votes 7: ↑5 and ↓2 +3
Views 4.5K
Comments 0

Задачка из реальной жизни: Как восстановить дерево процессов в Linux

Sport programming *System Programming *Algorithms *
Мы разрабатываем проект CRIU (Checkpoint/Restore in Userspace) и у нас возникла достаточно интересная задача о том, как восстановить оригинальное дерево процессов. Я предлагаю вам попытаться решить ее.

Задача


CRIU — это утилита, которая позволяет сохранить состояние процессов на диск и постановить их позднее на этой или на любой другой машине. Одной из подзадач восстановления является нахождение последовательности действий для того, чтобы восстановить дерево процессов. Входные данные содержат набор параметров для каждого процесса: уникальный идентификатор (PID), ссылку на родителя (PPID), идентификатор сессии (SID).

image
Читать дальше →
Total votes 20: ↑17 and ↓3 +14
Views 8.5K
Comments 12

Алгоритм распределения данных в кластере серверов в dCache

Java *Algorithms *Big Data *
В продолжение статьи о dCache расскажу о некоторых деталях внутренней реализации.

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

Показать, как это сделано в dCache
Total votes 9: ↑8 and ↓1 +7
Views 3.9K
Comments 18

Улучшение степени сжатия применяемого в UPX

Programming *System Programming *Algorithms *
Translation
Tutorial
От переводчика:

Под «капотом» следует перевод небольшого, но крайне полезного текстового файла "%UPX_SOURCE%\doc\filter.txt". В приведенном пути под UPX_SOURCE подразумевается файловый путь до исходных кодов к UPX версии 3.91.

Документ описывает достаточно важный аспект работы UPX называемый «фильтрацией» и при анализе упакованных с помощью UPX файлов крайне важно понимать как это работает. Все что описано про UPX также применимо и к другим упаковщикам.

Основная цель перевода это попытка помочь тем программистам кто пишет статические распаковщики исполняемых файлов. Другими словами эта информация будет полезной практикующим reverse-engineer-ам. Под статичеческим распаковщиком понимаю программу которая поданный на вход упакованный или запротекченный исполняемый файл анализирует и создает на выходе файл, как будто бы тот создан каким-либо компилятором. Особенностью такого типа распаковщиков в том что он работает исключительно на знании структуры защиты или упаковки файла, т.е. без применения «сброса дампа», «востановления импорта» и др. типов «читерства».

Понимание процесса фильтрации помогает при изучении упакованных файлов к примеру с помощью UPX, RLPack и др. В упакованных файла можно встретить код, где делаются некоторые «магические действиями» с маш. инструкциями переходов байты 0xE8, 0xE9 и др. Этой «магией» как раз и является «фильтрация». Она направлена на улучшение степени сжатия исполняемого файла.

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

Почитать про фильтрацию в UPX
Total votes 37: ↑30 and ↓7 +23
Views 9.5K
Comments 6

Чисто функциональные структуры данных

Algorithms *Scala *Functional Programming *
Признаюсь. Я не очень любил курс структур данных и алгоритмов в университете. Все эти стеки, очереди, кучи, деревья, графы (будь они не ладны) и прочие “остроумные” названия непонятных и сложных структур данных ни как не хотели закрепляться в моей голове. Как истинный “прагматик”, я уже на втором — третьем курсе свято верил в стандартную библиотеку классов и молился на дарованные нам (простым смертным) коллекции и контейнеры, бережно реализованные отцами и благородными донами CS. Казалось, все что можно было придумать — уже давно придумано и реализовано.

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

И сейчас, я хочу показать вам небольшую частицу этого мира. Через замочную скважину, мы на секунду заглянем в этот удивительный мир, чтобы рассмотреть одного из наиболее ярких его обитателей — функциональное красно-черное дерево (КЧД).
Читать дальше →
Total votes 73: ↑68 and ↓5 +63
Views 38K
Comments 21

Boids — простой алгоритм перемещения групп юнитов

Game development *Algorithms *
Во время разработки клона одной игрушки мне понадобилось перемещать группы юнитов от одной планеты к другой. Первое что пришло в голову — заспавнить юниты один за другим и двигать их по прямой. Но это выглядело не очень весело, кроме того — нужно было как-то обходить планеты. После беглого ознакомления с алгоритмами группового перемещения я решил попробовать Boids. В итоге получилось такое:



Под катом описание алгоритма с примерами кода.

Читать дальше →
Total votes 63: ↑60 and ↓3 +57
Views 27K
Comments 23

Обзор некоторых MOOC Coursera по компьютерным наукам

Python *Programming *Data Mining *Algorithms *Machine learning *
Sandbox
Скорее всего, если вы зашли на Хабр и читаете эту статью, то хоть раз в жизни да слышали про MOOC-курсы.

Но если все же не слышали, то MOOC (по-русски принято произносить «мук») означает «Massive Open Online Course» — массовый открытый онлайн-курс. Это настоящий феномен в образовании XXI века. Газета «New York Times» назвала даже 2012 год «годом MOOC» в связи с появлением на рынке дистанционного образования 3-х «китов» — Coursera, Udacity и EdX. MOOC-ам посвящено множество статей, кто-то видит в них будущее образования, кто-то, наоборот, угрозу. Пытаются также предсказать «традиционную» и «дистанционную» составляющии обучения будущего.




Однако в этой статье я не буду обсуждать перспективы развития дистанционного образования, а расскажу про свой опыт знакомства с курсами на платформе Coursera. Эти курсы будут полезны студентам, изучающим прикладную математику и информатику, в особенности анализ данных. Многое из того, что мне дали эти курсы, как я потом понял — это знания, которыми должен обладать любой уважающий себя исследователь данных (так я предпочитаю переводить профессию Data Scientist).
Читать дальше →
Total votes 44: ↑31 and ↓13 +18
Views 35K
Comments 21

Кластеризация графов и поиск сообществ. Часть 2: k-medoids и модификации

DCA (Data-Centric Alliance) corporate blog Data Mining *Algorithms *Machine learning *
image Привет, Хабр! В этой части мы опишем вам алгоритм, с помощью которого были получены цвета на графах из первой части. В основе алгоритма лежит k-medoids — довольно простой и прозрачный метод. Он представляет собой вариант популярного k-means, про который наверняка большинство из вас уже имеет представление.

В отличие от k-means, в k-medoids в качестве центроидов может выступать не любая точка, а только какие-то из имеющихся наблюдений. Так как в графе между вершинами расстояние определить можно, k-medoids годится для кластеризации графа. Главная проблема этого метода — необходимость явного задания числа кластеров, то есть это не выделение сообществ (сommunity detection), а оптимальное разбиение на заданное количество частей (graph partitioning).

С этим можно бороться двумя путями:
Читать дальше →
Total votes 29: ↑27 and ↓2 +25
Views 21K
Comments 4

Некоторые репозитории в помощь изучающим и преподающим Python и машинное обучение

Python *Programming *Machine learning *


Привет сообществу!

Я Юрий Кашницкий, раньше делал здесь обзор некоторых MOOC по компьютерным наукам и искал «выбросы» среди моделей Playboy.

Сейчас я преподаю Python и машинное обучение на факультете компьютерных наук НИУ ВШЭ и в онлайн-курсе сообщества по анализу данных MLClass, а также машинное обучение и анализ больших данных в школе данных одного из российских телеком-операторов.

Почему бы воскресным вечером не поделиться с сообществом материалами по Python и обзором репозиториев по машинному обучению… В первой части будет описание репозитория GitHub с тетрадками IPython по программированию на языке Python. Во второй — пример материала курса «Машинное обучение с помощью Python». В третьей части покажу один из трюков, применяемый участниками соревнований Kaggle, конкретно, Станиславом Семеновым (4 место в текущем мировом рейтинге Kaggle). Наконец, сделаю обзор попавшихся мне классных репозиториев GitHub по программированию, анализу данных и машинному обучению на Python.

Читать дальше →
Total votes 26: ↑24 and ↓2 +22
Views 60K
Comments 11

Проблемы при использовании Math.random()

Mail.ru Group corporate blog Website development *Cryptography *JavaScript *Algorithms *
Translation
image

В английском есть такая аббревиатура — TIFU. Привести здесь её точное значение мы не можем, но вы без труда найдёте его в Сети. А после «литературной обработки» TIFU можно перевести как «сегодня я всё испортил». В контексте этого поста данная фраза относится к использованию функции Math.random() в JavaScript-движке V8. Хотя случилось это не сегодня, а пару лет назад. Да и дров я наломал не по своей вине, корень зла таится в самой этой функции.

«Многие генераторы случайных чисел, используемые сегодня, работают не слишком хорошо. Разработчики обычно стараются не вникать, как устроены такие подпрограммы. И часто бывает так, что какой-то старый, неудовлетворительно работающий метод раз за разом слепо перенимается многими программистами, которые зачастую просто не знают о присущих ему недостатках»

Дональд Кнут, «Искусство программирования», том 2.

Надеюсь, что к концу этого поста вы согласитесь с двумя утверждениями:

  • Мы были идиотами, поскольку использовали генератор псевдослучайных чисел в V8, не понимая его ограничений. И если очень лень, то безопаснее использовать криптографически стойкие генераторы псевдослучайных чисел.
  • В V8 необходима новая реализация Math.random(). Работу текущего алгоритма, кочующего от одного программиста к другому, нельзя считать удовлетворительной из-за слабой, неочевидной деградации, часто встречающейся в реальных проектах.

Хочу подчеркнуть, что сам движок V8 — замечательный продукт и его создатели очень талантливы. Я ни в коей мере не обвиняю их. Просто эта ситуация иллюстрирует, насколько сильно влияют на процесс разработки даже небольшие нюансы.
Читать дальше →
Total votes 81: ↑77 and ↓4 +73
Views 41K
Comments 38

Параллельные алгоритмы для обработки BigData: подводные камни и непростые решения

1С-Битрикс corporate blog Algorithms *Big Data *
Эта публикация написана по материалам выступления AlexSerbul на осенней конференции BigData Conference.

Большие данные — тема модная и востребованная. Но многих по-прежнему отпугивает избыток теоретических рассуждений и некоторый недостаток практических рекомендаций. В этом посте я хочу отчасти заполнить этот пробел и рассказать об использовании параллельных алгоритмов для обработки больших данных на примере кластеризации товарного каталога из 10 млн позиций.
Читать дальше →
Total votes 28: ↑25 and ↓3 +22
Views 19K
Comments 35