<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Форум 'Алгоритмы' на RSDN</title>
    <link>http://rsdn.org/Forum/alg/</link>
    <description></description>
    <category>alg</category>
    <language>ru-ru</language>
    <copyright>Copyright ©, RSDN, 2001-2007</copyright>
    <webMaster>forum@rsdn.org</webMaster>
    <generator>RSDN RSS Generator 1.3</generator>
    <image>
      <url>http://rsdn.org/rsdn.gif</url>
      <title>RSDN</title>
      <link>http://rsdn.org</link>
    </image>
    <lastBuildDate>Thu, 23 Apr 2026 08:11:52 GMT</lastBuildDate>
    <ttl>5</ttl>
	<item>
		<title>Дерево с O(1) доступом по ID</title>
		<link>http://rsdn.org/Forum/alg/9042075.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/9042075</guid>
		<comments>http://rsdn.org/Forum/alg/9042075</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9042075</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9042075</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9042075</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;У меня есть дерево. То есть нулевой узел с дочерними узлами и каждый дочерний содержит свои дочерние и так далее&lt;br /&gt;
При создании ноды пользователю отдается unsigned int ID. И вот по этому ID нужен доступ за константное время. Идеально было бы как-то отразить дерево в вектор и чтоб ID был номером элемента в векторе. Но как-то криво выходит. Две структуры для одного и того же. Криво.&lt;br /&gt;
Еще вариант, что ID &amp;mdash; это собственно сам указатель, но не нравится он мне&lt;br /&gt;
Какие есть варианты?&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Fri, 09 Jan 2026 09:47:32 GMT</pubDate>
		
			<author>Hоmunculus &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>39</slash:comments>
		
	</item>

	<item>
		<title>Как лучше сжать данные разрешенных ходов для игры?</title>
		<link>http://rsdn.org/Forum/alg/9019249.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/9019249</guid>
		<comments>http://rsdn.org/Forum/alg/9019249</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9019249</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9019249</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9019249</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Начало тут: &lt;a class=" tips m" href="https://rsdn.org/forum/etude/9018754.flat" rel="#sZHEFX" target="_blank" title="Игра Мельница и хитрый знахарь"&gt;https://rsdn.org/forum/etude/9018754.flat&lt;div class="tooltip" id="sZHEFX"&gt;Автор: Shmj&lt;br /&gt;Дата: 15.11 12:34&lt;/div&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
