<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>по стопам webkill&#039;а &#187; перебор</title>
	<atom:link href="http://blog.lukmus.ru/tag/%d0%bf%d0%b5%d1%80%d0%b5%d0%b1%d0%be%d1%80/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lukmus.ru</link>
	<description>это наш химический дом для печальных жителей Земли</description>
	<lastBuildDate>Sat, 21 Oct 2023 19:10:13 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>перебор всех возможных вариантов или тупая комбинаторика</title>
		<link>http://blog.lukmus.ru/2010/07/10/perebor-vseh-vozmozhnyih-variantov-ili/</link>
		<comments>http://blog.lukmus.ru/2010/07/10/perebor-vseh-vozmozhnyih-variantov-ili/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 23:15:07 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[разное]]></category>
		<category><![CDATA[bruteforce]]></category>
		<category><![CDATA[все комбинации]]></category>
		<category><![CDATA[перебор]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=226</guid>
		<description><![CDATA[Часто так бывает (например сегодня мне нужно было это сделать, поэтому сообственно и вышел этот пост), что нужно найти все комбинации символов из какого-то определенного алфавита. Например вы знаете из каких символов состоит пароль и знаете примерную длину, скажем от 5 до 7 символов, и вам надо перебрать все возможные комбинации. Раздел математики под названием [...]]]></description>
			<content:encoded><![CDATA[<p>Часто так бывает (например сегодня мне нужно было это сделать, поэтому сообственно и вышел этот пост), что нужно найти все комбинации символов из какого-то определенного алфавита. Например вы знаете из каких символов состоит пароль и знаете примерную длину, скажем от 5 до 7 символов, и вам надо перебрать все возможные комбинации.<span id="more-226"></span></p>
<p>Раздел математики под названием Комбинаторика по этому поводу говорит, что количество таких комбинаций с повторами будет равно N<sup>m</sup>, где N &#8211; размер алфавита, а m &#8211; максимальное количество символов в комбинации(слове).<br />
И комбинаторика действительно не врет, в этом можно легко убедится напримере:<br />
A={1,0} =&gt; N=2<br />
m=3</p>
<div style="font-size: 0.8em;">000<br />
001<br />
010<br />
011<br />
100<br />
101<br />
110<br />
111</div>
<p>N<sup>m</sup>=2<sup>3</sup>=8. Что и требовалось доказать.</p>
<p>Посчитать-то количество мы смогли, а вот конкретно найти все возможные варианты нам поможет следующий скрипт.</p>
<p>Сначала зададим алфавит и максимальное количество символов в слове:</p>
<blockquote><p>alf=['a','l','f','v','i','t']<br />
max_size=5</p></blockquote>
<p>Теперь немного объясню принцип.</p>
<p>Он такой же как и был на примере, где убеждались в правоте комбинаторики. Короче, мы ставим нашему алфавиту в соответсвие цифру из системы счисления равной длине алфавита. В нашем случае это будет шестиричная система счисления. Далее мы просто будем инкрементно крутить какую-то переменную скажем i т.е. будем в цикле прибавлять к i единицу.</p>
<p>Но для начала нам нужно посчитать сколько нужно шагов в цикле, чтобы длина слова соответствовала max_size.</p>
<blockquote><p>res=alf.size**max_size</p></blockquote>
<p>Тупо пользуемся этой самой формулой из комбинаторики.</p>
<p>А теперь также тупо будем инкрементно крутить в цикле переменную i и обратно ставить в соответсвие каждой цифре числа символ из алфавита:</p>
<blockquote><p>for i in 2..res+1 do<br />
str=&#8221;<br />
i.to_s(alf.size).scan(/./).each {|x| str+=alf[x.to_i]}<br />
puts &#8220;#{i} &#8211; #{i.to_s(7)} &#8211; #{str}&#8221;<br />
end</p></blockquote>
<p>Весь приведенный здесь код написан на Ruby.</p>
<p>Я закончил, а теперь каждый случайно заглянувший сюда великий математик или программист может плюнуть в монитор, написать отрицательный коммент и просебя матернутся: мол это и ежу понятно, мол существуют гораздо менее ресурсотребовательные способы итд.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/07/10/perebor-vseh-vozmozhnyih-variantov-ili/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
