<?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=452734&amp;view=findpost&amp;p=3912693</guid>
        <pubDate>Tue, 05 Nov 2024 08:45:02 +0000</pubDate>
        <title>поиск максимумов в хеш-таблице</title>
        <link>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912693</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=452734&view=findpost&p=3912671'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2024-11-05T04:02:49+03:00">05.11.24, 01:02</time></span><div class='quote '>почитал немного про хеш-таблицы<br>
в общем пришел к выводу, что ХТ вот ни разу не предназначены для выборки каких-то ТОП-данных. Вставка, удаление и поиск ПО КЛЮЧУ - это, да, всегда пожалуйста и быстро</div></div><br>
Все верно. Во многих языках программирования хэш-таблицы (они же карты, они же map, они же ассоциативные контейнеры) имеют две реализации - обычный хэш, и хэш, отсортированный по ключам. Оба варианта имеют и преимущества, и недостатки в зависимости от контекста использования. Как правило, они разняться по двум критериям &quot;скорость получения элемента по ключу&quot;, &quot;скорость записи элемента с ключом&quot;. Но в вопросе речь идет о топе значений. Тут, если нет каких-то внешних механизмов индексирования, нужен полный перебор всех элементов хэша, без этого никак.<br>
<br>
По поводу ТОПА. Если он подразумевается небольшой - даже и полной индексации хэша не нужно, и даже вредно&#33; Просто дополнительно заводится упорядоченный массив топов, где есть поля: &#39;значение&#39;, &#39;ключ_из_хэша&#39;. И при каждом занесении очередного элемента в хэш просто актуализируется эта таблица. А это задача быстрая и тривиальная. В таком массиве можно конечно и просто одни &#39;значения&#39; оставить, но если потом понадобится узнать каким ключам они соответствуют - понадобится полный перебор. И я думаю, это не то место, где следует экономить.]]></description>
        <author>Majestio</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912672</guid>
        <pubDate>Tue, 05 Nov 2024 04:24:40 +0000</pubDate>
        <title>поиск максимумов в хеш-таблице</title>
        <link>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912672</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=452734&view=findpost&p=3912671'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2024-11-05T01:02:49+00:00">05.11.24, 01:02</time></span><div class='quote '>пришел к выводу, что ХТ вот ни разу не предназначены для выборки каких-то ТОП-данных.</div></div><br>