В общем то классическая мельница 3*3, но с условием запрета обратного хода (т.е. походив фишкой, потом не можешь отменить/пойти взад этой последней фишкой).&lt;br /&gt;
&lt;br /&gt;
Интересно что если нет этого условия &amp;mdash; список состояний (и разрешенных ходов из данного состояния) в простом массиве занимает около 180 Кб. &amp;mdash; что норм. Т.е. даже об этом не думал, чтобы как-то сжимать.&lt;br /&gt;
&lt;br /&gt;
А вот если добавить правило запрета обратного хода &amp;mdash; то чтобы правильно походило (с учетом запретов себя и противника) &amp;mdash; полный список всех состояний и данных куда можно ходить &amp;mdash; уже занимает &lt;b&gt;15.9 MB&lt;/b&gt;, что проблема. Т.е. уже загружать &amp;mdash; быстро не откроется...&lt;br /&gt;
&lt;br /&gt;
Что можно сделать. Очевидное &amp;mdash; это симметрия. Левая и правая клеточка равнозначны. А вот верх и низ &amp;mdash; уже нет, т.к. там зависит от игрока.&lt;br /&gt;
&lt;br /&gt;
Т.е. за счет симметричности левого и правого &amp;mdash; можно ужать в 2 раза.&lt;br /&gt;
&lt;br /&gt;
Далее, я пишут в таком виде:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;{
  red: [A1, A2, A3],
  black: [B1, B2, B3],
  redForbidden: &lt;span class='kw'&gt;null&lt;/span&gt;,
  blackForbidden: &lt;span class='kw'&gt;null&lt;/span&gt;,
  transitions: [
    [B1, C1],
    [B2, C1],
    [B2, C2],
    [B2, C3],
    [B3, C3],
  ],
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
т.е. текущее состояние и transitions &amp;mdash; разрешенные переходы.&lt;br /&gt;
&lt;br /&gt;
Но состояний то вроде не много, менее 16 тыс., значит влезет в 2 байта. Первые 4 поля значит &amp;mdash; 8 байт с лихвой. Ну и преходы.&lt;br /&gt;
&lt;br /&gt;
Еще вариант вычислять на лету, но будет нагружать слабые телефоны.&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Sun, 16 Nov 2025 19:16:37 GMT</pubDate>
		
			<author>Shmj &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>31</slash:comments>
		
	</item>

	<item>
		<title>задача о таблетках</title>
		<link>http://rsdn.org/Forum/alg/9012187.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/9012187</guid>
		<comments>http://rsdn.org/Forum/alg/9012187</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9012187</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9012187</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9012187</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Возраст, увы, у меня почтенный, а поэтому приходится ежедневно принимать таблетки.&lt;br /&gt;
&lt;br /&gt;
Таблеток N видов. Принимаю я ровно 1 таблетку каждого вида в день (это действительно так).&lt;br /&gt;
&lt;br /&gt;
Таблетки в блистерах или флаконах. В одних блистерах 10 штук, в других 15, во флаконах иные значения.&lt;br /&gt;
&lt;br /&gt;
Когда блистер или флакон заканчивается, я заменяю его на новый.&lt;br /&gt;
&lt;br /&gt;
И вот сегодня одновременно закончились 2 разных блистера. Не помню, было ли такое когда-то раньше.&lt;br /&gt;
&lt;br /&gt;
Отсюда задача &amp;mdash; по исходному набору блистеров/флаконов найти день, когда одновременно закончатся хотя бы 2 блистера/флакона. Разумеется, у меня достаточно новых блистеров/флаконов.&lt;br /&gt;
&lt;br /&gt;
Вариант 1. В день X я начинаю прием, все блистеры/флаконы полные.&lt;br /&gt;
&lt;br /&gt;
Вариант 2. В день X я начинаю прием, но блистеры/флаконы неполные, в каждом осталось свое количество таблеток.&lt;br /&gt;
&lt;br /&gt;
Найти день Y, в который закончатся хотя бы 2 блистера/флакона. Для определенности в течение некоторого срока, скажем, года. Если такого не будет, ответ &amp;mdash; нет.&lt;br /&gt;
&lt;br /&gt;
Программистское решение. Оно тривиально для обоих вариантов. Просто в цикле делаем T[i]-- каждому блистеру/флакону и смотрим, не получили ли мы хотя бы два нуля на данной итерации цикла. В общем, точная калька того, что я делаю в реальности.&lt;br /&gt;
&lt;br /&gt;
Математическое решение для варианта 1. Оно тоже простое &amp;mdash; нужно взять минимальное из НОК для пар блистеров/флаконов. Если, скажем, в одном блистере 10 таблеток,  в другом 15, то НОК == 30, и через 30 дней я полностью съем 3 блистера первого лекарства и 2 &amp;mdash; второго.&lt;br /&gt;
&lt;br /&gt;
Существует ли математическое решение для варианта 2 ?&lt;br /&gt;
&lt;br /&gt;
Не надо думать, что вариант 2 получился из варианта 1 спустя сколько-то дней, то есть начал я с полных блистеров/флаконов. Нет. Просто в день X в каждом блистере/флаконе Ti таблеток, а как их количества стали такими &amp;mdash; не обсуждается.&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Thu, 30 Oct 2025 13:20:30 GMT</pubDate>
		
			<author>Pavel Dvorkin &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>

	<item>
		<title>Нечеткое сравнение слов.</title>
		<link>http://rsdn.org/Forum/alg/9006743.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/9006743</guid>
		<comments>http://rsdn.org/Forum/alg/9006743</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9006743</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9006743</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9006743</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Такая задача.&lt;br /&gt;
&lt;br /&gt;
Есть набор из названий брендов (озвучено &amp;mdash; порядка миллиона).&lt;br /&gt;
Есть входная строка, например "планшет Samsung"&lt;br /&gt;
&lt;br /&gt;
Необходимо без ИИ сопоставить бренд из словаря этой строке.&lt;br /&gt;
Задача выглядит простой для решения &amp;mdash; произвести токенизацию строки и затем поиск в хеш-таблице, где хранятся бренды.&lt;br /&gt;
&lt;br /&gt;
Затем даётся дополнительное ТЗ &amp;mdash; необходимо сделать поиск нечётким, т.е. с возможными опечатками.&lt;br /&gt;
&lt;br /&gt;
И сделать поиск эффективным, т.е. придумать такой алгоритм, который не стал бы последовательно перебирать все слова используя, допустим, стороннюю библиотеку поиска дистанции между словами (есть полно готовых таких алгоритмов).&lt;br /&gt;
&lt;br /&gt;
У меня есть решение, но мне банально интересно, к какой сложности относятся подобные задачи? ))&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Fri, 17 Oct 2025 01:22:18 GMT</pubDate>
		
			<author>vdimas &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>23</slash:comments>
		
	</item>

	<item>
		<title>Найден способ считать кратчайшие пути быстрее Дейкстры?</title>
		<link>http://rsdn.org/Forum/alg/8976541.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8976541</guid>
		<comments>http://rsdn.org/Forum/alg/8976541</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8976541</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8976541</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8976541</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;На днях прошла новость: &lt;a class="m" href="https://arxiv.org/abs/2504.17033" target="_blank"&gt;Breaking the Sorting Barrier for Directed Single-Source Shortest Paths&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Классический Дейкстра устроен так: мы храним вершины в приоритетной очереди и итеративно выбираем ближайшую, проверяя рёбра и обновляя расстояния, если путь через текущее ребро короче. Узкое место тут как раз в необходимости постоянно поддерживать упорядоченность большой очереди вершин.&lt;br /&gt;
