<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90211</guid>
        <pubDate>Fri, 05 Sep 2003 17:46:27 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90211</link>
        <description><![CDATA[Demo_S: твой второй алгоритм - тоже использует хеш-функцию:):)<br>просто твоя хеш-функция такая:<br>для строки вернуть ее первый элемент.<br><br>в этом случае твой вопрос сводится к тому, какая хеш-фукнция лучше:):):)]]></description>
        <author>Demo_S</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90210</guid>
        <pubDate>Thu, 04 Sep 2003 20:51:15 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90210</link>
        <description><![CDATA[Jin X: Посмотри внимательно второй мой алгоритм.<br><br>Да и вообще, ни один нормальный человек не будет продолжать сравнение, если найдено хотя бы одно несовпадение. Т.е. если первый символ не совпадает, то второй уже сравниваться не будет.<br>Это ли не быстрее?]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90209</guid>
        <pubDate>Thu, 04 Sep 2003 12:45:08 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90209</link>
        <description><![CDATA[Demo_S: потому что быстрее посчитать хеш (знаю предыдущее значение хеша) и сравнить хеши, чем каждый раз сравнивать строки.<br><br>пусть с1 - 100 символов, с2 10 символов.<br>во втором алгме на каждом шаге будет 10 сравнений, а шагов будет 90 (в худшем случае)<br><br>с хешем на каждой итерации 1 сложение, 1 вычитание и одно сравнение. <br>и только если хеши совпали, проводится посимвольное сравнение. если же хеши не совпали, то сравнения не прводится.<br><br>так что в общем случае за счет этого (в большинстве случаев хеши не совпадают) и получается ускорение. хотя конечно в лучшем случае алгоритм без хеша быстрее.<br>]]></description>
        <author>Demo_S</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90208</guid>
        <pubDate>Wed, 03 Sep 2003 22:59:22 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90208</link>
        <description><![CDATA[Jin X: Кстати, про хэш...<br><br>Пока практически ничего не читал про хэши, но прочёл 1 коротенькую статью и не понял, почему хэш увеличивает скорость в данном случае. Сейчас поясню...<br>Описывается усовершенствование алгоритма сравнения строк.<br>Есть две строки s1 и s2. Нужно найти подстроку, т.е. s2 в s1.<br><br>Алгоритм (допустим, хэш-функция - это обычное сложение кодов символов):<br>0. i=0 (отсчёт символов в строках начинаем с нуля)<br>1. Считаем хэш-функцию s2 (h1 - значение функции).<br>2. Считаем хэш-функцию length(s2) первых символов s1 (h2 - значение функции).<br>3. Сравниваем h1 и h2. Если совпадают, то сравниваем s1 с куском s2. Если совпадают, значит задача решена!<br>4. Если нет, прибавляем к h2 код следующего (т.е. (i+length(s1))-го) символа s1 и вычитаем i-й символ s1; i++<br>5. goto 3<br><br>Почему этот алгоритм быстрее, чем (без хэша):<br>0. i=0; Ch=первый_символ_s2;<br>1. Сравниваем i-й символ s1 с Ch. Если совпадают, то сравниваем s1 с куском s2. Если совпадают, значит задача решена!<br>2. Если нет, то i++<br>3. goto 1<br><br>Ведь в первой задаче на каждом шаге нужно выполнить 3 операции: прибавить, вычесть и сравнить, когда во второй - только сравнить?! Где ж обещанное ускорение?!]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90207</guid>
        <pubDate>Wed, 03 Sep 2003 21:13:06 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90207</link>
        <description><![CDATA[Demo_S: обобщенный алгоритм:<br>предполагается знание принципов работы хешей<br><br>i=0<br>j=0<br>считываем с первого файла 16 байт с i-той позиции. считаем хеш, записываем в хеш-таблицу.<br>считываем со второго файла 16 байт с j-той позиции, считаем хеш. если в хеш-таблице по этому хешу есть запись, то сравниваем эти 16 байт побайтно, если совпали, то проверяем на совпадение следующие мабйты после этих 16 .<br>Таким образом определяем кусок совпадающих байт. записываем в результирующий файл адрес начала цепочки совпадающих байтов и ее длину.<br>j+=длина совпадающего участка<br>i++;//да да, именно ++<br><br>Если же для хеша сделанного из 16 байт второго файла нет значения в хещ таблице, либо значения есть, а байты не совпадают, то записываем 1 байт в результ-файл. и j++.<br>делаем пока не закончаться файлы.<br><br>в этом алгоритме есть некоторые моменты. над которыми надо подумать (как реализовывать запись в рез-файл, чтобы отличать запись о совпадающих байтах от записи несовпадающих байт), есть вещи, которые можно оптимизировать (мы считываем с первого файла 16 байт с 0, потом 16 с 1, то есть перечитываем заново 15 байт. это можно обойти, ведь мы их считали на пред итерации, проще всего это обходится с использвоанием file mapping)<br><br>можно делать разные модификации, например сначала считать весь первый файл и построить таблицу хешей, а потом брать второй, и сверять.<br><br>и еще парочка оптимизаций, которые долго описывать:)]]></description>
        <author>Demo_S</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90206</guid>
        <pubDate>Wed, 03 Sep 2003 17:19:29 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90206</link>
        <description><![CDATA[Black_Star: Не, не то...<br>Я бы делал так:<br>Открываешь 2 файла, читаешь в каждом, например 50 символов (байтов)...<br>Слаживаешь их методом XOR... нули пошли - текст одинаковый...<br>:) Ну, коль нет, - ищите более оригинальный способ :)<br>]]></description>
        <author>Black_Star</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90204</guid>
        <pubDate>Wed, 03 Sep 2003 14:59:21 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90204</link>
        <description><![CDATA[DEiL: ура :D<br><br>я понял: моя дорога - прямиков в Микрософт... я на днях реализовал этот алгоритм.. мм.. эээ,,, на вход поустил 2 50-тиколбайтных файла (разные версии сервака ЧП :-)).,<br>считав 1-й файл, программа откушала полтора мега оперативки.. считав второй - 150.. а когда начала сравнивать - я грохнул её, когда использование свопоа дошло до 2Гб &nbsp;;D ;D ;D <br>]]></description>
        <author>DEiL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90203</guid>
        <pubDate>Sun, 31 Aug 2003 19:46:18 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90203</link>
        <description><![CDATA[Jin X: Аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа!!!!!!!....... Кипяток! Тьфу, т.е. эврика! ;D<br>Ясно, спасибо, тоже может пригодиться :)]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90202</guid>
        <pubDate>Sat, 30 Aug 2003 20:42:37 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90202</link>
        <description><![CDATA[DEiL: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Jin X, 30.08.03, 17:21:13</span><div class='quote '>Что-то я тогда логики этого метода не пойму...<br>Во второй строке цифры должны возрастать на единицу, причём обязательно в каждой следующей позиции.<br><br>Возмём тот же ряд...<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">1 8, -, 2 3, 4 5 6, 4 5 6, 4 5 6, 7, 9, 10, 1 8</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>...и строки...<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">аббнннраеп&#60;br&#62;агбнннрепа</div></ol></div></div></div></div><br>Что совпадает? &quot;<strong class='tag-b'>бнннр</strong>&quot;, т.е. <strong class='tag-b'>3,4,5,6,7</strong> :)<br><br>Так что, не гони :)</div></div><br><br>тьфу ты :)<br>ну ты и чучело :-))<br>приведённый алгоритм ищёт маскимально длинну/ совпадающиую подпоследовательность, а не блок!<br>поэтому ответ 1 2 4 5 6 7 9 10 выдаст тебе:<br><strong class='tag-b'>аб</strong>б<strong class='tag-b'>нннр</strong>а<strong class='tag-b'>еп</strong><br><strong class='tag-b'>а</strong>г<strong class='tag-b'>бнннреп</strong>а<br>жирным как раз и выделен совпадающий участок :)<br>и тогда становится ясно, что чтоб, допустим, из второй строчки получить первую, нужно:<br>на 2-й позиции вставить &quot;б&quot;<br>на 3-й позиции удалить &quot;г&quot;<br>на 8-й позиции вставить &quot;а&quot;<br>удалить последнюю &quot;а&quot;<br><br>разве тебе не это нужно? &nbsp;:D]]></description>
        <author>DEiL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90201</guid>
        <pubDate>Sat, 30 Aug 2003 19:27:27 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90201</link>
        <description><![CDATA[Demo_S: есть стандартные программы<br>fc /b для винды и diff для линукса.<br><br>есть всякие программы коммерчиские, что-то вроде xdiff но я наверняка не помню.<br><br>есть работа группы исследователей, которые предложили 4 алгоритма для решения такой задачи. Мы (4 человека и я в том числе) когда-то писали такую прогу, даже для продажи, и она вроде делала какой-то западный аналог. Но счас она утеряна (писали еще давно, потом винт полетел и все.) так что счас к сожалению ни доки ни исходников.<br><br>Но мы доки нашли в инете. нечт типа &quot;алгоритм diff&quot; или &quot;аналог xdiff&quot;<br>лучше искать в гугле в групах usenet (aka fido).<br><br>Есть какая-то коммерческая программа,которая бесплатна для частного пользования, но стоит около 7килобасов, если хочешь сделать ее частью проги, которую будешь сам продавать. Если вспомню, напишу.]]></description>
        <author>Demo_S</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90200</guid>
        <pubDate>Sat, 30 Aug 2003 13:21:13 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90200</link>
        <description><![CDATA[Jin X: Что-то я тогда логики этого метода не пойму...<br>Во второй строке цифры должны возрастать на единицу, причём обязательно в каждой следующей позиции.<br><br>Возмём тот же ряд...<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">1 8, -, 2 3, 4 5 6, 4 5 6, 4 5 6, 7, 9, 10, 1 8</div></ol></div></div></div></div>...и строки...<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">аббнннраеп&#60;br&#62;агбнннрепа</div></ol></div></div></div></div><br>Что совпадает? &quot;<strong class='tag-b'>бнннр</strong>&quot;, т.е. <strong class='tag-b'>3,4,5,6,7</strong> :)<br><br>Так что, не гони :)]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90199</guid>
        <pubDate>Fri, 29 Aug 2003 21:11:36 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90199</link>
        <description><![CDATA[DEiL: ух<br>нет<br>это не для моих мозгов :-)<br>в общем.. удачи :)<br><br>p.s. я облажался в алгоритме поиска наибольшей возрастающей подпоследовательности :)) всё-таки целое лето дискретку не повторял :-))<br>в твоём примере &nbsp;<br>1 8, -, 2 3, 4 5 6, 4 5 6, 4 5 6, 7, 9, 10, 1 8 она будет 1 2(3) 4 5 6 7 9 10 :))<br><br>ззы.<br>8 1, -, 3 2, 6 5 4, 6 5 4, 6 5 4. 7, 9, 10, 8 1<br>8 1<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 6 5 4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 6 5 4<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;6 5 4<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 9 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10<br>и вот теперь идём справа на лево, сравнивая числа...<br><br> ::)]]></description>
        <author>DEiL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90198</guid>
        <pubDate>Fri, 29 Aug 2003 20:01:28 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90198</link>
        <description><![CDATA[Jin X: LZ77 (LZSS - одна из разновидностей) и LZ88 (LZW - одна из разновидностей) отличаются тем, что в первом просто ищутся совпадения и кодируются смещениями и размерами (если совпали) или выводятся сами байты, если ничего не найдено, т.е. словарём является всё множество возможных сочетаний символов из уже просмотренной части файла (а если словарь - это весь файл, как мне нужно сделать, то из всего файла). Скользящее окно - это когда берутся не все байты от начала до текущей позиции, а N последних. А во втором методе в словарь помещаются только определённые фразы, а в вывод заносятся индексы (если брать конкретно LZW). LZ77 гораздо быстрее декодируется.]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90197</guid>
        <pubDate>Fri, 29 Aug 2003 19:39:05 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90197</link>
        <description><![CDATA[DEiL: хм<br>к сожалению не знаю LZ77, знаю только LZ &amp; LZW.. <br>из этой &quot;оперы&quot; единственное, что приходит в голову - из 1-го файла составить суффиксное дерево, и использовать его как словарь для 2-го файла, сжимая его по LZW.. имхо это будет самый эффективный для поставленной задачи алгоритм. в плане поиска различий :-)<br>но есть одно но - при длине 1-го файла в 1кб, суффиксное дерево будет занимать... мм.. как минимум (1024!)! байт.. а это.. &nbsp;и гига наверное не хватит &nbsp;::)]]></description>
        <author>DEiL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90196</guid>
        <pubDate>Fri, 29 Aug 2003 19:33:02 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90196</link>
        <description><![CDATA[DEiL: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Jin X, 29.08.03, 22:09:04</span><div class='quote '><strong class='tag-b'>2 DEiL</strong>: В твоём примере (про совпадающие участки) есть одна ресурсоёмкая процедура. А именно поиск наибольшей возрастающей последовательности. Вот смотри, допустим у меня получилась такая последовательность:<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">1 8, -, 2 3, 4 5 6, 4 5 6, 4 5 6, 7, 9, 10, 1 8</div></ol></div></div></div></div>Теперь, чтобы мне найти максимумальную последовательность (3 4 5 6 7), мне нужно сделать два вложенных цикла:<br>[*] перебор всех списков (разделённых здесь запятыми)<br>[*] перебор всех чисел в списке<br>Затем для каждого из этих чисел мне нужно организовать ещё два вложенных цикла:<br>[*] перебор всех списков, начиная со следующего относительно того, в котором исходное число встретилось (правда, до тех пор, пока ни будет найдено НЕсовпадение, см. следующий пункт)<br>[*] поск в списке следующего числа относительно исходного (и увеличение исходного на единицу)<br>:)<br><br>А что там у нас с поиском совпадений с помощью хэш-функций, интересно?<br>Набо б про них почитать... сейчас займёмся ;)</div></div><br><br>ээээ<br>читай вдумчиво :-)<br>для начала - наибольшая возрастающая последовательность - 1 3 4 5 6 7 8 :-)<br>и поясняю ещё раз, как нужно её искать :-)<br><br>1 8, -, 2 3, 4 5 6, 4 5 6, 4 5 6, 7, 9, 10, 1 8<br>эту строку нужно анализировать справа налево:<br>рассмотрим &quot;кусок&quot;: 1 8<br>максимум здесь - &quot;8&quot;<br>выписываем в ответ<br>смотри левее - 10<br>не подходит. ответ &quot;8&quot;<br>смотри левее: 9<br>аналогично<br>далее - 7<br>7 меньше 8, значит ответ - &quot;7 8&quot;<br>левее - 4 5 6<br>берём отсюда максимальное число, меньшее 7-ке - 6<br>ответ - &quot;6 7 8&quot;<br>имхо это самая простая и нересурсоёмкая процедура из всего алгоритма :-)<br>самое ресурсоёмкое - поиск и запоминание позиций вхождения..<br><br>]]></description>
        <author>DEiL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90195</guid>
        <pubDate>Fri, 29 Aug 2003 18:24:53 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90195</link>
        <description><![CDATA[Jin X: Единственная проблема осталась: замена одного символа будет дорого обходиться...<br>Представьте: изменён 1 байт в середине файла. Нужно закодировать информацию о том, что начиная с позиции 0 совпадает туева хуча байт, затем 1 байт другой, а затем опять совпадает туева хуча байт (начиная со следующей позиции).<br><br>Давайте думать, как решить эту проблему... ::)<br><br>И надо ещё придумать, как кодировать вставленные символы (т.е. если брать LZSS, то вставленные символы будут занимать в 1.125 больше, чем надо).<br><br>p.s. Надо мне всё-таки дочитать книжку по сжатию данных... там ещё BWT какой-то есть, может он подойдёт :)<br>p.p.s. Впервые, наверное, создал аж три сообщения подряд...]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90194</guid>
        <pubDate>Fri, 29 Aug 2003 18:19:02 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90194</link>
        <description><![CDATA[Jin X: Я тут подумал... Ведь по сути дела, моя задача - это архивация LZ77-алгоритмом! Только в качестве окна будет браться первый файл (и это окно будет не скользящим, а фиксированным и равным размеру этого файла), а в качестве сжимаемых данных - второй файл!<br><br>Поправьте меня, если я не прав. Блин, оказывается как всё просто! :)<br>Осталось только найти быстрый алгоритм поиска (с помощью хэш-функций, конечно) :D<br>Ыыыыыы!!!... :) (p.s. это я так радуюсь)]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90193</guid>
        <pubDate>Fri, 29 Aug 2003 18:09:04 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90193</link>
        <description><![CDATA[Jin X: <strong class='tag-b'>2 DEiL</strong>: В твоём примере (про совпадающие участки) есть одна ресурсоёмкая процедура. А именно поиск наибольшей возрастающей последовательности. Вот смотри, допустим у меня получилась такая последовательность:<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">1 8, -, 2 3, 4 5 6, 4 5 6, 4 5 6, 7, 9, 10, 1 8</div></ol></div></div></div></div>Теперь, чтобы мне найти максимумальную последовательность (3 4 5 6 7), мне нужно сделать два вложенных цикла:<br>[*] перебор всех списков (разделённых здесь запятыми)<br>[*] перебор всех чисел в списке<br>Затем для каждого из этих чисел мне нужно организовать ещё два вложенных цикла:<br>[*] перебор всех списков, начиная со следующего относительно того, в котором исходное число встретилось (правда, до тех пор, пока ни будет найдено НЕсовпадение, см. следующий пункт)<br>[*] поск в списке следующего числа относительно исходного (и увеличение исходного на единицу)<br>:)<br><br>А что там у нас с поиском совпадений с помощью хэш-функций, интересно?<br>Набо б про них почитать... сейчас займёмся ;)]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90192</guid>
        <pubDate>Fri, 29 Aug 2003 06:11:36 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90192</link>
        <description><![CDATA[DEiL: p.s.<br>поразмыслил..<br>в результате получения общей последовательности, и тупо проанализировав несовпадающие участки, можно легко найти те места, где:<br># *По смещению XXX изменено YYY байт на &quot;ZZZZZZZZ&quot;<br># *По смещению XXX вставлен блок &quot;ZZZZZZZZZ&quot; размером YYY<br># *По смещению XXX удалён размером YYY<br><br>имхо :)<br><br>pp.s. правда это будет довольно ресурсоёмко..]]></description>
        <author>DEiL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90191</guid>
        <pubDate>Fri, 29 Aug 2003 06:04:02 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90191</link>
        <description><![CDATA[GrAnd: Исходники WinDiff - http://skyriver.ru/grand/ftp/download/windiff.zip]]></description>
        <author>GrAnd</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90190</guid>
        <pubDate>Wed, 27 Aug 2003 21:31:36 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90190</link>
        <description><![CDATA[DEiL: малость далеко от исходной задачи, но, имхо, для начала может и подойдёт -<br>алгоритм поиска максимального совпадения двух строк (и взять за алфавит все аски символы)<br>причём взять не вариант из динамического программирования. а использовать метод поиска максимальной подпоследовательности:<br>пусть есть две строки - s1 &amp; s2<br>выпишем все символы из s1 и рядом с ними - позиции, где они встречаются<br>отсортируем их (позиции) по убыванию (а: 177 20 2, ж: 12 1 и т,д,)<br>затем для каждого символа из s2 (сначала первый, потом второй и т.д.) выпишем эти последовательности (которые мы записали ранее) (если нужно - пишем пустые строки)<br>в итоге получим некоторую последовательность позиций<br>найдём в ней наибольшую возрастающую подпоследовательность<br>(идём справа-налево. для каждого символа будем в &quot;ответ&quot; записывать наибольшую позицию, не превосходящую выписанную позицию предыдущего символа)<br>в итоге полученная последовательность позиций - общая максимальная подпоследовательность двух строк...<br><br>надеюсь хоть как-то поможет]]></description>
        <author>DEiL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90189</guid>
        <pubDate>Tue, 26 Aug 2003 13:46:07 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90189</link>
        <description><![CDATA[Jin X: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>zx1024, 26.08.03, 00:12:25</span><div class='quote '>Только ты можешь знать как поступить в этой ситуации:<br>ABCDEFG  и ABEFG. Здесь удален CD или CDEFG заменён на EFG (ну здесь может и очевидно, но наверняка будут и посложнее ситуации)?</div></div>Если это в конце файла, то да (можно выбрать любой, но очевидно, что удаление предпочтительнее, т.к. его описать легче (меньше памяти надо)). А если где-то в середине, то никаких вопросов не может быть: если это удаление, то все последующие байты будут смещены.<br><br><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>2) То, что для первого файла будет &quot;вставлено&quot; - для второго будет &quot;удалено&quot;. Следовательно, можно рассматривать только удаления (или вставки) сначала для одного файла, потом для другого.</div></div>Ну я ж говорю: патчи, обновления (обратная операция мало интересует). Значит, нужно сравнивать один файл относительно другого.<br><br><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>А это почти тривиальная задача, если не считать время её выполнения.</div></div>Ты знаешь, мне бы хотелось, чтобы всё выполнялось быстро, иначе это уже кривизна алгоритма. К тому же, это кажется только тривиальной задачей, т.к. кроме вставки/удаления есть ещё и замена.<br><br><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Если один из вставленных блоков совпадёт с удалённым, то это уже перемещение (можно рассматривать частичное совпадение). Копирование - поиск подстроки (вставленного блока) во втором &quot;исправленном&quot; файле (не рассматриваются вставленные блоки).</div></div>Ты знаешь, кажется всё так просто... пока за реализацию не возмёшься.<br>И мне не надо, чтобы алгоритм работал целый час.<br><br><strong class='tag-b'>2 GrAnd</strong>: Прогу скачал, посмотрю (вот только исходников я не нашёл :().<br>Может, подскажешь, в каком направлении идти (какие алгоритмы почитать и т.д).]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90188</guid>
        <pubDate>Mon, 25 Aug 2003 20:12:25 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90188</link>
        <description><![CDATA[zx1024: Покумекал я над этим вопросом. И вот к каким выводам пришёл.<br>1) *По смещению XXX изменено YYY байт на &quot;ZZZZZZZZ&quot; является по сути комбинацией из двух последующих пунктов. Только ты можешь знать как поступить в этой ситуации:<br>ABCDEFG &nbsp;и ABEFG. Здесь удален CD или CDEFG заменён на EFG (ну здесь может и очевидно, но наверняка будут и посложнее ситуации)?<br>2) То, что для первого файла будет &quot;вставлено&quot; - для второго будет &quot;удалено&quot;.<br>Следовательно, можно рассматривать только удаления (или вставки) сначала для одного файла, потом для другого. А это почти тривиальная задача, если не считать время её выполнения. Затем, если удаление и вставка появились с одним смещением (?) сказано конечно не совсем корректно) можно подумать и о замене.<br>Если один из вставленных блоков совпадёт с удалённым, то это уже перемещение (можно рассматривать частичное совпадение). Копирование - поиск подстроки (вставленного блока) во втором &quot;исправленном&quot; файле (не рассматриваются вставленные блоки).]]></description>
        <author>zx1024</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90187</guid>
        <pubDate>Mon, 25 Aug 2003 08:35:38 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90187</link>
        <description><![CDATA[GrAnd: У Microsoft есть прога одна WinDiff... тем более с вижуалом она поставляется и в виде исходника... Вот ее за основу и возьми... ;D]]></description>
        <author>GrAnd</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90186</guid>
        <pubDate>Sun, 24 Aug 2003 21:15:12 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90186</link>
        <description><![CDATA[Jin X: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Достаточно просто узнать дату 1го и 2го файла, их размер и воооо как достаточно, а то блоки искать</div></div>И что это даст? Ты б для начала спросил для чего это. И если это легко решается, то лучше подскажи, а не рассуждай - нужно мне это или нет.<br><br><strong class='tag-b'>2 Clane</strong>: Нет, совсем не кряки, а патчи и обновления (для кряков обычно достаточно просто заменить пару байт без всяческих передвижений).]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90185</guid>
        <pubDate>Sun, 24 Aug 2003 19:44:32 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90185</link>
        <description><![CDATA[Clane: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Black_Star, 24.08.03, 23:18:24</span><div class='quote '>Ну и мечты у тебя? Задача выполнима, и даже легко, но никогда этим не страдал и тебе не советую. Одна простая причина - нафига это ?<br>Достаточно просто узнать дату 1го и 2го файла, их размер и воооо как достаточно, а то блоки искать  ::)...</div></div><br>Для того, чтобы кряки писать, или я не прав, а JinX ?]]></description>
        <author>Clane</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90184</guid>
        <pubDate>Sun, 24 Aug 2003 19:18:24 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90184</link>
        <description><![CDATA[Black_Star: Ну и мечты у тебя? Задача выполнима, и даже легко, но никогда этим не страдал и тебе не советую. Одна простая причина - нафига это ?<br>Достаточно просто узнать дату 1го и 2го файла, их размер и воооо как достаточно, а то блоки искать &nbsp;::)...]]></description>
        <author>Black_Star</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90183</guid>
        <pubDate>Sun, 24 Aug 2003 12:25:24 +0000</pubDate>
        <title>Сравнение файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=9178&amp;view=findpost&amp;p=90183</link>
        <description><![CDATA[Jin X: Нужно произвести сравнение двух двоичных файлов (старой и новой версии) и результат выдать в виде списка, состоящего из возможных пунктов:<br>[*] *По смещению XXX изменено YYY байт на &quot;ZZZZZZZZ&quot;<br>[*] *По смещению XXX вставлен блок &quot;ZZZZZZZZZ&quot; размером YYY<br>[*] *По смещению XXX удалён размером YYY<br>[*] Блок скопирован из смещения XXX по смещению YYY<br>[*] Блок перемещён из смещения XXX по смещению YYY (ну, это, в принципе, может быть как комбинация двух предыдущих пунктов)<br>* - самые важные пункты (должны поддерживаться алгоритмом обязательно)<br>Желательно бы ещё иметь возможность определять такие изменения, как перемещение с заменой (т.е. блок перемещён, но в нём заменены несколько байт), но это, конечно, уже в последнюю очередь, т.к. ИМХО самое сложное.<br><br>Интересует теория, но если есть уже готовые программы, интересно было бы посмотреть... (сам я знаю только проги для работы с текстовыми файлами)<br><br><em class='tag-i'>- Спасибо!</em>]]></description>
        <author>Jin X</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	