Ну в общем да. Основное назначение хэша с этой точки зрения - обеспечение сравнительно равномерного распределения в поле возможных значений, когда оригинальные данные такой равномерности не имеют.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912671</guid>
        <pubDate>Tue, 05 Nov 2024 01:02:49 +0000</pubDate>
        <title>поиск максимумов в хеш-таблице</title>
        <link>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912671</link>
        <description><![CDATA[FasterHarder: почитал немного про хеш-таблицы<br>
в общем пришел к выводу, что ХТ вот ни разу не предназначены для выборки каких-то ТОП-данных. Вставка, удаление и поиск <strong class='tag-b'>ПО КЛЮЧУ</strong> - это, да, всегда пожалуйста и быстро<br>
<br>
поиск каких-то ТОП данных из ХТ какое-то извращение вообще получается. Есть море более подходящих структур для таких операций ( даже просто массив отсортировать и выбрать нужный ТОП первых слов )<br>
<br>
всем спс за участие]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912569</guid>
        <pubDate>Fri, 01 Nov 2024 10:47:04 +0000</pubDate>
        <title>поиск максимумов в хеш-таблице</title>
        <link>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912569</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=452734&view=findpost&p=3912530'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2024-10-31T23:36:38+00:00">31.10.24, 23:36</time></span><div class='quote '>но по условию надо вставлять только в начало</div></div><br>
Вообще без проблем. Но не нужно от одного &quot;инструмента&quot;, который хорошо выполняет свои функции - требовать что-то еще другое, если это функционально не предусмотрено.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=452734&view=findpost&p=3912532'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2024-11-01T04:42:36+00:00">01.11.24, 04:42</time></span><div class='quote '>А после завершения подсчёта таблица пересортировывается по полю количества</div></div><br>
Вот и я говорю ;) Что мешает завести индексацию этой самой хэш-таблицы, периодически ее актуализировать (пересортировывать)? По итогу - хэш-таблица хранит предметные данные, а индекс - хранит упорядоченность.]]></description>
        <author>Majestio</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912532</guid>
        <pubDate>Fri, 01 Nov 2024 04:42:36 +0000</pubDate>
        <title>поиск максимумов в хеш-таблице</title>
        <link>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912532</link>
        <description><![CDATA[Akina: Крайне странное описание. Я в нём в упор не вижу подсчёта количества - вариант &quot;Если слово раньше не встречалось&quot; рассмотрен, а обратный как-то стыдливо проигнорирован. В то время как конечная задача требует именно подсчёта количества вхождений, то есть этот обратный вариант даже более важен.<br><br>В качестве решения вижу добавление к полю хэша ещё и поля количества, которое устанавливается равным 1 при начальной вставке и инкрементируется при повторной вставке. Для ускорения процедуры разбора таблица поддерживается сортированной по хэшу. А после завершения подсчёта таблица пересортировывается по полю количества, и можно брать топ-5. Если нужен строго топ-5, то быстрее, вероятно, будет сортировка поля количества с игнорированием записей ниже первых 5 (получаем топ-5 количеств), а затем выборка записей с накопленными количествами и выбор топ-5 уже записей (заодно надо решить, что делать с дубликатами). Это два прохода и дополнительная сортировка массива из 5 значений.<br><br>Альтернатива - опять же поле количества, плюс дополнительная структура ссылок на элементы массива, сортированные по этому количеству. Это замедлит начальный разбор, но ускорит финальную обработку. Правда, суммарно будет медленнее первого варианта.<br><br>Ну и совсем альтернатива - просто накапливать хэши без оглядки на &quot;уже присутствует&quot;, а потом, после обработки текста - сортировка подсчётом.<br><br>В любом случае худшие начальные условия - это когда все слова присутствуют в одинаковом количестве.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912531</guid>
        <pubDate>Fri, 01 Nov 2024 03:42:03 +0000</pubDate>
        <title>поиск максимумов в хеш-таблице</title>
        <link>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912531</link>
        <description><![CDATA[MBo: Возможно, подразумевается комплекс мер.<br><br>--------<br>При вставке, если слово новое, проходим всю цепочку, и потом вставляем в начало со счётчиком 1. По сути, обхода цепочки не избежать. <br><br>Если слово нашли, увеличиваем счётчик пары в цепочке и сдвигаем пару ближе к концу, если счётчик превысил счётчик следующих - при этом поддерживается упорядоченность цепочек, как ты и написал. Существенно, что эта операция той же сложности, как и предыдущая.<br><br>-------<br>В конце работы создаём кучу/пирамиду max-heap из номеров цепочек по ключу счётчика. Пять раз снимаем с кучи верхний номер, выдавая слово из концевой пары соотв. цепочки.<br><br>Если цепочка не опустела  - вставляем этот же номер в кучу снова, используя последнюю пару в данной цепочке (она была предпоследней раньше)<br><br>-----<br>P.S. Использование кучи смешно смотрится на таких объёмах (5/97), и пятикратный просмотр концов с таким же удалением будет, вероятно, на практике не хуже]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912530</guid>
        <pubDate>Thu, 31 Oct 2024 23:36:38 +0000</pubDate>
        <title>поиск максимумов в хеш-таблице</title>
        <link>https://forum.sources.ru/index.php?showtopic=452734&amp;view=findpost&amp;p=3912530</link>
        <description><![CDATA[FasterHarder: Всем хай&#33; Сходу к делу&#33;<br>
<br>
Есть текст на английском языке. Нужно разбить его на отдельные слова и поместить в хеш-таблицу, которая на цепочках. При этом считается частотность каждого слова ( отдельное поле ). Если слово раньше не встречалось, то оно вставляется в НАЧАЛО цепочки ( вычислительная сложность О(1) этой операции ).<br>
<br>
Пусть размер хеш-таблицы = 97( simple number ) - это примерно середина между 2<sup class='tag-sup'>6</sup> и 2<sup class='tag-sup'>7</sup>. Но это не суть, можно и др.параметры взять.<br>
<br>
В общем с построением хеш-таблицы проблем 0.0 ( вопросов по хеш-функции нет ).<br>
<br>
==========================================<br>
<br>
И когда входной текст обработан, сформирована хеш-таблица, то нужно вывести на экран ТОП-5 САМЫХ часто встречающихся слова.<br>
<br>
<strong class='tag-b'>А разве хеш-таблицы имеют какое-то отношение к &quot;упорядоченности&quot; данных??</strong> Нет, разумеется, можно 5 раз ПРОСМОТРЕТЬ ВСЮ хеш-таблицу, помечая каким-то флагом найденные ТОПЫ до текущего, но это вроде не кажется разумным ни разу)<br>
<br>
Можно еще отсортировать цепочки по убыванию частотности слов, но тоже как-то все кажется не к месту...<br>
Можно еще при вставке в нужную цепочку ( в зависимости от хеша, получаемого от хеш-функции ) вставлять в упорядоченное место по частотности, но по условию надо вставлять только в начало, если слово раньше не встречалось, поэтому это точно не вариант<br>
<br>
============================================<br>
<br>
<span class="tag-color tag-color-named" data-value="red" style="color: red"><strong class='tag-b'>что-то не понимаю, как связать построенную хеш-таблицу с поиском ТОП-5 самых частых слов. Такое чувство, что никак или все-таки...?</strong></span><br>
<br>
спс за внимание]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	