&lt;br /&gt;
Из-за этой упорядоченности и возник так называемый «барьер сортировки». Считалось, что перебить его невозможно. &lt;br /&gt;
&lt;br /&gt;
Но вот, что сделали авторы тут: &lt;br /&gt;
&lt;br /&gt;
1. Делим задачу на подзадачи с ограничением по максимальному расстоянию, до которого считаем пути.&lt;br /&gt;
2. Сжимаем «фронтир»: из вершин на границе уже найденных путей оставляем только небольшое число ключевых (пивотов).&lt;br /&gt;
3. Рекурсивно обрабатываем только пивоты и их ближайшие вершины, избегая полной сортировки.&lt;br /&gt;
4. Для остальных вершин добиваем расстояния несколькими шагами по всем рёбрам (метод в духе Беллмана–Форда).&lt;br /&gt;
5. Повторяем процесс, постепенно уточняя расстояния до всех вершин.&lt;br /&gt;
&lt;br /&gt;
Итого, сложность Дейкстры – O(m + n log n), а BMSSP – O(m log^(2/3) n). Во втором случае логарифм растет заметно медленнее. &lt;br /&gt;
&lt;br /&gt;
Что это все значит для ML? Может показаться, что ничего. Но на самом деле алгоритм Дейкстры вездесущий. Например: &lt;br /&gt;
&lt;br /&gt;
– В графовых нейросетях на основе расстояний между вершинами часто вычисляются самые важные фичи. &lt;br /&gt;
– Для всяких ML-алгоритмов для логистики просто незаменимо. &lt;br /&gt;
– И даже в RL есть применение. Например, при обучении роботов среда может быть представлена как граф состояний, в котором оптимальная политика – это кратчайший путь.&lt;/p&gt;&lt;/blockquote&gt;
Отсюда: &lt;a class="telegram" data-message-id="/data_secrets/7587" href="https://t.me/data_secrets/7587"&gt;Исследователи из Пекина предложили алгоритм поиска кратчайших путей, который обходит Дейкстру&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Здесь основная идея &amp;mdash; это гибрид из алгоритма Дейкстры и алгоритма Беллмана-Форда. &lt;br /&gt;
&lt;br /&gt;
Но если я все правильно понял, то в общем случае&lt;br /&gt;
*   Новый алгоритм: O(m log²/³ n)&lt;br /&gt;
*   Алгоритм Дейкстры: O(m + n log n)&lt;br /&gt;
&lt;br /&gt;
1.  Разреженные графы (Sparse Graphs): В таких графах количество рёбер m сопоставимо с количеством вершин n, то есть m ≈ n.&lt;br /&gt;
    *   Новый алгоритм: O(n log²/³ n)&lt;br /&gt;
    *   Алгоритм Дейкстры: O(n + n log n) = O(n log n)&lt;br /&gt;
    *   Вывод: В этом случае n log²/³ n растёт медленнее, чем n log n, поэтому новый алгоритм быстрее. Именно это и является его главным достижением, как указано в документе.&lt;br /&gt;
&lt;br /&gt;
2.  Плотные графы (Dense Graphs): В таких графах количество рёбер m близко к максимально возможному, то есть m приближается к n².&lt;br /&gt;
    *   Новый алгоритм: O(n² log²/³ n)&lt;br /&gt;
    *   Алгоритм Дейкстры: O(n² + n log n) = O(n²)&lt;br /&gt;
    *   Вывод: В этом случае n² растёт медленнее, чем n² log²/³ n. Поэтому на плотных графах алгоритм Дейкстры будет быстрее.&lt;br /&gt;
&lt;br /&gt;
Получается что новый алгоритм эффективнее алгоритма Дейкстры на разреженных графах. Однако для плотных графов классический алгоритм Дейкстры остаётся более быстрым решением.&lt;br /&gt;
&lt;br /&gt;
Так?&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Mon, 11 Aug 2025 19:51:32 GMT</pubDate>
		
			<author>BlackEric &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Алгоритмы и структуры данных</title>
		<link>http://rsdn.org/Forum/alg/8970378.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8970378</guid>
		<comments>http://rsdn.org/Forum/alg/8970378</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8970378</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8970378</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8970378</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://ru.algorithmica.org/cs/" target="_blank"&gt;https://ru.algorithmica.org/cs/&lt;/a&gt;&lt;br /&gt;
На все случаи жизни... &lt;br /&gt;
И даже математика и даже геометрия&lt;br /&gt;
&lt;br /&gt;
Написано в конце:&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;В этот раздел с течением времени будут переноситься статьи с алгокода, емакса и старой алгоритмики.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Sun, 27 Jul 2025 04:18:16 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Хранилище интервалов</title>
		<link>http://rsdn.org/Forum/alg/8970278.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8970278</guid>
		<comments>http://rsdn.org/Forum/alg/8970278</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8970278</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8970278</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8970278</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Всем привет.&lt;br /&gt;
