<?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=61999&amp;view=findpost&amp;p=444144</guid>
        <pubDate>Sat, 28 Aug 2004 20:37:03 +0000</pubDate>
        <title>Поиск данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=61999&amp;view=findpost&amp;p=444144</link>
        <description><![CDATA[Romtek: <span class='tag-size' data-value='10' style='font-size:10pt;'><span class="tag-color tag-color-named" data-value="blue" style="color: blue"><strong class='tag-b'>Нечёткий поиск (Fuzzy search)</strong></span></span><br>
&gt;&gt; Расстояние (разность) между двумя строками. Функция Левенштейна<br>
<br>
<strong class='tag-b'>Levenshtein distance</strong> - метрика для строк, определяющая степень их близости. Применяется для приближенного поиска вхождения подстроки.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><ul class="tag-list"><li>  Что на этой страничке подразумевается под поиском на неточное равенство?<br>
     Под поиском на неточное равенство, или под поиском по сходству (английский термин – fuzzy search) на этом сайте подразумевается, прежде всего, поиск в массиве текстовой информации по ключевым словам или по-другому терминам. Термины могут не совпадать со словами текстовых документов, а быть только «похожими». Кроме того, в разделе «Статьи» можно найти информацию по поиску в общих метрических пространствах.</li><li> А зачем он нужен?<br>
     Как мне кажется, поиск по сходству нужен по двум причинам. Во-первых, человек может не всегда знать точное написание слова, например, если слово является научным термином. Так, количество медицинских и/или биологических терминов превышает десять миллионов. Во-вторых, электронные документы содержат ошибки, что иногда не позволяет найти нужную информацию.<br>
     Особенно это актуально, если нужно найти редкий термин (то есть выборка документов очень маленькая), при том, что термин указан в документе с ошибкой. Пробовали ли вы когда-нибудь искать с помощью Яндекса по ключевому слову «хэширование»? Если да, то вы наверняка уже заметили, что если искать по ключевому слову «хеширование», то результаты поиска отличаются.</li><li> Что же понимается под «похожестью» ключевых слов запросов и слов документа?<br>
     Существует бесконечно много способов определения меры «похожести». Наиболее известной является функция (метрика) Левенштейна, которую также называют расстоянием редактирования. Получили распространение также функции, которые рассчитывают меру близости по количеству общих подстрок определенной длины.</li><li> Так что же все-таки представляет из себя эта функция Левенштейна?<br>
     Если считать все типы ошибок, такие, как удаление, добавление и замены символа равноправными, то расстояние редактирование равно минимальному количеству операций редактирования, которые преобразуют одно слово в другое.</li></ul></div></div><br>
<br>
{ Автор:  Андрей aka wicked, wilk@ua.fm, ICQ:92356239, Тернополь }<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> реализация функции в принципе соответствует описанию с одной оговоркой:<br>
 матрица из описания заменена статическим буфером, длина которого<br>
 равна удвоенной максимальной длине строк<br>
 это сделано для:<br>
 1) экономии памяти и во избежание её перераспределений<br>
 2) повышения быстродействия (у меня функция работает в обработчике onfilterRecord)<br>
 таким образом, в реализации половинами буфера представлены только<br>
 две последние строки матрицы, которые меняются местами каждую<br>
 итерацию внешнего цикла (по i)... для определения того, какая из половин<br>
 буфера является &quot;нижней строкой&quot;, служит переменная flip<br>
 т. е. при flip = false первая половина буфера является предпоследней<br>
 строкой, а вторая - последней; при flip = true наоборот,<br>
 первая половина - последняя строка, вторая половина - предпоследняя</div></div><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">const cuthalf = 100;</div><div class="code_line">&nbsp;&nbsp; { константа, ограничивающая макс. длину обрабатываемых строк }</div><div class="code_line">&nbsp;</div><div class="code_line">var buf: array [0..((cuthalf * 2) - 1)] of integer;</div><div class="code_line">&nbsp;&nbsp; { рабочий буффер, заменяет матрицу, представленную в описании }</div><div class="code_line">&nbsp;</div><div class="code_line">function min3(a, b, c: integer): integer; { вспомогательная функция }</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; &nbsp; result: integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; result := a;</div><div class="code_line">&nbsp;&nbsp; &nbsp; if b &#60; Result then Result := b;</div><div class="code_line">&nbsp;&nbsp; &nbsp; if c &#60; Result then Result := c;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; min3 := result;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function LeveDist(s, t: string): integer;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; &nbsp; i, j, m, n: integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; cost: integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; flip: boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp; result: integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; s := copy(s, 1, cuthalf - 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; t := copy(t, 1, cuthalf - 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; m := length(s);</div><div class="code_line">&nbsp;&nbsp; &nbsp; n := length(t);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if m = 0 then Result := n</div><div class="code_line">&nbsp;&nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if n = 0 then Result := m</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flip := false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i := 0 to n do buf[i] := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i := 1 to m do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if flip then buf[0] := i</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else buf[cuthalf] := i;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for j := 1 to n do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if s[i] = t[j] then cost := 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else cost := 1;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if flip then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;buf[j] :=</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; min3(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(buf[cuthalf + j] + 1),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(buf[j - 1] + 1),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(buf[cuthalf + j - 1] + cost)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;buf[cuthalf + j] :=</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; min3(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(buf[j] + 1),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(buf[cuthalf + j - 1] + 1),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(buf[j - 1] + cost)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;flip := not flip;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if flip then Result := buf[cuthalf + n]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else Result := buf[n];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; LeveDist := Result;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; writeln (LeveDist (&#39;Pascal&#39;, &#39;Paskal&#39;));</div><div class="code_line">&nbsp;&nbsp; &nbsp; readln;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<strong class='tag-b'>Ссылки:</strong><br>
