<?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=423019&amp;view=findpost&amp;p=3852045</guid>
        <pubDate>Thu, 16 Sep 2021 08:41:27 +0000</pubDate>
        <title>Выбор оптимальных структур данных (список, хеш-таблица, деревья, etc)</title>
        <link>https://forum.sources.ru/index.php?showtopic=423019&amp;view=findpost&amp;p=3852045</link>
        <description><![CDATA[MBo: Декартово дерево (treap, дерамида) <a class='tag-url' href='https://e-maxx.ru/algo/treap' target='_blank'>https://e-maxx.ru/algo/treap</a><br>
<br>
<br>
<br>
Или очередь по приоритетам на основе бинарной кучи (binary heap) по ключу value, совмещённая с хэш-таблицей для поиска index]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423019&amp;view=findpost&amp;p=3852028</guid>
        <pubDate>Wed, 15 Sep 2021 20:03:22 +0000</pubDate>
        <title>Выбор оптимальных структур данных (список, хеш-таблица, деревья, etc)</title>
        <link>https://forum.sources.ru/index.php?showtopic=423019&amp;view=findpost&amp;p=3852028</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=423019&view=findpost&p=3852025'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2021-09-15T18:47:32+00:00">15.09.21, 18:47</time></span><div class='quote '><br>
Хотя я бы для очистки совести покурил R-Tree.</div></div><br>
загуглил это дерево. Да уж, жесть, конечно там) Двоичное дерево поиска является чуть ли не тривиальной структурой по сравнению с деревьями, которые придуманы...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=423019&view=findpost&p=3852025'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2021-09-15T18:47:32+00:00">15.09.21, 18:47</time></span><div class='quote '>Проблемка. На value ведь никакого условия уникальности нет, верно? прикинь, надо удалить 2 минимальных, а у тебя с минимальным значением 4 элемента - ну и какие 2 из них удалять? </div></div><br>
абсолютно точно подмечено&#33;<br>
на value нет никакого условия уникальности. Еще плохо то, что диапазон допустимых значений неизвестен, кроме того, что value &gt; 0, т к это цена.<br>
Как я понял из условия, программа должна обрабатывать наиболее ранние поступившие на обработку объекты (FIFO), поэтому при вставке объекта в отсортированный список дополнительно буду смотреть на index. Др.словами, будут удаляться снача те объекты, у которых index минимальный.<br>
<br>
Итого. Очень вероятно, что здесь действительно, надо делать через R-tree, но это пока неподъемно).<br>
Оставлю список + массив. Это приводит к тому, что удаление по индексу выполняется за О(1), удаление первых N элементов, ну тоже за О(1) (или это О(N) считается, не знаю точно) и все время будет тратиться в основном на вставку объекта в нужную позицию с сохранением упорядоченности.<br>
<br>
Для одномерного массива будет выделен кусок памяти для 1 млн. элементов. Вроде массив будет легчайший (лишь указатель на элемент списка), но фрагментация может быть дичайшей + потребуется динамическое расширение размера массива со временем. Наверное, это некритично)<br>
<br>
p.s. но здесь 100% не нужны графы...вроде...]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423019&amp;view=findpost&amp;p=3852025</guid>
        <pubDate>Wed, 15 Sep 2021 18:47:32 +0000</pubDate>
        <title>Выбор оптимальных структур данных (список, хеш-таблица, деревья, etc)</title>
        <link>https://forum.sources.ru/index.php?showtopic=423019&amp;view=findpost&amp;p=3852025</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=423019&view=findpost&p=3852013'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-09-15T16:46:32+00:00">15.09.21, 16:46</time></span><div class='quote '>Вопрос: структуры данных, которые я хочу пока что применить (двусвязный список + дин.массив со ссылкой на элемент списка, по факту индекс, как в БД) они нормально подходят для такой задачи или здесь вообще все совсем по-другому, вот в корне все по-другому??</div></div><br>
