kondybas: (Default)
[personal profile] kondybas


Если кто помнит, в НИИЧАВО была славная когорта сотрудников, бравших отпуска, длительностью в бесконечность, красовавшаяся исцарапанными от бритья ушами, и утомлявшая коллег анекдотами о теореме Лопиталя. Я, к сожалению (или к счастью) ни одного такого анекдота не знаю, но зато я знаю много рецептов приготовления теоремы Лопиталя в домашних условиях. Хочу поделиться одним из них.

Теорема Лопиталя, если кто забыл, гласит, что отношение двух функций равно отношению их производных, и часто используется там, где сравнить две функции напрямую невозможно. Например, часто бывает необходимо сравнивать логины, выбираемые пользователями, для того, чтобы обеспечить их уникальность. Простое побайтное сравнение строк позволяет отличить только байтовое представление строк, но бывают проблемы с различением собственно начертания строк. Скажем, два имени пользователя, набранные кириллицей и латиницей могут визуально совпадать до неотличимости. Например, логин СТЕПАН может быть составлен 32-мя побайтно-различными способами, которые визуально будут идентичны.

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

Первой производной от строки можно считать приведение всех символов к одному регистру.
Второй производной - табличную замену символов в латиницу с учетом начертания/произношения:
исходный символ: ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
результирующий:  ABCDEFGHIJKLMNOPQRSTUVWXYZABBHDEEGZIJKLMHOPPCTYFHCCSSZYZEUJ
Специфичные символы можно заменять на любой латинский - это непринципиально.

Третьей производной можно считать упрощение дифтонгов, вроде
th=Z, дж=G, cz=Z, фф=F, цц=тс=тьс=Z и так далее.

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

Например, любое написание слова, извините, XYJ будет приводить к совпадению с шаблоном из базы - со всеми вытекающими.

Разумеется, механизм достаточно накладен в вычислительном отношении, но бывают случаи, когда это - не главное.

Вот, собственно, и все. Если кому пригодится - не забудьте помянуть в титрах.

Упд.
Поскольку народ хочет уточнений, уточняю: для некоммерческого использования достаточно упоминания в титрах, а для коммерческого - уже в платежной ведомости :)

(no subject)

Date: 16 Jul 2008 13:25 (UTC)
From: [identity profile] yanek_ua.livejournal.com
Выбегалло пробегалло?

(no subject)

Date: 16 Jul 2008 13:35 (UTC)
From: [identity profile] kondybas.livejournal.com
Выбегалло за%%алло :) И он сам, и его духовные последователи.

(no subject)

Date: 16 Jul 2008 13:44 (UTC)
From: [identity profile] yanek_ua.livejournal.com
гы))) что так? ;)

Наш ответ Чемберлену

Date: 16 Jul 2008 13:49 (UTC)
From: [identity profile] stoli76.livejournal.com
Это Вы так правильно соизволили высказаться, господин поручик. Изобретения всякие важны. Но в этом деле, господин поручик, главное – обстоятельно и мудро рассказать окружающим об открытии, чтобы тебя поняли правильно.
Знавал я одного профессора, Франтишека Лавичку, дед его был известным конокрадом из Опавы. Попал он раз на ферму и увидел, как крестьяне стригут овец. Удивлению его не было меры. «Это зачем же действовать в этой сфере дедовскими методами, тратить уйму времени и труда, если на помощь простым людям может прийти наука», – были его слова. Неделю не выходил он из своего рабочего кабинета, а когда вышел, то помчался в академию наук бегом по улицах как Архимед. Голос его разносился по всем Градчанам: «Нашёл, нашёл!!!».
В самой уже академии он показал учёным мужам своё изобретение. Это был эликсир, при натирании которым вся шерсть у овец выпадала сама в кратчайшие строки. Но академики прорыва в науке не поняли и под предлогом проехать на пролётке в патентное бюро для регистрации изобретения завезли его в психушку.
А всё потому так скверно вышло, господин поручик, что надо было с умом подойти к презентации открытия. Неужто жалко было ему подарить по пузырьку эликсира каждому академику, чтобы их жёны дома, извиняюсь, волосики под мышками выводили? Вот к чему приводит слишком заумные объяснения!

Re: Наш ответ Чемберлену

Date: 16 Jul 2008 13:53 (UTC)
From: [identity profile] kondybas.livejournal.com
Это не ваш Франтишек Лавичек придумал Фиделю стельки солями таллия пропитать, чтоб из него бороденка повылезла?

Я так думаю, что кому надо - тот поймет. А кто не поймет - так и не очень-то и надо :) Опять же, я далеко, на дуровозе меня покатать сложновато будет :)

Re: Наш ответ Чемберлену

Date: 16 Jul 2008 13:55 (UTC)
From: [identity profile] stoli76.livejournal.com
Это господин поручик, как есть! А если скажете, что несу я чепуху, то я тут же соглашусь - так точно господин поручик, потому как дурак :)))