<a class='tag-url' href='http://www.merriampark.com/ld.htm' target='_blank'>http://www.merriampark.com/ld.htm</a><br>
<a class='tag-url' href='http://itman.narod.ru/index.htm' target='_blank'>http://itman.narod.ru/index.htm</a>]]></description>
        <author>Romtek</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=61999&amp;view=findpost&amp;p=425346</guid>
        <pubDate>Tue, 10 Aug 2004 08:06:11 +0000</pubDate>
        <title>Поиск данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=61999&amp;view=findpost&amp;p=425346</link>
        <description><![CDATA[Romtek: <strong class='tag-b'><span class='tag-size' data-value='10' style='font-size:10pt;'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Поиск подпоследовательности в массиве (алгоритм СДВИГ-И)</span></span></strong><br>
<br>
<br>
Функция осуществляет поиск первого вхождения массива W в массив T,   в результате функция выдает              номер первого элемента в массиве T, начиная с которого встречается массив W. В случае, если массив W не встречается в массиве T результат функции равен -1.<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">Const</div><div class="code_line">&nbsp;&nbsp; Max = 32;</div><div class="code_line">&nbsp;</div><div class="code_line">Function ExactShiftAND (W, T: Array of Byte; m, n: Longint): Longint;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; {Result,}</div><div class="code_line">&nbsp;&nbsp; BitT: Longint;</div><div class="code_line">&nbsp;&nbsp; Bit: array[0..Max] of Longint;</div><div class="code_line">&nbsp;&nbsp; CVTab: array [0..255] of Longint;</div><div class="code_line">&nbsp;&nbsp; i, R: word;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; BitT := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := -1;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; for i := 0 to Max - 1 do Bit[i] := 1 shl i;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; FillChar (CVTab, SizeOf (CVTab), 0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; for i := 0 to M - 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; CVTab[W[i]] := CVTab[W[i]] OR Bit[i];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; i := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; R := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; While (Result = -1) AND (i &#60; n) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;R := R shl 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;R := R OR 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;R := R AND CVTab[T[i]];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;If (R AND Bit[m - 1] &#60;&#62; 0) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result := i - m + 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc (i);</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; ExactShiftAND := Result;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; &nbsp; Asize = 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Bsize = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; A: array [0 .. Asize - 1] of byte = (4,8);</div><div class="code_line">&nbsp;&nbsp; &nbsp; B: array [0 .. Bsize - 1] of byte = (3,4,4,8);</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; writeln (ExactShiftAND (A, B, Asize, Bsize));</div><div class="code_line">&nbsp;&nbsp; &nbsp; readln;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Romtek</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=61999&amp;view=findpost&amp;p=422290</guid>
        <pubDate>Fri, 06 Aug 2004 10:55:35 +0000</pubDate>
        <title>Поиск данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=61999&amp;view=findpost&amp;p=422290</link>
        <description><![CDATA[Romtek: <strong class='tag-b'><span class='tag-size' data-value='12' style='font-size:12pt;'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Бинарный поиск в упорядоченном массиве</span></span></strong><br>
<br>
Функция осуществляет поиск вхождения числа Key в массив A в указанных границах Lb..Ub, в результате функция выдает номер элемента. В случае, если число Key не встречается в массиве A, результат функции равен -1.<br>
<hr><strong class='tag-b'>Примечание</strong>: Индекс массива начинается с нуля&#33;<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">Function BinarySearch (A: Array of integer; Lb, Ub, Key: integer): integer;</div><div class="code_line">var M: integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;BinarySearch := -1;</div><div class="code_line">&nbsp;&nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp;M := (Lb + Ub) div 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Key &#60; A[M]) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Ub := M - 1</div><div class="code_line">&nbsp;&nbsp; &nbsp;else if (Key &#62; A[M]) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Lb := M + 1</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;BinarySearch := M;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;until Lb &#62; Ub;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">const X: array[0..4] of integer = (2,5,6,8,9);</div><div class="code_line">var n: integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; write(&#39;Enter number to search: &#39;); readln(n);</div><div class="code_line">&nbsp;&nbsp; &nbsp; writeln(BinarySearch (X,0,4,n));</div><div class="code_line">end.</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue"><span class='tag-size' data-value='10' style='font-size:10pt;'><strong class='tag-b'>Поиск наименьшего элемента массива</strong></span></span><br>
<br>
Ищет наименьший элемент в массиве простым перебором. Если заменить знак &quot;&lt;&quot; на &quot;&gt;&quot;, то можно искать наибольший элемент.<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">(*******************************************************</div><div class="code_line">Функция для поиска наименьшего элемента.</div><div class="code_line">Принимает:</div><div class="code_line">&nbsp;&nbsp; &nbsp;*массив значений a с индексами элементов от 0 до N-1</div><div class="code_line">&nbsp;&nbsp; &nbsp;*число элементов</div><div class="code_line">Возвращает:</div><div class="code_line">&nbsp;&nbsp; &nbsp;*номер наименьшего элемента</div><div class="code_line">*******************************************************)</div><div class="code_line">function FindLeastElement (const a : array of Real; const N : Integer): Integer;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; &nbsp;I, result &nbsp; : &nbsp; Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;result := 0; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for I := 1 to N - 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if A[result] &#62; A[i] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result:=i;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FindLeastElement := result;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
<br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue"><span class='tag-size' data-value='10' style='font-size:10pt;'><strong class='tag-b'>Поиск подпоследовательности в массиве (простой)</strong></span></span><br>
<br>
Функция осуществляет поиск первого вхождения массива W в массив T, в результате функция выдает номер первого элемента в массиве T начиная с которого встречается массив W. В случае, если массив W не встречается в массиве T результат функции равен -1.<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">{ массив W с индексами элементов от 0 до M - 1</div><div class="code_line">&nbsp;&nbsp;массив T с индексами элементов от 0 до N - 1 }</div><div class="code_line">function SimpleSearch (</div><div class="code_line">&nbsp;&nbsp;W, T: array of byte;</div><div class="code_line">&nbsp;&nbsp;m, n : LongInt</div><div class="code_line">&nbsp;&nbsp;): LongInt;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; &nbsp; i, j ,k: byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result: longint;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := -2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; j := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; if m &#60;= n then</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if W[0] = T[i] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;j := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;k := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inc (j);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inc (k);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;until (j &#62;= m) OR (W[j] &#60;&#62; T[k]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if j = m then </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (j &#62;= m) OR (i &#62; n - m) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Result := -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inc (i);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;until (Result = -1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; SimpleSearch := Result;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; &nbsp; Asize = 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Bsize = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; A: array [0 .. Asize - 1] of byte = (4,8);</div><div class="code_line">&nbsp;&nbsp; &nbsp; B: array [0 .. Bsize - 1] of byte = (3,4,4,8);</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; writeln (SimpleSearch (A, B, Asize, Bsize))</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Romtek</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      </channel>
      </rss>
	