Ну реально прям задачка для SQL-сервера, один в один. Кластерный индекс по value и обычный по index.<br>
<br>
Хотя я бы для очистки совести покурил R-Tree.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=423019&view=findpost&p=3852013'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-09-15T16:46:32+00:00">15.09.21, 16:46</time></span><div class='quote '>1. удалить N первых минимальных по value объектов.</div></div><br>
Проблемка. На value ведь никакого условия уникальности нет, верно? прикинь, надо удалить 2 минимальных, а у тебя с минимальным значением 4 элемента - ну и какие 2 из них удалять?]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423019&amp;view=findpost&amp;p=3852013</guid>
        <pubDate>Wed, 15 Sep 2021 16:46:32 +0000</pubDate>
        <title>Выбор оптимальных структур данных (список, хеш-таблица, деревья, etc)</title>
        <link>https://forum.sources.ru/index.php?showtopic=423019&amp;view=findpost&amp;p=3852013</link>
        <description><![CDATA[FasterHarder: Всем хай&#33; Сходу перехожу к делу&#33;<br>
<br>
<strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Вот такое условие.</span></strong> На вход программе подаются однотипные объекты (будем называть их T), обладающих только 2мя свойствами:<ul class="tag-list"><li>index (натуральное уникальное число, стартующее с 1 и увеличивающееся на +1)</li><li>value (дробное положительное значение, диапазон неизвестен)</li></ul>то есть на вход программе подаются объекты T(index, value). Количество может быть большим (насколько неизвестно, но большим)).<br>
<br>
У пользователя есть такие команды:<br>
1. удалить N первых минимальных по value объектов. Другими словами, например, если N = 3, то надо удалить 3 объекта, имеющих наименьшее значение value.<br>
2. удалить ЛЮБОЙ объект по полю index.<br>
<br>
Вот пример входных данных из 5ти объектов Т: T(1, 23.3), T(2, 17.3), T(3, 129.5), T(4, 55.0), T(5, 24.8)<br>
----------------------------------------------------<br>
И вот что-то прикурил я здесь по применению оптимальных структур данных, т к есть проблемки...<br>
<br>
Коротко мои мысли.<br>
1. Если входные объекты сразу не вставлять в отсортированное пространство по полю value, то удаление N первых минимальных сведется к циклам, т к местоположение наименьших будет хаотичным. Следовательно, при поступлении очередного объекта Т его надо сразу засовывать в нужную позицию отсортированного пространства. Какую структуру данных использовать? Дерево поиска? Не катит вроде вообще. Вижу список, ну, наверное, двусвязный. При поступлении очередного объекта Т придется найти его позицию вставки, это вроде сложность O(K/2), где К - длина списка. Разве не так? Имея такой список удаление N мин.по value объектов будет равносильно удалению из начала списка N объектов.<br>
<br>
2. Но список из п1 не годится для операции №2 (удаление по индексу), т к список отсортирован по value и тогда операция удаления будет сводится к фул-скану. Завести динамический массив, у которого индекс+1 равен index объекта Т. Значением элементов такого массива будет ссылка на объект, хранящийся в отсортированном двусвязном списке. При такой организации удаление будет выполнять за время О(1) (или близкое к нему). Но проблема здесь в том, что с течением времени будет возникать фрагментация (будут образовываться пустоты, разреженность). Также неизвестно кол-во входных объектов Т, поэтому хз каким размером нужно делать этот массив.<br>
<br>
Здесь, возможно, вообще надо уходить в хеш-таблицы с цепочками, но по условии не говорится о диапазоне поля value (хотя может для хеш это и не важно).<br>
Вопрос: структуры данных, которые я хочу пока что применить (двусвязный список + дин.массив со ссылкой на элемент списка, по факту индекс, как в БД) они нормально подходят для такой задачи или здесь вообще все совсем по-другому, вот в корне все по-другому??<br>
<br>
спс. за внимание <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2021-09-15T16:48:48+00:00">15.09.21, 16:48</time></span></span><br>
Еще допишу такой момент. Пользователь достаточно часто вызывает команду №1 и реже команду №2 (в 2-3 реже, чем команду №1).]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	