(no subject)

Date: 16 Jul 2008 14:08 (UTC)
From: [identity profile] bluesbreaker.livejournal.com
Ну аналогия с производной довольно натянутая.
Производная в первую очередь характеризует скорость изменения функции, а символы ж тупо константы )

(no subject)

Date: 16 Jul 2008 15:04 (UTC)
From: [identity profile] daddym.livejournal.com
Угу, поздравляю с изобретением фонетического кодирования. Первые реализации насколько помню были в семидесятых.

(no subject)

Date: 16 Jul 2008 16:12 (UTC)
From: [identity profile] kondybas.livejournal.com
Лейбниц-ньютоновская производная - возможно. Но аналитические функции - не единственные возможные, а производная по переменной - не единственная допустимая.

Символы - не константы. Строка - это функция, заданная на интервале таблично. Попробуй с этой стороны посмотреть ;)

(no subject)

Date: 16 Jul 2008 16:25 (UTC)
From: [identity profile] kondybas.livejournal.com
Не, тут кодирования никакого нету. Есть преобразование, которое для различных в байтовом представлении, но сходных в начертании или звучании слов, порождает одинаковые результаты.

Если по существу, то предлагаемый механизм позволяет определить, что КОНДЫБАС, кондыбас, kondybas и даже k0Hdb1Баs - суть одно и то же, но по-разному написанное. Фишка в том, что для подобного вывода совершенно не нужен семантический анализ, тупые табличные преобразования рулят.

(no subject)

Date: 16 Jul 2008 16:30 (UTC)
From: [identity profile] kondybas.livejournal.com
Зреет насущная необходимость ставить заслон из искусственного интеллекта на пути естественного долбоебизма :)

Re: Наш ответ Чемберлену

Date: 16 Jul 2008 16:34 (UTC)
From: [identity profile] kondybas.livejournal.com
Потерялся. По форме - вроде Швейк. А по содержанию - вроде нет. Но, как известно, форма не есть форма, а то, что не есть форма, есть форма, и та форма опять не есть форма. Как-то так.

(no subject)

Date: 16 Jul 2008 16:37 (UTC)
From: [identity profile] daddym.livejournal.com
Ну да, когда базы данных стали популярными как раз и вылезла проблема разного написания имен и фамилий. В английском то с этим вообще проблема. Вот и сделали такое преобразование.

(no subject)

Date: 16 Jul 2008 16:48 (UTC)
From: [identity profile] yanek_ua.livejournal.com
Уууууу..... ))))))))) Не каждому это под силу.... Особенно во время борьбы с долбоебизмом.... Тут Кота нада звать... Или Щуку...

Re: Наш ответ Чемберлену

Date: 16 Jul 2008 16:49 (UTC)
From: [identity profile] yanek_ua.livejournal.com
Я вообще потерялся! :(

(no subject)

Date: 16 Jul 2008 16:56 (UTC)
From: [identity profile] kondybas.livejournal.com
У меня это решение родилось, когда мы с коллегой вылавливали косяки в базе паспортного стола нашего городишки. Девочки, девушки, женчины и прочие бабене, подрабатывавшие на набивке картотеки "в компютер", проявили чудеса изобретательности в борьбе с трехступенчатым контролем уникальности записей. Лет с десять прошло, но до сих пор иногда повстречаемся, а коллега радостно сообщит, что еще полста дубликатов выловлено :) В базе ок. миллиона записей всего, и уже первые прогоны по второй производной дали свыше 10 тыс дубликатов.

Re: Наш ответ Чемберлену

Date: 16 Jul 2008 18:59 (UTC)
From: [identity profile] stoli76.livejournal.com
Это отрывок из разговора поручика Лукаша и Швейка в лагере в Дарнице :) Nem tudom?

Re: Наш ответ Чемберлену

Date: 16 Jul 2008 19:14 (UTC)
From: [identity profile] stoli76.livejournal.com
Ну добре...сам видумав

Re: Наш ответ Чемберлену

Date: 16 Jul 2008 19:49 (UTC)
From: [identity profile] kondybas.livejournal.com
Насколько знаю, после Гашековского Швейка было несколько апокрифов, но не читал.

(no subject)

Date: 16 Jul 2008 21:28 (UTC)
From: [identity profile] yuriyi.livejournal.com
технично.

(no subject)

Date: 16 Jul 2008 22:35 (UTC)
From: [identity profile] bluesbreaker.livejournal.com
Для dF(x)/dx Лопиталя работает, а для прочих? Не в курсе.

(no subject)

Date: 17 Jul 2008 04:48 (UTC)
From: [identity profile] kondybas.livejournal.com
Ну, как видим, таблично заданная производная для таблично заданной функции позволяет неплохо разрешать неопределенности ;)

Очень познавательно

Date: 3 Feb 2011 08:56 (UTC)
From: (Anonymous)
хорошее начало