Нужна помощь коллег.&lt;br /&gt;
&lt;br /&gt;
Я ищу структуру данных, которая хранит в себе диапазоны, задаваемые координатой начала и конца, и поддерживает операции&lt;br /&gt;
  * добавить диапазон&lt;br /&gt;
  * удалить диапазон&lt;br /&gt;
  * Найти все диапазоны, содержащие некоторую точку.&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
Хотелось бы, чтобы эти операции работали быстрее, чем за линейное время.&lt;br /&gt;
Гугл предлагает дерево отрезков, но, если я правильно понимаю, добавление и удаление там в худшем случае будет как раз линейным.&lt;br /&gt;
&lt;br /&gt;
В общем, нужна помощь коллективного разума&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Sat, 26 Jul 2025 18:13:49 GMT</pubDate>
		
			<author>DTF &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>21</slash:comments>
		
	</item>

	<item>
		<title>Трансформация дерева с простыми операциями</title>
		<link>http://rsdn.org/Forum/alg/8944239.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8944239</guid>
		<comments>http://rsdn.org/Forum/alg/8944239</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8944239</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8944239</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8944239</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Привет&lt;br /&gt;
Пытаюсь починить парсер нашего рабочего доморощенного язычка и внезапно понял что мозг атрофировался за годы роботы в кровавом энтерпрайсе.&lt;br /&gt;
&lt;br /&gt;
Итак, задача &amp;mdash; есть дерево в котором два типа нодов &amp;mdash; листья со значениями и узлы с операциями. Пусть операций два типа &amp;mdash; сложение и умножение.&lt;br /&gt;
Надо заполнить структуру данных, которая содержит группы операций умножения, разделенные группами сложения, это неоходимо для заполнения другой структуры данных, которая потом отправится на удаленный сервак.&lt;br /&gt;
&lt;br /&gt;
Т.е. выражение, распаршеное в дерево:&lt;br /&gt;
(a+b)*(c+d)*e должно превратиться в такое a*c*e+a*d*e+b*c*e+b*d*e.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;      *
     / \
    *   e
   / \
  +   +
 / \ / \
