<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.237.190.252&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.237.190.252&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/178.237.190.252"/>
		<updated>2026-06-13T16:51:50Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8&amp;diff=66190</id>
		<title>Алгоритм цифровой сортировки</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8&amp;diff=66190"/>
				<updated>2018-08-26T17:54:07Z</updated>
		
		<summary type="html">&lt;p&gt;178.237.190.252: /* Алгоритм LSD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этом алгоритме сортировки числа сортируются по разрядам. Существует два варианта Least Significant Digit (LSD) и Most Significant Digit (MSD). При LSD сортировке, сначала сортируются младшие разряды, затем старшие. При MSD сортировке наоборот.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм LSD==&lt;br /&gt;
Перед сортировкой необходимо определить 2 величины:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt;width&amp;lt;/tex&amp;gt; {{---}} максимальное количество разрядов в сортируемых величинах.&lt;br /&gt;
# &amp;lt;tex&amp;gt;range&amp;lt;/tex&amp;gt; {{---}} количество возможных значений одного разряда ключа (сортируемого элемента), то есть мощность используемого алфавита.&lt;br /&gt;
&lt;br /&gt;
Создаются &amp;lt;tex&amp;gt;range&amp;lt;/tex&amp;gt; вспомогательных списков-корзин, т.е. на каждое возможное значение разряда элемента по корзине.&lt;br /&gt;
&lt;br /&gt;
'''Первый проход:'''&lt;br /&gt;
&lt;br /&gt;
''Первый этап'' {{---}} распределение по корзинам и на первом проходе элементы исходной последовательности помещаются в эти корзины по их младшему разряду, т.е. по самому правому символу. Какой этот самый младший разряд у элемента, в такую корзину этот элемент и помещается.&lt;br /&gt;
&lt;br /&gt;
Например, пусть имеем исходную последовательность из &amp;lt;tex&amp;gt;{11, 24, 9, 59, 21, 98, 76, 8}&amp;lt;/tex&amp;gt;, для которой определяем &amp;lt;tex&amp;gt;width&amp;lt;/tex&amp;gt; = 2, &amp;lt;tex&amp;gt;range&amp;lt;/tex&amp;gt; = 10, поэтому будет 10 корзин: &amp;lt;tex&amp;gt;list0, list1..., list9&amp;lt;/tex&amp;gt;. Тогда на первом проходе корзины №0, 2, 3, 5, 7 окажутся пусты, а остальные распределят элементы след. образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list1: 11, 21&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list4: 24&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list6: 76&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list8: 98, 8&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list9: 9, 59&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Второй этап'' {{---}} сборка: просто последовательно соединяем один за другим все корзины и располагаем элементы уже в этой последовательности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;11, 21 (list1), 24(list4), 76(list6), 98, 8(list8), 9, 59(list9)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это был один проход алгоритма, соответствующий крайнему правому разряду ключа.&lt;br /&gt;
На следующем проходе, элементы из уже обновленной последовательности распределяются по корзинам в соответствии с их вторым(т.е. предпоследним) разрядом и т.д по самого старшего, максимального, &amp;lt;tex&amp;gt;width&amp;lt;/tex&amp;gt;-го разряда ключа.&lt;br /&gt;
&lt;br /&gt;
'''Второй проход:'''&lt;br /&gt;
&lt;br /&gt;
''Первый этап'' {{---}} корзины №3, 4, 6, 8 окажутся пусты, а остальные распределят элементы след. образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list0: 8, 9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list1: 11&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list2: 21, 24&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list5: 59&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list7: 76&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;list9: 98&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Второй этап'' {{---}} собираем и получаем отсортированную по возрастанию последовательность: &amp;lt;tex&amp;gt;8, 9(list0), 11(list1), 21, 24(list2), 59(list5), 76(list7), 98(list 9)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Время работы ==&lt;br /&gt;
Алгоритм цифровой сортировки работает за линейное время - &amp;lt;tex&amp;gt;O(k(n + |A|))&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt; {{---}} мощность алфавита(&amp;lt;tex&amp;gt;range&amp;lt;/tex&amp;gt;), &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} максимальная длина строки(&amp;lt;tex&amp;gt;width&amp;lt;/tex&amp;gt;), &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} количество сортируемых строк.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Алгоритм цифровой сортировки позволяет строить суффиксный массив за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина строки.&lt;br /&gt;
&lt;br /&gt;
== Источник ==&lt;br /&gt;
Дональд Кнут Искусство программирования, том 3. Сортировка и поиск = The Art of Computer Programming, vol.3. Sorting and Searching. — 2-е изд. — М.: «Вильямс», 2007. — С. 824. — ISBN 5-8459-0082-4&lt;/div&gt;</summary>
		<author><name>178.237.190.252</name></author>	</entry>

	</feed>