Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

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

Мессенджеры *Алгоритмы *Интернет-маркетинг Медийная реклама Будущее здесь

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

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

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

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

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

Читать™ далее
Всего голосов 63: ↑58 и ↓5 +53
Просмотры 10K
Комментарии 3

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

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

Читать™ дальше™ →
Всего голосов 75: ↑66 и ↓9 +57
Просмотры 117K
Комментарии 81

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

Чулан
При рассмотрении реализаций поиска™ нашёл интересную таблицу с характеристиками структур, применяемых для реализации символьных таблиц™. Причём™ рассматриваются худшие™ и средние случаи™.
Читать™ дальше™ →
Всего голосов 11: ↑5 и ↓6 -1
Просмотры 203
Комментарии 4

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

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



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

Остальное — под катом.
Читать™ дальше™ →
Всего голосов 133: ↑131 и ↓2 +129
Просмотры 11K
Комментарии 49

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

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

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

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

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


Автор изображения: Tobias™ Rad, лицензия Creative Commons Attribution-Share Alike 3.0 Unported
Читать™ дальше™ →
Всего голосов 38: ↑30 и ↓8 +22
Просмотры 3.7K
Комментарии 42

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

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

В данной™ статье™ я попытаюсь объяснить, как это возможно.
Читать™ дальше™ →
Всего голосов 53: ↑50 и ↓3 +47
Просмотры 3.3K
Комментарии 12

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

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

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

Unrolled linked™ list на Java

Java *Алгоритмы *
Из песочницы
Всем привет™.

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

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

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

Что же это такое?
Читать™ дальше™ →
Всего голосов 40: ↑36 и ↓4 +32
Просмотры 2.3K
Комментарии 22

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

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

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

В этом небольшом отчете™ вы найдете видеоматериалы встречи и файлы презентации.
Читать™ дальше™ →
Всего голосов 7: ↑5 и ↓2 +3
Просмотры 4.6K
Комментарии 0

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

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

Задача™


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

image
Читать™ дальше™ →
Всего голосов 20: ↑17 и ↓3 +14
Просмотры 8.6K
Комментарии 12

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

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

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

Показать, как это сделано в dCache™
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 4K
Комментарии 18

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

Программирование *Системное программирование *Алгоритмы *
Recovery mode
Перевод
Tutorial
От переводчика:

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

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

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

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

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

Почитать про фильтрацию в UPX
Всего голосов 37: ↑30 и ↓7 +23
Просмотры 9.6K
Комментарии 6

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

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

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

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

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

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



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

Читать™ дальше™ →
Всего голосов 63: ↑60 и ↓3 +57
Просмотры 28K
Комментарии 23

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

Python™ *Программирование *Data Mining™ *Алгоритмы *Машинное обучение *
Из песочницы
Скорее™ всего, если вы зашли на Хабр и читаете эту статью™, то хоть раз в жизни да слышали про MOOC-курсы.

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




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

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

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

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

С этим можно бороться двумя путями™:
Читать™ дальше™ →
Всего голосов 29: ↑27 и ↓2 +25
Просмотры 21K
Комментарии 4

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

Python™ *Программирование *Машинное обучение *


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

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

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

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

Читать™ дальше™ →
Всего голосов 26: ↑24 и ↓2 +22
Просмотры 60K
Комментарии 11

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

Блог компании VK Разработка веб-сайтов™ *Криптография *JavaScript *Алгоритмы *
Перевод
image

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

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

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

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

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

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

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

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

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