<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Комментарии для Записки программиста</title>
	<atom:link href="http://saterenko.ru/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://saterenko.ru</link>
	<description></description>
	<pubDate>Thu, 11 Mar 2010 19:31:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
		<item>
		<title>Комментарий на запись Диван лучше табуретки от Андрей Сатеренко</title>
		<link>http://saterenko.ru/2009/08/21/%d0%b4%d0%b8%d0%b2%d0%b0%d0%bd-%d0%bb%d1%83%d1%87%d1%88%d0%b5-%d1%82%d0%b0%d0%b1%d1%83%d1%80%d0%b5%d1%82%d0%ba%d0%b8/#comment-20319</link>
		<dc:creator>Андрей Сатеренко</dc:creator>
		<pubDate>Sun, 24 Jan 2010 20:07:06 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=117#comment-20319</guid>
		<description>А мне нравится мой уютный диван :)</description>
		<content:encoded><![CDATA[<p>А мне нравится мой уютный диван <img src='http://saterenko.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Комментарий на запись Диван лучше табуретки от ШОРТ</title>
		<link>http://saterenko.ru/2009/08/21/%d0%b4%d0%b8%d0%b2%d0%b0%d0%bd-%d0%bb%d1%83%d1%87%d1%88%d0%b5-%d1%82%d0%b0%d0%b1%d1%83%d1%80%d0%b5%d1%82%d0%ba%d0%b8/#comment-20294</link>
		<dc:creator>ШОРТ</dc:creator>
		<pubDate>Sun, 24 Jan 2010 06:27:22 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=117#comment-20294</guid>
		<description>Заходи к нам в клуб владельцев Passat B3(http://www.passat-life.ru/), тебе помогут его превратить из старого дивана в отличный автомобиль</description>
		<content:encoded><![CDATA[<p>Заходи к нам в клуб владельцев Passat B3(http://www.passat-life.ru/), тебе помогут его превратить из старого дивана в отличный автомобиль</p>
]]></content:encoded>
	</item>
	<item>
		<title>Комментарий на запись Российская география от Александр</title>
		<link>http://saterenko.ru/2009/03/27/%d1%80%d0%be%d1%81%d1%81%d0%b8%d0%b9%d1%81%d0%ba%d0%b0%d1%8f-%d0%b3%d0%b5%d0%be%d0%b3%d1%80%d0%b0%d1%84%d0%b8%d1%8f/#comment-16901</link>
		<dc:creator>Александр</dc:creator>
		<pubDate>Wed, 02 Dec 2009 13:49:54 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=99#comment-16901</guid>
		<description>А нет, все работает, спасибо за парсер.</description>
		<content:encoded><![CDATA[<p>А нет, все работает, спасибо за парсер.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Комментарий на запись Российская география от Александр</title>
		<link>http://saterenko.ru/2009/03/27/%d1%80%d0%be%d1%81%d1%81%d0%b8%d0%b9%d1%81%d0%ba%d0%b0%d1%8f-%d0%b3%d0%b5%d0%be%d0%b3%d1%80%d0%b0%d1%84%d0%b8%d1%8f/#comment-16898</link>
		<dc:creator>Александр</dc:creator>
		<pubDate>Wed, 02 Dec 2009 13:37:14 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=99#comment-16898</guid>
		<description>Запустил скрипт, некоторые адреса затерялись. К примеру блок 188.162.40.0 - 188.162.47.255

Сейчас ищу ошибку</description>
		<content:encoded><![CDATA[<p>Запустил скрипт, некоторые адреса затерялись. К примеру блок 188.162.40.0 - 188.162.47.255</p>
<p>Сейчас ищу ошибку</p>
]]></content:encoded>
	</item>
	<item>
		<title>Комментарий на запись Мыслим перпендикулярно от Андрей Сатеренко</title>
		<link>http://saterenko.ru/2009/01/30/%d0%bc%d1%8b%d1%81%d0%bb%d0%b8%d0%bc-%d0%bf%d0%b5%d1%80%d0%bf%d0%b5%d0%bd%d0%b4%d0%b8%d0%ba%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%be/#comment-15822</link>
		<dc:creator>Андрей Сатеренко</dc:creator>
		<pubDate>Sat, 14 Nov 2009 19:31:19 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=87#comment-15822</guid>
		<description>Не проблема разделить на М/Ж данные и построить индексы. А если у тебя таких параметров больше 10? А если у тебя в поиске используются разные параметры? Я не рассматриваю тут задачи, которые рашаеются парой-тройкой индексов. Задача изначально ставится так, что индексы либо построить не реально, либо они не помогут, в приниципе. Едиственно возможный вариант решения задачи -- перебор. Вот и встаёт вопрос, как перебирать максимально быстро, потому как  if (user.gender==1 &#038;&#038; user.country==1 &#038;&#038; user.photo==1 ...) -- это явно медленно.</description>
		<content:encoded><![CDATA[<p>Не проблема разделить на М/Ж данные и построить индексы. А если у тебя таких параметров больше 10? А если у тебя в поиске используются разные параметры? Я не рассматриваю тут задачи, которые рашаеются парой-тройкой индексов. Задача изначально ставится так, что индексы либо построить не реально, либо они не помогут, в приниципе. Едиственно возможный вариант решения задачи &#8212; перебор. Вот и встаёт вопрос, как перебирать максимально быстро, потому как  if (user.gender==1 &#038;&#038; user.country==1 &#038;&#038; user.photo==1 &#8230;) &#8212; это явно медленно.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Комментарий на запись Мыслим перпендикулярно от p0zt3r@mail.ru</title>
		<link>http://saterenko.ru/2009/01/30/%d0%bc%d1%8b%d1%81%d0%bb%d0%b8%d0%bc-%d0%bf%d0%b5%d1%80%d0%bf%d0%b5%d0%bd%d0%b4%d0%b8%d0%ba%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%be/#comment-15819</link>
		<dc:creator>p0zt3r@mail.ru</dc:creator>
		<pubDate>Sat, 14 Nov 2009 19:07:52 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=87#comment-15819</guid>
		<description>Понятно. 

Я не считаю, что алгоритм оптимален, т.к. ты не оптимизируешь сам перебор. Ну и что, что вычисляется одна N-битная операция И вместо 3*N побитных? 

Давай разделим записи мужчин и женщин в разные массивы данных (в разные таблицы БД). Тогда время перебора автоматически сокращается вдвое, т.к. тебе один раз необходимо определить в каком наборе выполнять перебор, а наборы для перебора имеют вдвое (всреднем) меньший объём.

Только вот с практической стороной реализации жопа :)</description>
		<content:encoded><![CDATA[<p>Понятно. </p>
<p>Я не считаю, что алгоритм оптимален, т.к. ты не оптимизируешь сам перебор. Ну и что, что вычисляется одна N-битная операция И вместо 3*N побитных? </p>
<p>Давай разделим записи мужчин и женщин в разные массивы данных (в разные таблицы БД). Тогда время перебора автоматически сокращается вдвое, т.к. тебе один раз необходимо определить в каком наборе выполнять перебор, а наборы для перебора имеют вдвое (всреднем) меньший объём.</p>
<p>Только вот с практической стороной реализации жопа <img src='http://saterenko.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Комментарий на запись Мыслим перпендикулярно от Андрей Сатеренко</title>
		<link>http://saterenko.ru/2009/01/30/%d0%bc%d1%8b%d1%81%d0%bb%d0%b8%d0%bc-%d0%bf%d0%b5%d1%80%d0%bf%d0%b5%d0%bd%d0%b4%d0%b8%d0%ba%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%be/#comment-15764</link>
		<dc:creator>Андрей Сатеренко</dc:creator>
		<pubDate>Fri, 13 Nov 2009 18:44:26 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=87#comment-15764</guid>
		<description>У нас просто расходятся задачи, а, соответсвенно и решения задач. Моя задача состояла в ускорении поиска данных методом перебора. Для примера возьмём поиск человека с такими параметрами как пол, страна, наличие фотографии, и т.п. Если таких параметров будет много, индексы построить не получится, максимум можно сократить перебор по ряду параметров, но не по всем. 

Решение в лоб: if (user.gender==1 &#038;&#038; user.country==1 &#038;&#038; user.photo==1). Т.е. на проверку одного пользователя надо столько операций условного перехода, сколько у нас параметров. Можно построить битовую маску где 0 бит -- пол (1 или 0), 1-8 биты -- страна (256 стран), 9 бит -- наличие фотографии (1 или 0). Получаем одну проверку if (user.mask &#038; mask). Но у такого подхода тоже есть минусы: битовая маска кратна 8 битам (байт), т.е. у нас будет неэффективное использование бит, не все параметры можно переложить в операцию И, иногда нужна операция ИЛИ, иногда НЕ И и так далее. Так вот "перпендикулярный" поиск решает эту задачу эффективно :)</description>
		<content:encoded><![CDATA[<p>У нас просто расходятся задачи, а, соответсвенно и решения задач. Моя задача состояла в ускорении поиска данных методом перебора. Для примера возьмём поиск человека с такими параметрами как пол, страна, наличие фотографии, и т.п. Если таких параметров будет много, индексы построить не получится, максимум можно сократить перебор по ряду параметров, но не по всем. </p>
<p>Решение в лоб: if (user.gender==1 &#038;&#038; user.country==1 &#038;&#038; user.photo==1). Т.е. на проверку одного пользователя надо столько операций условного перехода, сколько у нас параметров. Можно построить битовую маску где 0 бит &#8212; пол (1 или 0), 1-8 биты &#8212; страна (256 стран), 9 бит &#8212; наличие фотографии (1 или 0). Получаем одну проверку if (user.mask &#038; mask). Но у такого подхода тоже есть минусы: битовая маска кратна 8 битам (байт), т.е. у нас будет неэффективное использование бит, не все параметры можно переложить в операцию И, иногда нужна операция ИЛИ, иногда НЕ И и так далее. Так вот &#8220;перпендикулярный&#8221; поиск решает эту задачу эффективно <img src='http://saterenko.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Комментарий на запись Мыслим перпендикулярно от p0zt3r@mail.ru</title>
		<link>http://saterenko.ru/2009/01/30/%d0%bc%d1%8b%d1%81%d0%bb%d0%b8%d0%bc-%d0%bf%d0%b5%d1%80%d0%bf%d0%b5%d0%bd%d0%b4%d0%b8%d0%ba%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%be/#comment-15755</link>
		<dc:creator>p0zt3r@mail.ru</dc:creator>
		<pubDate>Fri, 13 Nov 2009 16:01:42 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=87#comment-15755</guid>
		<description>Так. Возможно я не понял задачу.

Моё видение.

Имеется A-входной битовый поток (ключ какой-нибудь). В некотором массиве хранятся соответствия битовых потоков какой-либо сущности.

Нужно найти в таком массиве из стомильёновмильярдов эту сущность, соответствующую A-входному битовому потоку.

Если я не вкурил, то поправь меня, пожалуйста!

--

Моя идея в том, чтобы вести поиск со старшего разряда (да в принципе-то с любого, который приведет к "эффективному" поиску).
Пусть массив содержит всего Ni записей. В первом шаге алгоритма мы выбираем все записи, в которых старший i-разряд ключа = старшему i-разряду маски. Далее ведём поиск в сформированном множестве по N(i-1) записей таких, что каждый i-разряд в них равен i-разряду маски. Процесс повторяется до нахождения нужной записи или до нахождения массива записей требуемого объёма, в котором находится искомая запись. Алгоритм "нечёток", мы можем остановить его в любой момент и получить "суженное" пространство для поиска. Мы можем его распараллелить на C вычислительных машин, разделив исходный массив на C массивов, что сократит время поиска в C раз.

Фактически мы ведём поиск по бинарному (ну потому что разряды у нас принимают значение 0 или 1) дереву, в котором на каждом шаге пространство поиска сокращается вдвое при равномерном распределении битов по разрядам. 

Вцелом, алгоритм отвратителен - он расходует много памяти :) Но мы имеем стомильёновмильярдов записей, а также необходимость оптимального поиска по ним. 

Построим теперь список частостей разрядов в массиве ("индекс"). Т.е. подсчитаем число, скажем битов, равных 1 в каждом разряде по всему огромному массиву. Разряд, в котором частость единиц минимальна это разряд, с которого следует начать поиск, т.к. в первой же итерации мы получаем минимальный объём записей, удовлетворяющих исходному A-битовому потоку.

Где-то я, возможно, налажал. Просто я занимаюсь сейчас линейным криптоанализом [википедия!] (да и ещё много чем), в нём подобный алгоритм используется для отыскания ключа блочного шифра. Если у тебя есть какая-нибудь выборка для опытов, то прошу в студию. Алгоритм поиска, описанный мною, эффективен при неравномерном распределении частостей битов. Как оптимизировать память, я пока не знаю, но можем поковыряться. С радостью помогу, чем могу. Блог достаточно интересный. У меня есть реализация алгоритма линейного криптоанализа на c++, но я её пока не тестил. 

Если интересно, пиши на мыло erss_vlad@mail.ru, у меня есть трудовые резервы :-D</description>
		<content:encoded><![CDATA[<p>Так. Возможно я не понял задачу.</p>
<p>Моё видение.</p>
<p>Имеется A-входной битовый поток (ключ какой-нибудь). В некотором массиве хранятся соответствия битовых потоков какой-либо сущности.</p>
<p>Нужно найти в таком массиве из стомильёновмильярдов эту сущность, соответствующую A-входному битовому потоку.</p>
<p>Если я не вкурил, то поправь меня, пожалуйста!</p>
<p>&#8211;</p>
<p>Моя идея в том, чтобы вести поиск со старшего разряда (да в принципе-то с любого, который приведет к &#8220;эффективному&#8221; поиску).<br />
Пусть массив содержит всего Ni записей. В первом шаге алгоритма мы выбираем все записи, в которых старший i-разряд ключа = старшему i-разряду маски. Далее ведём поиск в сформированном множестве по N(i-1) записей таких, что каждый i-разряд в них равен i-разряду маски. Процесс повторяется до нахождения нужной записи или до нахождения массива записей требуемого объёма, в котором находится искомая запись. Алгоритм &#8220;нечёток&#8221;, мы можем остановить его в любой момент и получить &#8220;суженное&#8221; пространство для поиска. Мы можем его распараллелить на C вычислительных машин, разделив исходный массив на C массивов, что сократит время поиска в C раз.</p>
<p>Фактически мы ведём поиск по бинарному (ну потому что разряды у нас принимают значение 0 или 1) дереву, в котором на каждом шаге пространство поиска сокращается вдвое при равномерном распределении битов по разрядам. </p>
<p>Вцелом, алгоритм отвратителен - он расходует много памяти <img src='http://saterenko.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Но мы имеем стомильёновмильярдов записей, а также необходимость оптимального поиска по ним. </p>
<p>Построим теперь список частостей разрядов в массиве (&#8221;индекс&#8221;). Т.е. подсчитаем число, скажем битов, равных 1 в каждом разряде по всему огромному массиву. Разряд, в котором частость единиц минимальна это разряд, с которого следует начать поиск, т.к. в первой же итерации мы получаем минимальный объём записей, удовлетворяющих исходному A-битовому потоку.</p>
<p>Где-то я, возможно, налажал. Просто я занимаюсь сейчас линейным криптоанализом [википедия!] (да и ещё много чем), в нём подобный алгоритм используется для отыскания ключа блочного шифра. Если у тебя есть какая-нибудь выборка для опытов, то прошу в студию. Алгоритм поиска, описанный мною, эффективен при неравномерном распределении частостей битов. Как оптимизировать память, я пока не знаю, но можем поковыряться. С радостью помогу, чем могу. Блог достаточно интересный. У меня есть реализация алгоритма линейного криптоанализа на c++, но я её пока не тестил. </p>
<p>Если интересно, пиши на мыло <a href="mailto:erss_vlad@mail.ru">erss_vlad@mail.ru</a>, у меня есть трудовые резервы <img src='http://saterenko.ru/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Комментарий на запись Собственный парсер HTML от Андрей Сатеренко</title>
		<link>http://saterenko.ru/2008/12/03/%d1%81%d0%be%d0%b1%d1%81%d1%82%d0%b2%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-%d0%bf%d0%b0%d1%80%d1%81%d0%b5%d1%80-html/#comment-15723</link>
		<dc:creator>Андрей Сатеренко</dc:creator>
		<pubDate>Fri, 13 Nov 2009 05:16:31 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=27#comment-15723</guid>
		<description>В парсере используется конечный автомат. Регекспам там делать, понятное дело, нечего. Парсер "размечает" (никаких копирований, только метки что и где начинается/кончается в тексте) HTML в достаточно простую структуру, достаточную для решения своих задач, а не формирует полный DOM с валидацией и т.п.</description>
		<content:encoded><![CDATA[<p>В парсере используется конечный автомат. Регекспам там делать, понятное дело, нечего. Парсер &#8220;размечает&#8221; (никаких копирований, только метки что и где начинается/кончается в тексте) HTML в достаточно простую структуру, достаточную для решения своих задач, а не формирует полный DOM с валидацией и т.п.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Комментарий на запись Мыслим перпендикулярно от Андрей Сатеренко</title>
		<link>http://saterenko.ru/2009/01/30/%d0%bc%d1%8b%d1%81%d0%bb%d0%b8%d0%bc-%d0%bf%d0%b5%d1%80%d0%bf%d0%b5%d0%bd%d0%b4%d0%b8%d0%ba%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%be/#comment-15721</link>
		<dc:creator>Андрей Сатеренко</dc:creator>
		<pubDate>Fri, 13 Nov 2009 05:11:18 +0000</pubDate>
		<guid isPermaLink="false">http://saterenko.ru/?p=87#comment-15721</guid>
		<description>Не понял идею сокращения пространства поиска вдвое :)</description>
		<content:encoded><![CDATA[<p>Не понял идею сокращения пространства поиска вдвое <img src='http://saterenko.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
</channel>
</rss>