a  b c  d&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
в&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;                        +
              ___________|___________
             /                       \
            +                         +
         ___|___                   ___|___
        /       \                 /       \
      (*       (* )            (* )      (* )
     /   \    /    \           /    \    /    \
   (* )  e   (* )  e         (* )   e  (* )   e
   /  \       /  \           /  \      /  \
  a    c     a    d         b    c    b    d&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Какие идеи?&lt;br /&gt;
Спасибо.&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Wed, 04 Jun 2025 11:02:23 GMT</pubDate>
		
			<author>Flem1234 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Карацюба или Фюрер?</title>
		<link>http://rsdn.org/Forum/alg/8935187.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8935187</guid>
		<comments>http://rsdn.org/Forum/alg/8935187</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8935187</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8935187</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8935187</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Здравствуйте!&lt;br /&gt;
&lt;br /&gt;
Есть такие алгоритмы для умножения чисел:&lt;br /&gt;
Алгоритм Фюрера &amp;mdash; &lt;a class="wikipedia m" href="https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A4%D1%8E%D1%80%D0%B5%D1%80%D0%B0" target="_blank"&gt;https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A4%D1%8E%D1%80%D0%B5%D1%80%D0%B0&lt;/a&gt;&lt;br /&gt;
Алгоритм Карацубы &amp;mdash; &lt;a class="wikipedia m" href="https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%B0%D1%80%D0%B0%D1%86%D1%83%D0%B1%D1%8B" target="_blank"&gt;https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%B0%D1%80%D0%B0%D1%86%D1%83%D0%B1%D1%8B&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Какой из них лучше использовать?&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Sat, 17 May 2025 14:44:04 GMT</pubDate>
		
			<author>Marty &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>15</slash:comments>
		
	</item>

	<item>
		<title>Сбор теннисных мячей на корте</title>
		<link>http://rsdn.org/Forum/alg/8933209.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8933209</guid>
		<comments>http://rsdn.org/Forum/alg/8933209</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8933209</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8933209</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8933209</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Тут играю в теннис большой и стало интересно как оптимально быстро собирать мячи на своей половине корта.&lt;br /&gt;
Они могут быть раскиданы хаотично и разной плотностью. Визуально вроде задача комивояжера, но расстояния между мячами неизвестно и вот если к примеру сделать робота по сбору мячей, то как ему выстроить оптимально маршрут для сбора, чтобы собрать мячи быстрее человека?  в сетке мячей 50, пару сеток надо собирать, но часть на другой половине корта&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Tue, 13 May 2025 08:46:06 GMT</pubDate>
		
			<author>merge &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>11</slash:comments>
		
	</item>

	<item>
		<title>Что-то получше Левенштейна</title>
		<link>http://rsdn.org/Forum/alg/8922732.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8922732</guid>
		<comments>http://rsdn.org/Forum/alg/8922732</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8922732</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8922732</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8922732</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;В продолжении соседней темы&lt;br /&gt;
&lt;br /&gt;
Вроде расстояние Л. является стандартом но для неточного поиска както оно плохо подходит&lt;br /&gt;
потому что если у нас есть строки&lt;br /&gt;
&lt;br /&gt;
xyz&lt;br /&gt;
abc123456&lt;br /&gt;
&lt;br /&gt;
и мы ищем по ним запросом &lt;br /&gt;
&lt;br /&gt;
abc&lt;br /&gt;
&lt;br /&gt;
то Л. даст меньшую длину для xyz чем для abc123456&lt;br /&gt;
хотя abc123456 содержит запрос abc и выглядит более подходящей&lt;br /&gt;
&lt;br /&gt;
т.е. в идеале нужен метрический алгорим который будет искать подстроку, которая ближайшая к запросу&lt;br /&gt;
&lt;br /&gt;
ЖПТ мне сходу написал просто Левенштейна который двигает ту строку, что короче, по той, которая длиннее и ищет минимальное дистанцию, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;public static int&lt;/span&gt; SubstringAwareLevenshtein(&lt;span class='kw'&gt;string&lt;/span&gt; a, &lt;span class='kw'&gt;string&lt;/span&gt; b)
{
    &lt;span class='kw'&gt;int&lt;/span&gt; minDist = &lt;span class='kw'&gt;int&lt;/span&gt;.MaxValue;

    &lt;span class='com'&gt;// Сравниваем a со всеми подстроками b&lt;/span&gt;
    &lt;span class='kw'&gt;for&lt;/span&gt; (&lt;span class='kw'&gt;int&lt;/span&gt; i = 0; i &amp;lt;= b.Length - a.Length; i++)
    {
        &lt;span class='kw'&gt;string&lt;/span&gt; sub = b.Substring(i, a.Length);
        &lt;span class='kw'&gt;int&lt;/span&gt; dist = ComputeLevenshteinDistance(a, sub);
        &lt;span class='kw'&gt;if&lt;/span&gt; (dist &amp;lt; minDist)
            minDist = dist;
    }

    &lt;span class='com'&gt;// Сравниваем b со всеми подстроками a&lt;/span&gt;
    &lt;span class='kw'&gt;for&lt;/span&gt; (&lt;span class='kw'&gt;int&lt;/span&gt; i = 0; i &amp;lt;= a.Length - b.Length; i++)
    {
        &lt;span class='kw'&gt;string&lt;/span&gt; sub = a.Substring(i, b.Length);
        &lt;span class='kw'&gt;int&lt;/span&gt; dist = ComputeLevenshteinDistance(b, sub);
        &lt;span class='kw'&gt;if&lt;/span&gt; (dist &amp;lt; minDist)
            minDist = dist;
    }

    &lt;span class='kw'&gt;return&lt;/span&gt; minDist;
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
это уже лучше, но не факт что лучшее совпадение равно длине запроса, а самое хреновое что Л итак медленный а тут еще в M-N раз больше его вызывать нада&lt;br /&gt;
&lt;br /&gt;
мне пришла другая но незаконченная идея:&lt;br /&gt;
суть ее в том что мы сначала находим подстроку которая содержит все символы запроса, а потом левенштейним ее с запросом&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;    &lt;span class='kw'&gt;public int&lt;/span&gt; ComputeDistance(&lt;span class='kw'&gt;string&lt;/span&gt; p, &lt;span class='kw'&gt;string&lt;/span&gt; t)
    {
        &lt;span class='kw'&gt;if&lt;/span&gt;(p.Length &amp;gt; t.Length)
        {
            &lt;span class='kw'&gt;var&lt;/span&gt; x = p;
            p = t;
            t = x;
        }

        &lt;span class='kw'&gt;var&lt;/span&gt; d = 0;

        &lt;span class='kw'&gt;var&lt;/span&gt; min = &lt;span class='kw'&gt;int&lt;/span&gt;.MaxValue;
        &lt;span class='kw'&gt;var&lt;/span&gt; max = &lt;span class='kw'&gt;int&lt;/span&gt;.MinValue;

        &lt;span class='kw'&gt;for&lt;/span&gt;(&lt;span class='kw'&gt;int&lt;/span&gt; i = 0; i &amp;lt; p.Length; i++)
        {
            &lt;span class='kw'&gt;var&lt;/span&gt; j = t.IndexOf(p[i]);

            &lt;span class='kw'&gt;if&lt;/span&gt;(j != -1)
            {
                &lt;span class='kw'&gt;if&lt;/span&gt;(j &amp;lt; min)
                    min = j;
    
                &lt;span class='kw'&gt;if&lt;/span&gt;(j &amp;gt; max)
                    max = j;
            } 
            &lt;span class='kw'&gt;else&lt;/span&gt;
            {

                &lt;span class='com'&gt;//  непонятно что тут делать&lt;/span&gt;
            }
        }


        &lt;span class='kw'&gt;return&lt;/span&gt; ComputeLevenshteinDistance(t.Substing(min, max - min), p);
    }&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
но если символ не найден, то хрен его знает что делать,&lt;br /&gt;
всякие тупые "+ чтото" не работают потому что с ними функция не получается метрической&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Wed, 16 Apr 2025 19:39:56 GMT</pubDate>
		
			<author>Barbar1an &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Векторизация слов для быстрого поиска похожих</title>
		<link>http://rsdn.org/Forum/alg/8914925.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8914925</guid>
		<comments>http://rsdn.org/Forum/alg/8914925</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8914925</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8914925</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8914925</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;нужно сделать поисковый индекс&lt;br /&gt;
чтобы можно был найти "cde" в "abcdefgh" без тупого перебора&lt;br /&gt;
&lt;br /&gt;
по идее это решается вектроризацией которая в ИИ применяется&lt;br /&gt;
&lt;br /&gt;
но как точно это сделать не знаю&lt;br /&gt;
&lt;br /&gt;
потому что если букву просто будут комопнентами ветора, то abd будет ближе к abc, чем ab&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Tue, 25 Mar 2025 00:44:48 GMT</pubDate>
		
			<author>Barbar1an &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>16</slash:comments>
		
	</item>

	<item>
		<title>название алгоритма сортировки</title>
		<link>http://rsdn.org/Forum/alg/8914320.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8914320</guid>
		<comments>http://rsdn.org/Forum/alg/8914320</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8914320</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8914320</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8914320</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;пробую тут заниматься с ребенком программизмом и неожиданно для себя обнаружил, что не помню как называется данный способ сортировки&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;for&lt;/span&gt; i &lt;span class='kw'&gt;in&lt;/span&gt; range(n): 
    &lt;span class='kw'&gt;for&lt;/span&gt; j &lt;span class='kw'&gt;in&lt;/span&gt; range(i + 1,n):
        &lt;span class='kw'&gt;if&lt;/span&gt; a[i] &amp;gt; a[j]:
           v = a[i]
           a[i] = a[j]
           a[j] = v&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
?&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Sun, 23 Mar 2025 13:53:22 GMT</pubDate>
		
			<author>system.console &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>16</slash:comments>
		
	</item>

	<item>
		<title>Транзакция с помощью рандома и задержки</title>
		<link>http://rsdn.org/Forum/alg/8914215.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8914215</guid>
		<comments>http://rsdn.org/Forum/alg/8914215</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8914215</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8914215</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8914215</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Ну давайте с простого. Имеем:&lt;br /&gt;
&lt;br /&gt;
1. Функция чтения (ну пусть атомарно).&lt;br /&gt;
2. Функция записи (так же атомарно).&lt;br /&gt;
3. ГСЧ.&lt;br /&gt;
4. Функция задержки времени.&lt;br /&gt;
&lt;br /&gt;
Нужно:&lt;br /&gt;
&lt;br /&gt;
1. Считать число (изначально 0).&lt;br /&gt;
2. Увеличить число на 1.&lt;br /&gt;
3. Записать число.&lt;br /&gt;
&lt;br /&gt;
Но при этом нужно чтобы все это корректно работало в многопоточной среде. Т.е. сколько было вызовов чтения/записи (ну или потоков, который выполнили чтение а затем конечную запись) &amp;mdash; столько должно быть установлено значение счетчика.&lt;br /&gt;
&lt;br /&gt;
Добавлю что считывать и записывать &amp;mdash; можно произвольное значение, а не только числа.&lt;br /&gt;
&lt;br /&gt;
Так же можно сузить определение гарантированности &amp;mdash; считаем что GUID т.е. 16 случайных байт &amp;mdash; гарантированно уникальный, что второй такой же не будет создан за время существования Вселенной.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Можно ли как-то гарантировать, не имея мьютексов и пр. блокировок &amp;mdash;  а только 4 функции из списка?&lt;/i&gt;&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Sun, 23 Mar 2025 09:10:04 GMT</pubDate>
		
			<author>Shmj &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>13</slash:comments>
		
	</item>

	<item>
		<title>Обновление дерева</title>
		<link>http://rsdn.org/Forum/alg/8906933.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8906933</guid>
		<comments>http://rsdn.org/Forum/alg/8906933</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8906933</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8906933</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8906933</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Есть иерархия компании с сотрудниками в базе данных.&lt;br /&gt;
Каждый день некое приложение берет из файла данные в таком же по сути виде, просто плоские и надо обновить структуру в базе не удалением вставкой, а только где есть изменения.&lt;br /&gt;
Новые добавить\удалить иза базы, изменения применить. Какие есть эффективные алгоритмы получения дифа между деревьями?&lt;br /&gt;
&lt;br /&gt;
Вид данных. То есть иерархия может быть с разными уровнями вложенности&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Отдел 1&lt;br /&gt;
    Сотрудник А&lt;br /&gt;
      Отдел 2&lt;br /&gt;
        Сотрудник Б&lt;br /&gt;
      Отдел 3&lt;br /&gt;
        Сотрудник В&lt;br /&gt;
         Отдел 4&lt;br /&gt;
           Сотрудник Г&lt;br /&gt;
  Отдел 5&lt;br /&gt;
    Сотрудник Д&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Tue, 04 Mar 2025 13:57:04 GMT</pubDate>
		
			<author>merge &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>а такая вот задачка</title>
		<link>http://rsdn.org/Forum/alg/8889365.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8889365</guid>
		<comments>http://rsdn.org/Forum/alg/8889365</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8889365</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8889365</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8889365</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;у функции не входе параметры&lt;br /&gt;
ф(а, б, ц, д)&lt;br /&gt;
а &amp;mdash; до какого числа генерировать&lt;br /&gt;
б &amp;mdash; сколько чисел&lt;br /&gt;
ц &amp;mdash; минимальное число&lt;br /&gt;
д &amp;mdash; максимальное число.&lt;br /&gt;
собственно задача сгенерировать б случайных чисел, попадающих под критерии ц и д, причем чтоб было нормальное распределение.&lt;br /&gt;
забыл написать &amp;mdash; чтоб их сумма была равна а&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Tue, 28 Jan 2025 13:07:17 GMT</pubDate>
		
			<author>undo75 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>13</slash:comments>
		
	</item>

	<item>
		<title>метод деления пополам в больших синтаксических выражениях</title>
		<link>http://rsdn.org/Forum/alg/8884738.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8884738</guid>
		<comments>http://rsdn.org/Forum/alg/8884738</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8884738</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8884738</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8884738</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;это только первый этап алгоритмов, в так называемом скетче "как читать нейронки" &lt;br /&gt;
&lt;br /&gt;
    Методология была разработана и применена при анализе регекспоподобніх вьіражений размером до 1.5MB .&lt;br /&gt;
 В данном методе присутствуют три ленты. В реальности их может быть и больше.&lt;br /&gt;
&lt;br /&gt;
0 лента данных (корпус)&lt;br /&gt;
1 лента синтаксического выражения &lt;br /&gt;
2 лента кода &lt;br /&gt;
&lt;br /&gt;
  Не смотря на то, что в данном случае это было провисание алгоритма, метод может применяться и для других локализаций, потому логичнее ввести термин, путь будет симптом. &lt;br /&gt;
далее задекларированные ленты &amp;mdash; выражением.&lt;br /&gt;
  &lt;br /&gt;
  Попытаемся применить к выражению метод деления пополам. Очевидным становится то, что на определенный момент времени t позиции на лентах будут p0 p1 p2, очевидным становится то, что p[n] (в нашем случае кода) &lt;br /&gt;
имеет большую вариативность, чем больше размер ленты tape[n]. вводим понятие консистентность выржанеия consist(expr). консистентность выражается в том, что его определяет&lt;br /&gt;
переход от элемента к элементу в ленте минимального размера. tape tmin=min_tape(expr). Таким образом, иы получаем детерминированное консистентное отношение между p0, p2, p3. Где pn E pn{1-tapeN},&lt;br /&gt;
&lt;br /&gt;
после консистентно корректного деления пополам, мы определяем в какой из частей выражения проявляется симптом, анализируя впоследствии части с симптоматикой, до моментьа локализации. &lt;br /&gt;
 &lt;br /&gt;
дальше можно нужно описать тейпизацич кода.&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Sun, 19 Jan 2025 07:19:38 GMT</pubDate>
		
			<author>ботаныч &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>

	<item>
		<title>Про канонический алгоритм парсинга Markdown и подобного</title>
		<link>http://rsdn.org/Forum/alg/8881900.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8881900</guid>
		<comments>http://rsdn.org/Forum/alg/8881900</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8881900</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8881900</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8881900</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Вроде классически для разбора таких текстов как Markdown применяют типа конечный автомат:&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								Скрытый текст			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;TextSpan markdown2TextSpan(String markdownText) {
  &lt;span class='kw'&gt;final&lt;/span&gt; spans = &amp;lt;TextSpan&amp;gt;[];
  &lt;span class='kw'&gt;final&lt;/span&gt; buffer = StringBuffer();

  &lt;span class='kw'&gt;int&lt;/span&gt; asteriskCount = 0;
  bool isItalic = &lt;span class='kw'&gt;false&lt;/span&gt;;
  bool isBold = &lt;span class='kw'&gt;false&lt;/span&gt;;

  &lt;span class='kw'&gt;for&lt;/span&gt; (&lt;span class='kw'&gt;int&lt;/span&gt; i = 0; i &amp;lt; markdownText.length; i++) {
    &lt;span class='kw'&gt;final char&lt;/span&gt; = markdownText[i];

    &lt;span class='kw'&gt;if&lt;/span&gt; (&lt;span class='str'&gt;"*"&lt;/span&gt; == &lt;span class='kw'&gt;char&lt;/span&gt;) {
      &lt;span class='kw'&gt;if&lt;/span&gt; (asteriskCount &amp;lt; 2) {
        asteriskCount++;
        &lt;span class='kw'&gt;continue&lt;/span&gt;;
      }

      buffer.write(&lt;span class='kw'&gt;char&lt;/span&gt;);
      &lt;span class='kw'&gt;continue&lt;/span&gt;;
    }

    &lt;span class='kw'&gt;if&lt;/span&gt; (asteriskCount &amp;gt; 0) {
      &lt;span class='kw'&gt;if&lt;/span&gt; (buffer.isNotEmpty) {
        spans.add(_buildTextSpan(buffer.toString(), isItalic, isBold));
      }

      &lt;span class='kw'&gt;if&lt;/span&gt; (1 ==  asteriskCount) isItalic = !isItalic;
      &lt;span class='kw'&gt;if&lt;/span&gt; (2 ==  asteriskCount) isBold = !isBold;

      buffer.clear();
      asteriskCount = 0;
    }

    buffer.write(&lt;span class='kw'&gt;char&lt;/span&gt;);
  }

  &lt;span class='kw'&gt;if&lt;/span&gt; (buffer.isNotEmpty) {
    spans.add(_buildTextSpan(buffer.toString(), isItalic, isBold));
  }

  &lt;span class='kw'&gt;return&lt;/span&gt; TextSpan(children: spans);
}&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
Но это не точно, голова сейчас не работает &amp;mdash; могут быть ошибки тут.&lt;br /&gt;
&lt;br /&gt;
Дал задание GPT &amp;mdash; он сначала решил с помощью хитровумных регулярных выражений. Минус такого подхода &amp;mdash; регулярки сложно поддерживать, если будут добавляться новые теги. В таком алгоритме как у меня все намного проще.&lt;br /&gt;
&lt;br /&gt;
Попросил без регулярных выражений &amp;mdash; он начал как бы заглядывать вперед, делать i+1 и т.д. Т.е. не понял как сделать проще. Когда попросил без i+1  &amp;mdash; то он такого наворотил, раз в 5 больше кода и ошибку там найти стало не реально.&lt;br /&gt;
&lt;br /&gt;
Вопрос у меня такой &amp;mdash; где-то описан этот алгоритм парсинга? Узнаете ли вы его?&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Mon, 13 Jan 2025 10:26:25 GMT</pubDate>
		
			<author>Shmj &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>16</slash:comments>
		
	</item>

	<item>
		<title>Вероятность коллизий хешей</title>
		<link>http://rsdn.org/Forum/alg/8863219.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8863219</guid>
		<comments>http://rsdn.org/Forum/alg/8863219</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8863219</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8863219</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8863219</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Добрый день.&lt;br /&gt;
&lt;br /&gt;
Есть где-то документация как можно посчитать вероятность коллизий хешей на произвольных данных? В смысле, что их не будут специально ломать, а использовать для проверки на уникальность.&lt;br /&gt;
Или чему она равна?&lt;br /&gt;
Особенно интересуют Md5, Sha-1, Sha-256.&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Fri, 06 Dec 2024 13:51:06 GMT</pubDate>
		
			<author>BlackEric &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Алгоритм анонимного и проверяемого голосования</title>
		<link>http://rsdn.org/Forum/alg/8830518.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/8830518</guid>
		<comments>http://rsdn.org/Forum/alg/8830518</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8830518</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8830518</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8830518</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Вопрос такой, может кто в теме.&lt;br /&gt;
&lt;br /&gt;
Уже придумали ли алгоритм, чтобы:&lt;br /&gt;
&lt;br /&gt;
1. Соблюдалась анонимность. Т.е. чтобы никто не мог узнать за кого проголосовал тот или иной человек, желательно чтобы даже имеющие доступ к базе. Иначе могут быть расправы. Ну ОК, пусть имеющие доступ к баз знают, но хотя бы соседи чтобы не могли узнать.&lt;br /&gt;
&lt;br /&gt;
2. Была возможность проверить свой голос, чтобы знать правильно ли он учтен. Но при этом желательно чтобы ты мог одурачить тех, кто требует от тебя доказательств что ты проголосовал за нужного кандидата (т.е., к примеру, если тебе дают денег &amp;mdash; ты на телефоне показал &amp;mdash; вот я проголосовал за Кривдина, давайте деньги &amp;mdash; а сам проголосовал за Правдина). Т.е. чтобы ты мог проверить но так же и мог само одурачить других &amp;mdash; тогда подкуп не имеет смысла.&lt;br /&gt;
&lt;br /&gt;
3. Была возможность как-то проконтролировать общую картину &amp;mdash; знать число избирателей, знать что нет мертвых душ &amp;mdash; т.е. чтобы была общедоступная инфа по адресам &amp;mdash; какой номер дома и квартира в принципе голосовала а кто не голосовал. Тогда можно проверить &amp;mdash; вот, я не голосовал а меня записали. Или проверить &amp;mdash; вот, у нас на улице 50 домов а в списке почему-то 500.&lt;br /&gt;
&lt;br /&gt;
4. Была бы возможность вычислить итоговый результат, не зная результата каждого отдельного человека (кроме себя самого). Вроде есть алгоритмы.&lt;br /&gt;
&lt;br /&gt;
Есть ли такое? Решены ли данные вопросы?&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Sat, 12 Oct 2024 18:55:32 GMT</pubDate>
		
			<author>Shmj &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>20</slash:comments>
		
	</item>
</channel>
</rss>
