<?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>Wed, 29 Apr 2026 13:35:32 GMT</lastBuildDate>
    <ttl>5</ttl>
	<item>
		<title>Анонимное проверяемое голосование - есть ли решение?</title>
		<link>http://rsdn.org/Forum/alg/9083265.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/alg/9083265</guid>
		<comments>http://rsdn.org/Forum/alg/9083265</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9083265</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9083265</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9083265</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Вопрос глобальной значимости &amp;mdash; нашли ли решение, чтобы голосование было и анонимным и проверяемым?&lt;br /&gt;
&lt;br /&gt;
Как это выглядит с точки зрения простого избирателя? Т.е. что ему нужно делать, чтобы лично и проголосовать и потом проверить. Да еще так, чтобы начальник не мог с ним войти в онлайн-кабинет (или куда там) и посмотреть правильно ли проголосовал (не крыса ли).&lt;br /&gt;
&lt;br /&gt;
Вроде пишут что нашли. Но сколько я не проверял &amp;mdash; всегда была дыра. И гомоморфное шифрование и слепая подпись &amp;mdash; а в итоге все-равно фига получается.&lt;br /&gt;
&lt;br /&gt;
Просто нужно одновременно как бы противоречивые требования:&lt;br /&gt;
&lt;br /&gt;
1. Чтобы тебя не могли взять за яйца, т.е. чтобы начальник не мог проверить за кого ты проголосовал.&lt;br /&gt;
2. При этом чтобы ты лично проверить себя таки мог.&lt;br /&gt;
3. Чтобы админы не могли добавлять левых людей, несуществующих. В идеале чтобы админы не могли повлиять на процесс, даже если они не честные.&lt;br /&gt;
&lt;br /&gt;
Все таки позволяет математика или нет?&lt;br /&gt;
&lt;br /&gt;
У меня, получается, такой вариант придумался.&lt;br /&gt;
&lt;br /&gt;
1. Человеку выдают девайс (сертифицированный). На девайсе есть кнопка сгенерить новый публичный идентификатор &amp;mdash; случайное число. Идентификатор выводится на экране в виде 10 слов (для простоты запоминания) или даже согласованное предложение из 10 слов (около 16 байт энтропии &amp;mdash; норм). Девайс выдается или покупается анонимно, можно купить хоть 10 штук разных.&lt;br /&gt;
&lt;br /&gt;
2. Чел. приходит в избирательный участок, заходит по паспорту. Войти можно только 1 раз за голосование (второй раз не пропустят). Цель участка (чего нельзя сделать удаленно) &amp;mdash; чтобы никто другой не мог увидеть его текущий идентификатор. На участке контролируют чтобы чел был один и не фоткал идентификатор на телефон. При этом идентификатор камеры не видят.&lt;br /&gt;
&lt;br /&gt;
3. Чел. жамкает кнопку на девайсе, генерит идентификатор. Может генерить хоть 10 раз. Но значение имеет только последний. Нужно чтобы жмякнул кнопку хотя бы один раз уже в участке, к примеру, без этого не отроются двери в кабинку.&lt;br /&gt;
&lt;br /&gt;
4. Подходит с этим брелоком (с идентификатор на экране) к голосомату. Выбирает за кого голосовать, подносит брелок (там NFC).&lt;br /&gt;
&lt;br /&gt;
5. Система учитывает голос и связывает его с публичным идентификатором. После чего дает распечатку &amp;mdash; твой голос (на против него будет публичный идентификатор &amp;mdash; ты проверяешь что совпадает с данными на экране брелока). НО! кроме этого будут и все другие варианты выбора, но напротив них будут публичные идентификаторы случайных людей. Это нужно чтобы у тебя не было доказательства за кого ты проголосовал &amp;mdash; банные с экрана брелока только в памяти твоей.&lt;br /&gt;
&lt;br /&gt;
Ты визуально еще раз проверяешь что слова совпадают.&lt;br /&gt;
&lt;br /&gt;
6. Выходишь из кабинки, для этого нужно сбросить брелок (идентификатор остается на распечатке &amp;mdash; но только ты знаешь какой твой).&lt;br /&gt;
&lt;br /&gt;
Вроде ОК. Потом публикуют два списка:&lt;br /&gt;
&lt;br /&gt;
1. Поименный список тех, кто был на участке &amp;mdash; время и номер участка. Это по данным турникета на входе. Можно либо имя либо просто адрес. Это позволяет не дать возможность создания мертвых душ.&lt;br /&gt;
2. Список публичных ID а так-же какой выбор был сделан этим ID (ты сможешь сверить, твой ID записан в квитанции-распечатке на против твоего выбора).&lt;br /&gt;
&lt;br /&gt;
Т.е. вроде все удалось решить кроме одного &amp;mdash; нельзя проголосовать удаленно из дома &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/frown.gif' /&gt;&lt;/div&gt;
				
		</description>
		
		<category>alg</category>
		<pubDate>Tue, 28 Apr 2026 04:14:58 GMT</pubDate>
		
			<author>Shmj &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>11</slash:comments>
		
	</item>

	<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="#xEDEvu" target="_blank" title="Игра Мельница и хитрый знахарь"&gt;https://rsdn.org/forum/etude/9018754.flat&lt;div class="tooltip" id="xEDEvu"&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>
</channel>
</rss>
