<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.157.0.0%2F16</id>
	<title>formulasearchengine - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.157.0.0%2F16"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/wiki/Special:Contributions/91.157.0.0/16"/>
	<updated>2026-08-19T07:31:48Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-wmf.7</generator>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Radiosity_(computer_graphics)&amp;diff=893</id>
		<title>Radiosity (computer graphics)</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Radiosity_(computer_graphics)&amp;diff=893"/>
		<updated>2014-02-02T15:01:43Z</updated>

		<summary type="html">&lt;p&gt;91.157.20.124: /* Limitations */ remove redundant colons for readability&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Algorithm&lt;br /&gt;
|class=[[Sorting algorithm]]&lt;br /&gt;
|image=&lt;br /&gt;
|data=[[Array data type|Array]]&lt;br /&gt;
|time=&amp;lt;math&amp;gt;O(kN)&amp;lt;/math&amp;gt;&lt;br /&gt;
|space=&amp;lt;math&amp;gt;O(k + N)&amp;lt;/math&amp;gt;&lt;br /&gt;
|optimal=exactly correct&lt;br /&gt;
}}&lt;br /&gt;
In [[computer science]], &#039;&#039;&#039;radix sort&#039;&#039;&#039; is a non-[[Comparison sort|comparative]] [[integer sorting|integer]] [[sorting algorithm]] that sorts data with integer keys by grouping keys by the individual digits which share the same [[Significant figures|significant]] position and value.  A [[positional notation]] is required, but because integers can represent strings of characters (e.g., names or dates) and specially formatted floating point numbers, [[radix]] sort is not limited to integers.  Radix sort dates back as far as 1887 to the work of [[Herman Hollerith]] on [[tabulating machines]].&amp;lt;ref&amp;gt;{{Cite patent|US|395781}} and {{Cite patent|UK|327}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most digital computers internally represent all of their data as electronic representations of binary numbers, so processing the digits of integer representations by groups of binary digit representations is most convenient.  Two classifications of radix sorts are [[least significant digit]] (LSD) radix sorts and [[most significant digit]] (MSD) radix sorts.  LSD radix sorts process the integer representations starting from the least digit and move towards the most significant digit.  MSD radix sorts work the other way around.&lt;br /&gt;
&lt;br /&gt;
The integer representations that are processed by sorting algorithms are often called &amp;quot;keys&amp;quot;, which can exist all by themselves or be associated with other data.&lt;br /&gt;
&lt;br /&gt;
LSD radix sorts typically use the following sorting order: short keys come before longer keys, and keys of the same length are sorted lexicographically.  This coincides with the normal order of integer representations, such as the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.&lt;br /&gt;
&lt;br /&gt;
MSD radix sorts use lexicographic order, which is suitable for sorting strings, such as words, or fixed-length integer representations.  A sequence such as &amp;quot;b, c, d, e, f, g, h, i, j, ba&amp;quot; would be lexicographically sorted as &amp;quot;b, ba, c, d, e, f, g, h, i, j&amp;quot;.  If lexicographic ordering is used to sort variable-length integer representations, then the representations of the numbers from 1 to 10 would be output as 1, 10, 2, 3, 4, 5, 6, 7, 8, 9, as if the shorter keys were left-justified and padded on the right with blank characters to make the shorter keys as long as the longest key for the purpose of determining sorted order.&lt;br /&gt;
&lt;br /&gt;
==Efficiency==&lt;br /&gt;
&lt;br /&gt;
Radix sort efficiency is O(&#039;&#039;d&#039;&#039;·&#039;&#039;n&#039;&#039;) for n keys which have &#039;&#039;d&#039;&#039; or fewer digits. Sometimes &#039;&#039;d&#039;&#039; is presented as a constant, which would make radix sort better (for sufficiently large &#039;&#039;n&#039;&#039;) than the best comparison-based sorting algorithms, which are all O(&#039;&#039;n&#039;&#039;·log(&#039;&#039;n&#039;&#039;)). However, in general &#039;&#039;d&#039;&#039; cannot be considered a constant. In particular, under the common (but sometimes implicit) assumption that all keys are distinct, then &#039;&#039;d&#039;&#039; must be at least of the order of  log(&#039;&#039;n&#039;&#039;), however other sorting methods become O(log (n) * log (n) * n) under similar constraints as they also need to step through an ever increasing number of symbols to do the comparisons.&lt;br /&gt;
&lt;br /&gt;
==Least significant digit radix sorts==&lt;br /&gt;
&lt;br /&gt;
A [[least significant digit]] (LSD) radix sort is a fast [[Stable sort|stable]] [[sorting algorithm]] which can be used to sort keys in integer representation order. Keys may be a [[string (computer science)|string]] of characters, or numerical digits in a given &#039;radix&#039;.  The processing of the keys begins at the [[least significant digit]] (i.e., the rightmost digit), and proceeds to the [[most significant digit]] (i.e., the leftmost digit).  The sequence in which digits are processed by a [[least significant digit|LSD]] radix sort is the opposite of the sequence in which digits are processed by a [[most significant digit]] (MSD) radix sort.&lt;br /&gt;
&lt;br /&gt;
An [[least significant digit|LSD]] radix sort operates in [[big O notation|O]](&#039;&#039;nk&#039;&#039;) time, where &#039;&#039;n&#039;&#039; is the number of keys, and &#039;&#039;k&#039;&#039; is the average key length.  This kind of performance for variable-length keys can be achieved by grouping all of the keys that have the same length together and separately performing an LSD radix sort on each group of keys for each length, from shortest to longest, in order to avoid processing the whole list of keys on every sorting pass.&lt;br /&gt;
&lt;br /&gt;
A radix sorting algorithm was originally used to sort [[punched card]]s in several passes.  A computer algorithm was invented for radix sort in 1954 at [[Massachusetts Institute of Technology|MIT]] by [[Harold H. Seward]]. In many large applications needing speed, the computer radix sort is an improvement on (slower) comparison sorts.&lt;br /&gt;
&lt;br /&gt;
LSD radix sorts have resurfaced as an alternative to high performance [[comparison sort|comparison-based sorting algorithms]] (like [[heapsort]] and [[mergesort]]) that require O(&#039;&#039;n&#039;&#039; · log &#039;&#039;n&#039;&#039;) comparisons, where &#039;&#039;n&#039;&#039; is the number of items to be sorted. [[Comparison sort]]s can do no better than O(&#039;&#039;n&#039;&#039; · log &#039;&#039;n&#039;&#039;) execution time but offer the flexibility of being able to sort with respect to more complicated orderings than a lexicographic one; however, this ability is of little importance in many practical applications.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
Each key is first figuratively dropped into one level of buckets corresponding to the value of the rightmost digit.  Each bucket preserves the original order of the keys as the keys are dropped into the bucket. There is a one-to-one correspondence between the number of buckets and the number of values that can be represented by the rightmost digit.  Then, the process repeats with the next neighbouring  more significant digit until there are no more digits to process.  In other words:&lt;br /&gt;
#Take the least significant digit (or group of bits, both being examples of [[radix|radices]]) of each key.&lt;br /&gt;
#Group the keys based on that digit, but otherwise keep the original order of keys. (This is what makes the LSD radix sort a [[stable sort]]).&lt;br /&gt;
#Repeat the grouping process with each more significant digit.&lt;br /&gt;
&lt;br /&gt;
The sort in step&amp;amp;nbsp;2 is usually done using [[bucket sort]] or [[counting sort]], which are efficient in this case since there are usually only a small number of digits.&lt;br /&gt;
&amp;lt;!-- Entire paragraph implementation-dependent according to Base --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===An example===&lt;br /&gt;
&lt;br /&gt;
Original, unsorted list:&lt;br /&gt;
&lt;br /&gt;
:170, 45, 75, 90, 802, 2,24, 66&lt;br /&gt;
&lt;br /&gt;
Sorting by least significant digit (1s place) gives:&lt;br /&gt;
&lt;br /&gt;
:17&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;, 9&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;, 80&amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;, 2&amp;lt;u&amp;gt;4&amp;lt;/u&amp;gt;, 4&amp;lt;u&amp;gt;5&amp;lt;/u&amp;gt;, 7&amp;lt;u&amp;gt;5&amp;lt;/u&amp;gt;, 6&amp;lt;u&amp;gt;6&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;small&amp;gt;Notice that we keep 802 before 2, because 802 occurred before 2 in the original list, and similarly for pairs 170 &amp;amp; 90 and 45 &amp;amp; 75.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sorting by next digit (10s place) gives:&lt;br /&gt;
&lt;br /&gt;
:8&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;2, 2, &amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;4, &amp;lt;u&amp;gt;4&amp;lt;/u&amp;gt;5, &amp;lt;u&amp;gt;6&amp;lt;/u&amp;gt;6, 1&amp;lt;u&amp;gt;7&amp;lt;/u&amp;gt;0, &amp;lt;u&amp;gt;7&amp;lt;/u&amp;gt;5, &amp;lt;u&amp;gt;9&amp;lt;/u&amp;gt;0&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;small&amp;gt;Notice that 802 again comes before 2 as 802 comes before 2 in the previous list.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sorting by most significant digit (100s place) gives:&lt;br /&gt;
&lt;br /&gt;
:2, 24, 45, 66, 75, 90, &amp;lt;u&amp;gt;1&amp;lt;/u&amp;gt;70, &amp;lt;u&amp;gt;8&amp;lt;/u&amp;gt;02&lt;br /&gt;
&lt;br /&gt;
It is important to realize that each of the above steps requires just a single pass over the data, since each item can be placed in its correct bucket without having to be compared with other items.&lt;br /&gt;
&lt;br /&gt;
Some LSD radix sort implementations allocate space for buckets by first counting the number of keys that belong in each bucket before moving keys into those buckets.  The number of times that each digit occurs is stored in an [[Array data type|array]].  Consider the previous list of keys viewed in a different way:&lt;br /&gt;
&lt;br /&gt;
:170, 045, 075, 090, 002, 024, 802, 066&lt;br /&gt;
&lt;br /&gt;
The first counting pass starts on the least significant digit of each key, producing an array of bucket sizes:&lt;br /&gt;
&lt;br /&gt;
:2 (bucket size for digits of 0: 17&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;, 09&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;)&lt;br /&gt;
:2 (bucket size for digits of 2: 00&amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;, 80&amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;)&lt;br /&gt;
:1 (bucket size for digits of 4: 02&amp;lt;u&amp;gt;4&amp;lt;/u&amp;gt;)&lt;br /&gt;
:2 (bucket size for digits of 5: 04&amp;lt;u&amp;gt;5&amp;lt;/u&amp;gt;, 07&amp;lt;u&amp;gt;5&amp;lt;/u&amp;gt;)&lt;br /&gt;
:1 (bucket size for digits of 6: 06&amp;lt;u&amp;gt;6&amp;lt;/u&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
A second counting pass on the next more significant digit of each key will produce an array of bucket sizes:&lt;br /&gt;
&lt;br /&gt;
:2 (bucket size for digits of 0: 0&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;2, 8&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;2)&lt;br /&gt;
:1 (bucket size for digits of 2: 0&amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;4)&lt;br /&gt;
:1 (bucket size for digits of 4: 0&amp;lt;u&amp;gt;4&amp;lt;/u&amp;gt;5)&lt;br /&gt;
:1 (bucket size for digits of 6: 0&amp;lt;u&amp;gt;6&amp;lt;/u&amp;gt;6)&lt;br /&gt;
:2 (bucket size for digits of 7: 1&amp;lt;u&amp;gt;7&amp;lt;/u&amp;gt;0, 0&amp;lt;u&amp;gt;7&amp;lt;/u&amp;gt;5)&lt;br /&gt;
:1 (bucket size for digits of 9: 0&amp;lt;u&amp;gt;9&amp;lt;/u&amp;gt;0)&lt;br /&gt;
&lt;br /&gt;
A third and final counting pass on the most significant digit of each key will produce an array of bucket sizes:&lt;br /&gt;
&lt;br /&gt;
:6 (bucket size for digits of 0: &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;02, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;24, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;45, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;66, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;75, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;90)&lt;br /&gt;
:1 (bucket size for digits of 1: &amp;lt;u&amp;gt;1&amp;lt;/u&amp;gt;70)&lt;br /&gt;
:1 (bucket size for digits of 8: &amp;lt;u&amp;gt;8&amp;lt;/u&amp;gt;02)&lt;br /&gt;
&lt;br /&gt;
At least one LSD radix sort implementation now counts the number of times that each digit occurs in each column for all columns in a single counting pass. (See the [[Radix sort#External links|external links]] section.) Other LSD radix sort implementations allocate space for buckets dynamically as the space is needed.&lt;br /&gt;
&lt;br /&gt;
===Iterative version using queues===&lt;br /&gt;
A simple version of an LSD radix sort can be achieved using [[Queue (data structure)|queues]] as buckets. The following process is repeated for a number of times equal to the length of the longest key:&lt;br /&gt;
#The integers are enqueued into an array of ten separate queues based on their digits from right to left.  Computers often represent integers internally as fixed-length binary digits.  Here, we will do something analogous with fixed-length decimal digits.  So, using the numbers from the previous example, the queues for the 1st pass would be:&lt;br /&gt;
#:0: 17&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;, 09&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;&lt;br /&gt;
#:1: none&lt;br /&gt;
#:2: 00&amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;, 80&amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;&lt;br /&gt;
#:3: none&lt;br /&gt;
#:4: 02&amp;lt;u&amp;gt;4&amp;lt;/u&amp;gt;&lt;br /&gt;
#:5: 04&amp;lt;u&amp;gt;5&amp;lt;/u&amp;gt;, 07&amp;lt;u&amp;gt;5&amp;lt;/u&amp;gt;&lt;br /&gt;
#:6: 06&amp;lt;u&amp;gt;6&amp;lt;/u&amp;gt;&lt;br /&gt;
#:7–9: none&lt;br /&gt;
#The queues are dequeued back into an array of integers, in increasing order. Using the same numbers, the array will look like this after the first pass:&lt;br /&gt;
#:170, 090, 002, 802, 024, 045, 075, 066&lt;br /&gt;
#For the second pass:&lt;br /&gt;
#:Queues:&lt;br /&gt;
#::0: 0&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;2, 8&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;2&lt;br /&gt;
#::1: none&lt;br /&gt;
#::2: 0&amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;4&lt;br /&gt;
#::3: none&lt;br /&gt;
#::4: 0&amp;lt;u&amp;gt;4&amp;lt;/u&amp;gt;5&lt;br /&gt;
#::5: none&lt;br /&gt;
#::6: 0&amp;lt;u&amp;gt;6&amp;lt;/u&amp;gt;6&lt;br /&gt;
#::7: 1&amp;lt;u&amp;gt;7&amp;lt;/u&amp;gt;0, 0&amp;lt;u&amp;gt;7&amp;lt;/u&amp;gt;5&lt;br /&gt;
#::8: none&lt;br /&gt;
#::9: 0&amp;lt;u&amp;gt;9&amp;lt;/u&amp;gt;0&lt;br /&gt;
#:Array:&lt;br /&gt;
#::002, 802, 024, 045, 066, 170, 075, 090&amp;lt;br /&amp;gt;(note that at this point only 802 and 170 are out of order)&lt;br /&gt;
#For the third pass:&lt;br /&gt;
#:Queues:&lt;br /&gt;
#::0: &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;02, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;24, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;45, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;66, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;75, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;90&lt;br /&gt;
#::1: &amp;lt;u&amp;gt;1&amp;lt;/u&amp;gt;70&lt;br /&gt;
#::2–7: none&lt;br /&gt;
#::8: &amp;lt;u&amp;gt;8&amp;lt;/u&amp;gt;02&lt;br /&gt;
#::9: none&lt;br /&gt;
#:Array:&lt;br /&gt;
#::002, 024, 045, 066, 075, 090, 170, 802 (sorted)&lt;br /&gt;
While this may not be the most efficient radix sort algorithm, it is relatively simple, and still quite efficient.&lt;br /&gt;
During all tests on 100M or fewer random 64-bit integers, qsort algorithm behaves faster.&lt;br /&gt;
&lt;br /&gt;
===Example in C===&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#define MAX 20&lt;br /&gt;
#define SHOWPASS&lt;br /&gt;
#define BASE 10&lt;br /&gt;
void print(int *a, int n)&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  for (i = 0; i &amp;lt; n; i++)&lt;br /&gt;
    printf(&amp;quot;%d\t&amp;quot;, a[i]);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void radixsort(int *a, int n)&lt;br /&gt;
{&lt;br /&gt;
  int i, b[MAX], m = a[0], exp = 1;&lt;br /&gt;
  for (i = 1; i &amp;lt; n; i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (a[i] &amp;gt; m)&lt;br /&gt;
      m = a[i];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  while (m / exp &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
    int bucket[BASE] ={  0 };&lt;br /&gt;
    for (i = 0; i &amp;lt; n; i++)&lt;br /&gt;
      bucket[(a[i] / exp) % BASE]++;&lt;br /&gt;
    for (i = 1; i &amp;lt; BASE; i++)&lt;br /&gt;
      bucket[i] += bucket[i - 1];&lt;br /&gt;
    for (i = n - 1; i &amp;gt;= 0; i--)&lt;br /&gt;
      b[--bucket[(a[i] / exp) % BASE]] = a[i];&lt;br /&gt;
    for (i = 0; i &amp;lt; n; i++)&lt;br /&gt;
      a[i] = b[i];&lt;br /&gt;
    exp *= BASE;&lt;br /&gt;
 &lt;br /&gt;
    #ifdef SHOWPASS&lt;br /&gt;
      printf(&amp;quot;\nPASS   : &amp;quot;);&lt;br /&gt;
      print(a, n);&lt;br /&gt;
    #endif&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  int arr[MAX];&lt;br /&gt;
  int i, n;&lt;br /&gt;
  printf(&amp;quot;Enter total elements (n &amp;lt;= %d) : &amp;quot;, MAX);&lt;br /&gt;
  scanf(&amp;quot;%d&amp;quot;, &amp;amp;n);&lt;br /&gt;
  n = n &amp;lt; MAX ? n : MAX;&lt;br /&gt;
 &lt;br /&gt;
  printf(&amp;quot;Enter %d Elements : &amp;quot;, n);&lt;br /&gt;
  for (i = 0; i &amp;lt; n; i++)&lt;br /&gt;
    scanf(&amp;quot;%d&amp;quot;, &amp;amp;arr[i]);&lt;br /&gt;
 &lt;br /&gt;
  printf(&amp;quot;\nARRAY  : &amp;quot;);&lt;br /&gt;
  print(&amp;amp;arr[0], n);&lt;br /&gt;
 &lt;br /&gt;
  radixsort(&amp;amp;arr[0], n);&lt;br /&gt;
 &lt;br /&gt;
  printf(&amp;quot;\nSORTED : &amp;quot;);&lt;br /&gt;
  print(&amp;amp;arr[0], n);&lt;br /&gt;
  printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example in Python===&lt;br /&gt;
This example written in the Python programming language will perform the radix sort for any radix (base) of 2 or greater. Simplicity of exposition is chosen over clever programming, and so the &#039;&#039;log&#039;&#039; function is used instead of bit shifting techniques.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#python2.6 &amp;lt;&lt;br /&gt;
from math import log&lt;br /&gt;
&lt;br /&gt;
def getDigit(num, base, digit_num):&lt;br /&gt;
    # pulls the selected digit&lt;br /&gt;
    return (num // base ** digit_num) % base  &lt;br /&gt;
 &lt;br /&gt;
def makeBlanks(size):&lt;br /&gt;
    # create a list of empty lists to hold the split by digit&lt;br /&gt;
    return [[] for _ in xrange(size)]  &lt;br /&gt;
 &lt;br /&gt;
def split(a_list, base, digit_num):&lt;br /&gt;
    buckets = makeBlanks(base)&lt;br /&gt;
    for num in a_list:&lt;br /&gt;
        # append the number to the list selected by the digit&lt;br /&gt;
        buckets[getDigit(num, base, digit_num)].append(num)  &lt;br /&gt;
    return buckets&lt;br /&gt;
 &lt;br /&gt;
# concatenate the lists back in order for the next step&lt;br /&gt;
def merge(a_list): &lt;br /&gt;
    new_list = []&lt;br /&gt;
    for sublist in a_list:&lt;br /&gt;
       new_list.extend(sublist)&lt;br /&gt;
    return new_list&lt;br /&gt;
 &lt;br /&gt;
def maxAbs(a_list):&lt;br /&gt;
    # largest abs value element of a list&lt;br /&gt;
    return max(abs(num) for num in a_list)  &lt;br /&gt;
 &lt;br /&gt;
def radixSort(a_list, base):&lt;br /&gt;
    # there are as many passes as there are digits in the longest number&lt;br /&gt;
    passes = int(round(log(maxAbs(a_list), base)) + 1) &lt;br /&gt;
    new_list = a_list[:]&lt;br /&gt;
    for digit_num in range(passes):&lt;br /&gt;
        new_list = merge(split(new_list, base, digit_num))&lt;br /&gt;
    return new_list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Most significant digit radix sorts==&lt;br /&gt;
A [[most significant digit]] (MSD) radix sort can be used to sort keys in [[lexicographic order]].  Unlike a least significant digit (LSD) radix sort, a most significant digit radix sort [[Stable sort|does not necessarily preserve the original order of duplicate keys]].  An MSD radix sort starts processing the keys from the [[most significant digit]], leftmost digit, to the [[least significant digit]], rightmost digit.  This sequence is opposite that of [[least significant digit]] (LSD) radix sorts.  An MSD radix sort stops rearranging the position of a key when the processing reaches a unique prefix of the key.  Some MSD radix sorts use one level of buckets in which to group the keys.  See the [[counting sort]] and [[pigeonhole sort]] articles.  Other MSD radix sorts use multiple levels of buckets, which form a [[trie]] or a path in a trie.  A [[Bucket sort#Postman&#039;s sort|postman&#039;s sort / postal sort]] is a kind of MSD radix sort.&lt;br /&gt;
&lt;br /&gt;
===Recursion===&lt;br /&gt;
A [[recursion|recursively]] subdividing MSD radix sort algorithm works as follows:&lt;br /&gt;
#Take the most significant digit of each key.&lt;br /&gt;
#Sort the list of elements based on that digit, grouping elements with the same digit into one [[bucket (computing)|bucket]].&lt;br /&gt;
#Recursively sort each bucket, starting with the next digit to the right.&lt;br /&gt;
#[[Concatenate]] the buckets together in order.&lt;br /&gt;
&lt;br /&gt;
====Implementation====&lt;br /&gt;
A two-pass method can be used to first find out how big each bucket needs to be and then place each key (or pointer to the key) into the appropriate bucket.  A single-pass system can also be used, where each bucket is dynamically allocated and resized as needed, but this runs the risk of serious memory fragmentation, discontiguous allocations of memory, which may degrade performance.  This memory fragmentation could be avoided if a fixed allocation of buckets is used for all possible values of a digit, but, for an 8-bit digit, this would require 256 (2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;) buckets, even if not all of the buckets were used.  So, this approach might use up all available memory quickly and go into paging space, where data is stored and accessed on a hard drive or some other secondary memory device instead of main memory, which would radically degrade performance.  A fixed allocation approach would only make sense if each digit was very small, such as a single bit.&lt;br /&gt;
&lt;br /&gt;
===Recursive forward radix sort example===&lt;br /&gt;
Sort the list:&lt;br /&gt;
&amp;lt;br&amp;gt;170, 045, 075, 090, 002, 024, 802, 066&lt;br /&gt;
#Sorting by most significant digit (100s place) gives:&amp;lt;br&amp;gt; Zero hundreds bucket: &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;45, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;75, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;90, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;02, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;24, &amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;66 &amp;lt;br&amp;gt; One hundreds bucket: &amp;lt;u&amp;gt;1&amp;lt;/u&amp;gt;70 &amp;lt;br&amp;gt; Eight hundreds bucket: &amp;lt;u&amp;gt;8&amp;lt;/u&amp;gt;02&lt;br /&gt;
#Sorting by next digit (10s place) is only needed for those numbers in the zero hundreds bucket (no other buckets contain more than one item):&amp;lt;br&amp;gt; Zero tens bucket: 0&amp;lt;u&amp;gt;0&amp;lt;/u&amp;gt;2 &amp;lt;br&amp;gt; Twenties bucket: 0&amp;lt;u&amp;gt;2&amp;lt;/u&amp;gt;4 &amp;lt;br&amp;gt; Forties bucket: 0&amp;lt;u&amp;gt;4&amp;lt;/u&amp;gt;5 &amp;lt;br&amp;gt; Sixties bucket: 0&amp;lt;u&amp;gt;6&amp;lt;/u&amp;gt;6 &amp;lt;br&amp;gt; Seventies  bucket: 0&amp;lt;u&amp;gt;7&amp;lt;/u&amp;gt;5 &amp;lt;br&amp;gt; Nineties bucket: 0&amp;lt;u&amp;gt;9&amp;lt;/u&amp;gt;0&lt;br /&gt;
Sorting by least significant digit (1s place) is not needed, as there is no tens bucket with more than one number.  Therefore, the now sorted zero hundreds bucket is concatenated, joined in sequence, with the one hundreds bucket and eight hundreds bucket to give:&amp;lt;br&amp;gt;002, 024, 045, 066, 075, 090, 170, 802&lt;br /&gt;
&lt;br /&gt;
This example used [[base (exponentiation)|base]] ten digits for the sake of readability, but of course binary digits or perhaps [[byte]]s might make more sense for a binary computer to process.&lt;br /&gt;
&lt;br /&gt;
===In-place MSD radix sort implementations===&lt;br /&gt;
Binary MSD radix sort, also called binary quicksort, can be implemented in-place by splitting the input array into two bins - the 0s bin and the 1&#039;s bin.  The 0s bin is grown from the beginning of the array, whereas the 1&#039;s bin is grown from the end of the array.  The 0s bin boundary is placed before the first array element.  The 1&#039;s bin boundary is placed after the last array element.  The most significant bit of the first array element is examined.  If this bit is a 1, then the first element is swapped with the element in front of the 1&#039;s bin boundary (the last element of the array), and the 1&#039;s bin is grown by one element by decrementing the 1&#039;s boundary array index.  If this bit is a 0, then the first element remains at its current location, and the 0s bin is grown by one element. The next array element examined is the one in front of the 0s bin boundary (i.e. the first element that is not in the 0s bin or the 1&#039;s bin).  This process continues until the 0s bin and the 1&#039;s bin reach each other. The 0s bin and the 1&#039;s bin are then sorted recursively based on the next bit of each array element.  Recursive processing continues until the least significant bit has been used for sorting.&amp;lt;ref&amp;gt;R. Sedgewick, &amp;quot;Algorithms in C++&amp;quot;, third edition, 1998, p. 424-427&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.drdobbs.com/architecture-and-design/220300654 V. J. Duvanenko, &amp;quot;In-Place Hybrid Binary-Radix Sort&amp;quot;, Dr. Dobb&#039;s Journal, 1 October 2009]&amp;lt;/ref&amp;gt;  Handling signed integers requires treating the most significant bit with the opposite sense, followed by unsigned treatment of the rest of the bits.&lt;br /&gt;
&lt;br /&gt;
In-place MSD binary-radix sort can be extended to larger radix and retain in-place capability.  [[Counting sort]] is used to determine the size of each bin and their starting index.  Swapping is used to place the current element into its bin, followed by expanding the bin boundary.  As the array elements are scanned the bins are skipped over and only elements between bins are processed, until the entire array has been processed and all elements end up in their respective bins.  The number of bins is the same as the radix used - e.g. 16 bins for 16-Radix.  Each pass is based on a single digit (e.g. 4-bits per digit in the case of 16-Radix), starting from the [[most significant digit]].  Each bin is then processed recursively using the next digit, until all digits have been used for sorting.&amp;lt;ref&amp;gt;[http://www.drdobbs.com/architecture-and-design/221600153 V. J. Duvanenko, &amp;quot;In-Place Hybrid N-bit-Radix Sort&amp;quot;, Dr. Dobb&#039;s Journal, November 2009]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.drdobbs.com/high-performance-computing/229000734 V. J. Duvanenko, &amp;quot;Parallel In-Place Radix Sort Simplified&amp;quot;, Dr. Dobb&#039;s Journal, January 2011]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neither in-place binary-radix sort nor n-bit-radix sort, discussed in paragraphs above, are [[Sorting algorithm|stable algorithms]].&lt;br /&gt;
&lt;br /&gt;
===Stable MSD radix sort implementations===&lt;br /&gt;
MSD Radix Sort can be implemented as a stable algorithm, but requires the use of a memory buffer of the same size as the input array.  This extra memory allows the input buffer to be scanned from the first array element to last, and move the array elements to the destination bins in the same order.  Thus, equal elements will be placed in the memory buffer in the same order they were in the input array.  The MSD-based algorithm uses the extra memory buffer as the output on the first level of recursion, but swaps the input and output on the next level of recursion, to avoid the overhead of copying the output result back to the input buffer.  Each of the bins are recursively processed, as is done for the in-place MSD Radix Sort.  After the sort by the last digit has been completed, the output buffer is checked to see if it is the original input array, and if it&#039;s not, then a single copy is performed.  If the digit size is chosen such that the key size divided by the digit size is an even number, the copy at the end is avoided.&amp;lt;ref&amp;gt;[http://www.drdobbs.com/tools/222200161 V. J. Duvanenko, &amp;quot;Stable Hybrid N-bit-Radix Sort&amp;quot;, Dr. Dobb&#039;s Journal, January 2010]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hybrid approaches===&lt;br /&gt;
Radix sort, such as two pass method where [[counting sort]] is used during the first pass of each level of recursion, has a large constant overhead.  Thus, when the bins get small, other sorting algorithms should be used, such as [[insertion sort]].  A good implementation of [[Insertion sort]] is fast for small arrays, stable, in-place, and can significantly speed up Radix Sort.&lt;br /&gt;
&lt;br /&gt;
===Application to parallel computing===&lt;br /&gt;
Note that this recursive sorting algorithm has particular application to [[parallel computing]], as each of the bins can be sorted independently.  In this case, each bin is passed to the next available processor.  A single processor would be used at the start (the most significant digit). By the second or third digit, all available processors would likely be engaged.  Ideally, as each subdivision is fully sorted, fewer and fewer processors would be utilized.  In the worst case, all of the keys will be identical or nearly identical to each other, with the result that there will be little to no advantage to using parallel computing to sort the keys.&lt;br /&gt;
&lt;br /&gt;
In the top level of recursion, opportunity for parallelism is in the [[Counting sort]] portion of the algorithm.  Counting is highly parallel, amenable to the parallel_reduce pattern, and splits the work well across multiple cores until reaching memory bandwidth limit.  This portion of the algorithm has data-independent parallelism.  Processing each bin in subsequent recursion levels is data-dependent, however.  For example, if all keys were of the same value, then there would be only a single bin with any elements in it, and no parallelism would be available.  For random inputs all bins would be near equally populated and a large amount of parallelism opportunity would be available.&amp;lt;ref&amp;gt;[http://www.drdobbs.com/high-performance-computing/226600004 V. J. Duvanenko, &amp;quot;Parallel In-Place N-bit-Radix Sort&amp;quot;, Dr. Dobb&#039;s Journal, August 2010]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that there are faster sorting algorithms available, for example optimal complexity O(log(&#039;&#039;n&#039;&#039;)) are those of the Three Hungarians and Richard Cole&amp;lt;ref&amp;gt;A. Gibbons and [[Wojciech Rytter|W. Rytter]], &amp;quot;Efficient Parallel Algorithms&amp;quot;. Cambridge University Press, 1988.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;H. Casanova et al, &amp;quot;Parallel Algorithms&amp;quot;. Chapman &amp;amp; Hall, 2008.&amp;lt;/ref&amp;gt; and [[Batcher]]&#039;s bitonic merge sort has an algorithmic complexity of O(log&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(&#039;&#039;n&#039;&#039;)), all of which have a lower algorithmic time complexity to radix sort on a CREW-[[Parallel Random Access Machine|PRAM]]. The fastest known [[Parallel Random Access Machine|PRAM]] sorts were described in 1991 by David Powers with a parallelized quicksort that can operate in O(log(n)) time on a CRCW-[[Parallel Random Access Machine|PRAM]] with &#039;&#039;n&#039;&#039; processors by performing partitioning implicitly, as well as a radixsort that operates using the same trick in O(&#039;&#039;k&#039;&#039;), where &#039;&#039;k&#039;&#039; is the maximum keylength.&amp;lt;ref&amp;gt;David M. W. Powers, [http://citeseer.ist.psu.edu/327487.html Parallelized Quicksort and Radixsort with Optimal Speedup], &#039;&#039;Proceedings of International Conference on Parallel Computing Technologies&#039;&#039;. [[Novosibirsk]]. 1991.&amp;lt;/ref&amp;gt; However, neither the [[Parallel Random Access Machine|PRAM]] architecture or a single sequential processor can actually be built in a way that will scale without the number of constant [[fanout]] gate delays per cycle increasing as O(log(&#039;&#039;n&#039;&#039;)), so that in effect a pipelined version of Batcher&#039;s bitonic mergesort and the O(log(&#039;&#039;n&#039;&#039;)) [[Parallel Random Access Machine|PRAM]] sorts are all O(log&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(&#039;&#039;n&#039;&#039;)) in terms of clock cycles, with Powers acknowledging that Batcher&#039;s would have lower constant in terms of gate delays than his Parallel [[quicksort]] and radix sort, or Cole&#039;s [[merge sort]], for a keylength-independent [[sorting network]] of O(nlog&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(&#039;&#039;n&#039;&#039;)).&amp;lt;ref&amp;gt;David M. W. Powers, [http://david.wardpowers.info/Research/AI/papers/199501-ACAW-PUPC.pdf Parallel Unification: Practical Complexity], Australasian Computer Architecture Workshop, Flinders University, January 1995&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Incremental trie-based radix sort===&lt;br /&gt;
Another way to proceed with an MSD radix sort is to use more memory to create a [[trie]] to represent the keys and then traverse the trie to visit each key in order.  A [[depth-first search|depth-first traversal]] of a trie starting from the [[root node]] will visit each key in order.  A depth-first traversal of a trie, or any other kind of [[Directed acyclic graph|acyclic]] tree structure, is equivalent to traversing a maze via the [[Maze solving algorithm#Wall follower|right-hand rule]].&lt;br /&gt;
&lt;br /&gt;
A trie essentially represents a [[set (mathematics)|set]] of strings or numbers, and a radix sort which uses a trie structure is not necessarily stable, which means that the original order of duplicate keys is not necessarily preserved, because a set does not contain duplicate elements.  Additional information will have to be associated with each key to indicate the population count or original order of any duplicate keys in a trie-based radix sort if keeping track of that information is important for a particular application.  It may even be desirable to discard any duplicate strings as the trie creation proceeds if the goal is to find only unique strings in sorted order.  Some people sort a list of strings first and then make a separate pass through the sorted list to discard duplicate strings, which can be slower than using a trie to simultaneously sort and discard duplicate strings in one pass.&lt;br /&gt;
&lt;br /&gt;
One of the advantages of maintaining the trie structure is that the trie makes it possible to determine quickly if a particular key is a member of the set of keys in a time that is proportional to the length of the key, &#039;&#039;k&#039;&#039;, in O(&#039;&#039;k&#039;&#039;) time, that is &#039;&#039;independent&#039;&#039; of the total number of keys.  Determining set membership in a plain list, as opposed to determining set membership in a trie, requires [[binary search]], O(&#039;&#039;k&amp;amp;thinsp;log(n)&#039;&#039;) time; [[linear search]], O(&#039;&#039;kn&#039;&#039;) time; or some other method whose execution time is in some way &amp;lt;u&amp;gt;dependent&amp;lt;/u&amp;gt; on the total number, &#039;&#039;n&#039;&#039;, of all of the keys in the worst case.  It is sometimes possible to determine set membership in a plain list in O(&#039;&#039;k&#039;&#039;) time, in a time that is independent of the total number of keys, such as when the list is known to be in an [[arithmetic sequence]] or some other computable sequence.&lt;br /&gt;
&lt;br /&gt;
Maintaining the trie structure also makes it possible to insert new keys into the set incrementally or delete keys from the set incrementally while maintaining sorted order in O(&#039;&#039;k&#039;&#039;) time, in a time that is independent of the total number of keys.  In contrast, other radix sorting algorithms must, in the worst case, re-sort the entire list of keys each time that a new key is added or deleted from an existing list, requiring O(&#039;&#039;kn&#039;&#039;) time.&lt;br /&gt;
&lt;br /&gt;
====Snow White analogy====&lt;br /&gt;
[[File:7dwarves.svg|center]]&lt;br /&gt;
If the nodes were rooms connected by hallways, then here is how Snow White might proceed to visit all of the dwarfs if the place were dark, keeping her right hand on a wall at all times:&lt;br /&gt;
# She travels down hall B to find Bashful.&lt;br /&gt;
# She continues moving forward with her right hand on the wall, which takes her around the room and back up hall B.&lt;br /&gt;
# She moves down halls D, O, and C to find Doc.&lt;br /&gt;
# Continuing to follow the wall with her right hand, she goes back up hall C, then down hall P, where she finds Dopey.&lt;br /&gt;
# She continues back up halls P, O, D, and then goes down hall G to find Grumpy.&lt;br /&gt;
# She goes back up hall G, with her right hand still on the wall, and goes down hall H to the room where Happy is.&lt;br /&gt;
# She travels back up hall H and turns right down halls S and L, where she finds Sleepy.&lt;br /&gt;
# She goes back up hall L, down hall N, where she finally finds Sneezy.&lt;br /&gt;
# She travels back up halls N and S to her starting point and knows that she is done.&lt;br /&gt;
&lt;br /&gt;
These series of steps serve to illustrate the path taken in the trie by Snow White via a [[depth-first search|depth-first traversal]] to visit the dwarfs by the ascending order of their names, Bashful, Doc, Dopey, Grumpy, Happy, Sleepy, and Sneezy.  The algorithm for performing some operation on the data associated with each node of a tree first, such as printing the data, and then moving deeper into the tree is called a [[pre-order traversal]], which is a kind of [[depth-first search|depth-first traversal]].  A pre-order traversal is used to process the contents of a trie in ascending order.  If Snow White wanted to visit the dwarfs by the descending order of their names, then she could walk backwards while following the wall with her right hand, or, alternatively, walk forward while following the wall with her left hand. The algorithm for moving deeper into a tree first until no further descent to unvisited nodes is possible and then performing some operation on the data associated with each node is called [[post-order traversal]], which is another kind of depth-first traversal.  A [[post-order traversal]] is used to process the contents of a trie in descending order.&lt;br /&gt;
&lt;br /&gt;
The [[root node]] of the [[trie]] in the diagram essentially represents a null string, an empty string, which can be useful for keeping track of the number of blank lines in a list of words.  The null string can be associated with a circularly [[linked list]] with the null string initially as its only member, with the forward and backward pointers both initially pointing to the null string.  The circularly linked list can then be expanded as each new key is inserted into the [[trie]].  The circularly linked list is represented in the following diagram as thick, grey, horizontally linked lines:&lt;br /&gt;
&lt;br /&gt;
[[File:7dwarvesThreaded.svg|center]]&lt;br /&gt;
If a new key, other than the null string, is inserted into a [[leaf node]] of the [[trie]], then the computer can go to the last preceding node where there was a key or a bifurcation to perform a [[depth-first search]] to find the lexicographic successor or predecessor of the inserted key for the purpose of splicing the new key into the circularly [[linked list]].  The last preceding node where there was a key or a bifurcation, a fork in the path, is a [[parent node]] in the type of trie shown here, where only unique string prefixes are represented as paths in the trie.  If there is already a key associated with the parent node that would have been visited during a movement &#039;&#039;away&#039;&#039; from the root during a right-hand, forward-moving, depth-first traversal, then that immediately ends the depth-first search, as that key is the predecessor of the inserted key.  For example, if Bashful is inserted into the trie, then the predecessor is the null string in the parent node, which is the [[root node]] in this case.  In other words, if the key that is being inserted is on the leftmost branch of the parent node, then any string contained in the parent node is the lexicographic predecessor of the key that is being inserted, else the lexicographic predecessor of the key that is being inserted exists down the parent node&#039;s branch that is immediately to the left of the branch where the new key is being inserted.  For example, if Grumpy were the last key inserted into the trie, then the computer would have a choice of trying to find either the predecessor, Dopey, or the successor, Happy, with a [[depth-first search]] starting from the parent node of Grumpy.  With no additional information to indicate which path is longer, the computer might traverse the longer path, D, O, P.  If Dopey were the last key inserted into the trie, then the depth-first search starting from the parent node of Dopey would soon find the predecessor, &amp;quot;Doc&amp;quot;, because that would be the only choice.&lt;br /&gt;
&lt;br /&gt;
If a new key is inserted into an [[internal node]], then a depth-first search can be started from the [[internal node]] to find the lexicographic successor.  For example, if the literal string &amp;quot;DO&amp;quot; were inserted in the node at the end of the path D, O, then a depth-first search could be started from that internal node to find the successor, &amp;quot;DOC&amp;quot;, for the purpose of splicing the new string into the circularly [[linked list]].&lt;br /&gt;
&lt;br /&gt;
Forming the circularly linked list requires more memory but allows the keys to be visited more directly in either ascending or descending order via a linear traversal of the [[linked list]] rather than a [[depth-first search|depth-first traversal]] of the entire trie.  This concept of a circularly linked trie structure is similar to the concept of a [[threaded binary tree]].  This structure will be called a circularly threaded trie.&lt;br /&gt;
&lt;br /&gt;
[[File:Trie002.svg|center]]&lt;br /&gt;
&lt;br /&gt;
When a [[trie]] is used to sort numbers, the number representations must all be the same length unless you are willing to perform a [[breadth-first search|breadth-first traversal]].  When the number representations will be visited via [[depth-first search|depth-first traversal]], as in the above diagram, the number representations will always be on the [[leaf node]]s of the [[trie]].  Note how similar in concept this particular example of a trie is to the [[radix sort#Recursive forward radix sort example|recursive forward radix sort example]] which involves the use of buckets instead of a trie.  Performing a radix sort with the buckets is like creating a trie and then discarding the non-leaf nodes.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[IBM 80 series Card Sorters]]&lt;br /&gt;
* [[Spaghetti sort]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==External links==&amp;lt;!-- This section is linked from Radix sort --&amp;gt;&lt;br /&gt;
{{wikibooks|Algorithm implementation|Sorting/Radix_sort|Radix sort}}&lt;br /&gt;
*[http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Radix/ Demonstration and comparison] of Radix sort with [[Bubble sort]], [[Merge sort]] and [[Quicksort]] implemented in [[JavaScript]]&lt;br /&gt;
*[http://www.codercorner.com/RadixSortRevisited.htm Article] about Radix sorting [[IEEE floating-point standard|IEEE floating-point]] numbers with implementation.&lt;br /&gt;
*:[http://www.stereopsis.com/radix.html Faster Floating Point Sorting and Multiple Histogramming] with implementation in C++&lt;br /&gt;
*Pointers to [http://web-cat.cs.vt.edu/AlgovizWiki/RadixSort radix sort visualizations]&lt;br /&gt;
*[http://bitbucket.org/ais/usort/wiki/Home USort library] contains tuned implementations of radix sort for most numerical C types (C99)&lt;br /&gt;
&lt;br /&gt;
* [[Donald Knuth]]. &#039;&#039;The Art of Computer Programming&#039;&#039;, Volume 3: &#039;&#039;Sorting and Searching&#039;&#039;, Third Edition. Addison-Wesley, 1997. ISBN 0-201-89685-0. Section 5.2.5: Sorting by Distribution, pp.&amp;amp;nbsp;168–179.&lt;br /&gt;
* [[Thomas H. Cormen]], [[Charles E. Leiserson]], [[Ronald L. Rivest]], and [[Clifford Stein]]. &#039;&#039;[[Introduction to Algorithms]]&#039;&#039;, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Section 8.3: Radix sort, pp.&amp;amp;nbsp;170–173.&lt;br /&gt;
* [http://web.archive.org/web/20010714213118/www.chinet.com/~edlee/bradsort.c BRADSORT v1.50 source code]&lt;br /&gt;
* [http://goanna.cs.rmit.edu.au/~jz/fulltext/acsc03sz.pdf Efficient Trie-Based Sorting of Large Sets of Strings], by Ranjan Sinha and  Justin Zobel.  This paper describes a method of creating tries of buckets which figuratively burst into sub-tries when the buckets hold more than a predetermined capacity of strings, hence the name, &amp;quot;Burstsort&amp;quot;.&lt;br /&gt;
* [http://opendatastructures.org/versions/edition-0.1e/ods-java/11_2_Counting_Sort_Radix_So.html Open Data Structures - Java Edition - Section 11.2 - Counting Sort and Radix Sort]&lt;br /&gt;
* [http://opendatastructures.org/ods-cpp/11_2_Counting_Sort_Radix_So.html Open Data Structures - C++ Edition - Section 11.2 - Counting Sort and Radix Sort]&lt;br /&gt;
&lt;br /&gt;
{{Use dmy dates|date=January 2012}}&lt;br /&gt;
{{sorting}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Radix Sort}}&lt;br /&gt;
[[Category:Sorting algorithms]]&lt;br /&gt;
[[Category:Stable sorts]]&lt;br /&gt;
&lt;br /&gt;
[[no:Sorteringsalgoritme#Radix-sortering]]&lt;/div&gt;</summary>
		<author><name>91.157.20.124</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Steradian&amp;diff=967</id>
		<title>Steradian</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Steradian&amp;diff=967"/>
		<updated>2013-12-29T10:47:08Z</updated>

		<summary type="html">&lt;p&gt;91.157.210.180: Clarified the caption of the small cone section: A = r2 in the picture is correct only if the solid angle is one steradian.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [[mathematics]], a &#039;&#039;&#039;symplectic manifold&#039;&#039;&#039; is a [[smooth manifold]], &#039;&#039;M&#039;&#039;, equipped with a [[Closed and exact differential forms|closed]] [[nondegenerate form|nondegenerate]] differential [[two-form|2-form]], ω, called the [[symplectic form]]. The study of symplectic manifolds is called [[symplectic geometry]] or [[symplectic topology]]. Symplectic manifolds arise naturally in abstract formulations of [[classical mechanics]] and [[analytical mechanics]] as the [[cotangent bundle]]s of manifolds, e.g., in the [[Hamiltonian mechanics|Hamiltonian formulation]] of classical mechanics, which provides one of the major motivations for the field: The set of all possible configurations of a system is modelled as a manifold, and this manifold&#039;s [[cotangent bundle]] describes the [[phase space]] of the system.&lt;br /&gt;
&lt;br /&gt;
Any real-valued [[differentiable function]], &#039;&#039;H&#039;&#039;, on a symplectic manifold can serve as an &#039;&#039;&#039;[[energy function]]&#039;&#039;&#039; or &#039;&#039;&#039;Hamiltonian&#039;&#039;&#039;. Associated to any Hamiltonian is a [[Hamiltonian vector field]]; the [[integral curve]]s of the Hamiltonian vector field are solutions to [[Hamilton&#039;s equations]]. The Hamiltonian vector field defines a flow on the symplectic manifold, called a &#039;&#039;&#039;Hamiltonian flow&#039;&#039;&#039; or [[symplectomorphism]]. By [[Liouville&#039;s theorem (Hamiltonian)|Liouville&#039;s theorem]], Hamiltonian flows preserve the [[volume form]] on the phase space.&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Symplectic manifolds arise from [[classical mechanics]], in particular, they are a generalization of the [[phase space]] of a closed system.&amp;lt;ref name=&amp;quot;Webster&amp;quot;&amp;gt;Ben Webster: &#039;&#039;What is a symplectic manifold, really?&#039;&#039; http://sbseminar.wordpress.com/2012/01/09/what-is-a-symplectic-manifold-really/&amp;lt;/ref&amp;gt; In the same way the [[Hamilton equations]] allow one to derive the time evolution of a system from a set of [[differential equation]]s, the symplectic form should allow one to obtain a [[vector field]] describing the flow of the system from the differential &#039;&#039;dH&#039;&#039; of a Hamiltonian function &#039;&#039;H&#039;&#039;. As [[Newton&#039;s laws of motion]] are linear differential equations, such a map should be linear as well.&amp;lt;ref name=&amp;quot;Cohn&amp;quot;&amp;gt;Henry Cohn: &#039;&#039;Why symplectic geometry is the natural setting for classical mechanics&#039;&#039; http://research.microsoft.com/en-us/um/people/cohn/thoughts/symplectic.html&amp;lt;/ref&amp;gt; So we require a linear map &#039;&#039;T&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; M → TM&#039;&#039;, or equivalently, an element of &#039;&#039;T&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; M&#039;&#039; ⊗ &#039;&#039;T&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; M&#039;&#039;. Letting ω denote a [[Section (fiber bundle)|section]] of &#039;&#039;T&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; M&#039;&#039; ⊗ &#039;&#039;T&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; M&#039;&#039;, the requirement that ω be [[Degenerate form|non-degenerate]] ensures that for every differential &#039;&#039;dH&#039;&#039; there is a unique corresponding vector field &#039;&#039;V&amp;lt;sub&amp;gt;H&amp;lt;/sub&amp;gt;&#039;&#039; such that &#039;&#039;dH = ω(V&amp;lt;sub&amp;gt;H&amp;lt;/sub&amp;gt;,· )&#039;&#039;. Since one desires the Hamiltonian to be constant along flow lines, one should have &#039;&#039;dH(V&amp;lt;sub&amp;gt;H&amp;lt;/sub&amp;gt;) = ω(V&amp;lt;sub&amp;gt;H&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;H&amp;lt;/sub&amp;gt;) = 0&#039;&#039;, which implies that &#039;&#039;ω&#039;&#039; is [[Alternating form|alternating]] and hence a 2-form. Finally, one makes the requirement that &#039;&#039;ω&#039;&#039; should not change under flow lines, i.e. that the [[Lie derivative]] of &#039;&#039;ω&#039;&#039; along &#039;&#039;V&amp;lt;sub&amp;gt;H&amp;lt;/sub&amp;gt;&#039;&#039; vanishes. Applying [[Cartan&#039;s formula]], this amounts to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\mathcal{L}_{V_H}(\omega) = d\omega(V_H) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which is equivalent to the requirement that &#039;&#039;ω&#039;&#039; should be [[Closed and exact differential forms|closed]].&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
A symplectic form on a manifold &#039;&#039;M&#039;&#039; is a closed non-degenerate differential [[two-form|2-form]] &#039;&#039;ω&#039;&#039;.&amp;lt;ref name=&amp;quot;Gosson&amp;quot;&amp;gt;Maurice de Gosson: &#039;&#039;Symplectic Geometry and Quantum Mechanics&#039;&#039; (2006) Birkhäuser Verlag, Basel ISBN 3-7643-7574-4. (page 10)&lt;br /&gt;
&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Arnold&amp;quot;&amp;gt;{{Cite book|first=V. I.|last=Arnold|first2=A. N.|last2=Varchenko|first3=S. M.|last3=Gusein-Zade|title=The Classification of Critical Points, Caustics and Wave Fronts: Singularities of Differentiable Maps, Vol 1|publisher=Birkhäuser|year=1985|isbn=0-8176-3187-9|postscript=&amp;lt;!--None--&amp;gt;}}&amp;lt;/ref&amp;gt; &lt;br /&gt;
Here, non-degenerate means that for all {{nowrap|1=&#039;&#039;p&#039;&#039; &amp;amp;isin; &#039;&#039;M&#039;&#039;}}, if there exists an {{nowrap|1=&#039;&#039;X&#039;&#039; &amp;amp;isin; &#039;&#039;T&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt;M&#039;&#039;}} such that {{nowrap|1=&#039;&#039;&amp;amp;omega;&#039;&#039;(&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;) = 0}} for all {{nowrap|1=&#039;&#039;Y&#039;&#039; &amp;amp;isin; &#039;&#039;T&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt;M&#039;&#039;}}, then {{nowrap|1=&#039;&#039;X&#039;&#039; = 0}}. The [[skew-symmetric]] condition (inherent in the definition of differential 2-form) means that for all {{nowrap|1=&#039;&#039;p&#039;&#039; &amp;amp;isin; &#039;&#039;M&#039;&#039;}} we have {{nowrap|1=&#039;&#039;&amp;amp;omega;&#039;&#039;(&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;) = &amp;amp;minus;&#039;&#039;&amp;amp;omega;&#039;&#039;(&#039;&#039;Y&#039;&#039;,&#039;&#039;X&#039;&#039;)}} for all  {{nowrap|1=&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039; &amp;amp;isin; &#039;&#039;T&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt;M&#039;&#039;.}} In odd dimensions, [[antisymmetric]] matrices are not invertible. Since &#039;&#039;ω&#039;&#039; is a differential two-form, the skew-symmetric condition implies that &#039;&#039;M&#039;&#039; has even dimension.&amp;lt;ref name=&amp;quot;Gosson&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;Arnold&amp;quot;/&amp;gt; The closed condition means that the [[exterior derivative]] of &#039;&#039;ω &#039;&#039;vanishes, d&#039;&#039;ω &#039;&#039;= 0. A symplectic manifold consists of a pair (&#039;&#039;M&#039;&#039;,&#039;&#039;ω&#039;&#039;), of a manifold &#039;&#039;M&#039;&#039; and a symplectic form &#039;&#039;ω&#039;&#039;. Assigning a symplectic form &#039;&#039;ω&#039;&#039; to a manifold &#039;&#039;M&#039;&#039; is referred to as giving &#039;&#039;M&#039;&#039; a &#039;&#039;&#039;symplectic structure&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Linear symplectic manifold ==&lt;br /&gt;
&lt;br /&gt;
There is a standard linear model, namely a [[symplectic vector space]] &#039;&#039;&#039;R&#039;&#039;&#039;&amp;lt;sup&amp;gt;2&#039;&#039;n&#039;&#039;&amp;lt;/sup&amp;gt;. Let &#039;&#039;&#039;R&#039;&#039;&#039;&amp;lt;sup&amp;gt;2&#039;&#039;n&#039;&#039;&amp;lt;/sup&amp;gt; have the basis {&#039;&#039;v&#039;&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, ..., &#039;&#039;v&#039;&#039;&amp;lt;sub&amp;gt;2&#039;&#039;n&#039;&#039;&amp;lt;/sub&amp;gt;}. Then we define our symplectic form &#039;&#039;ω&#039;&#039; so that for all {{nowrap|1=1 &amp;amp;le; &#039;&#039;i&#039;&#039; &amp;amp;le; &#039;&#039;n&#039;&#039;}} we have {{nowrap|1=&#039;&#039;&amp;amp;omega;&#039;&#039;(&#039;&#039;v&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;i&#039;&#039;&amp;lt;/sub&amp;gt;,&#039;&#039;v&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;n&#039;&#039;+&#039;&#039;i&#039;&#039;&amp;lt;/sub&amp;gt;) = 1,}} {{nowrap|1=&#039;&#039;&amp;amp;omega;&#039;&#039;(&#039;&#039;v&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;n&#039;&#039;+&#039;&#039;i&#039;&#039;&amp;lt;/sub&amp;gt;,&#039;&#039;v&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;i&#039;&#039;&amp;lt;/sub&amp;gt;) = &amp;amp;minus;1,}} and &#039;&#039;ω&#039;&#039; is zero for all other pairs of basis vectors. In this case the symplectic form reduces to a simple [[quadratic form]]. If &#039;&#039;I&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;&#039;&#039; denotes the {{nowrap|1=&#039;&#039;n&#039;&#039; &amp;amp;times; &#039;&#039;n&#039;&#039;}} [[identity matrix]] then the matrix, &#039;&#039;Ω&#039;&#039;, of this quadratic form is given by the ({{nowrap|1=2&#039;&#039;n&#039;&#039; &amp;amp;times; 2&#039;&#039;n&#039;&#039;}}) [[block matrix]]:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega = \left(\begin{array}{c|c} 0 &amp;amp; I_n  \\ \hline -I_n &amp;amp; 0 \end{array}\right). &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lagrangian and other submanifolds ==&lt;br /&gt;
&lt;br /&gt;
There are several natural geometric notions of [[submanifold]] of a symplectic manifold.&lt;br /&gt;
*&#039;&#039;&#039;symplectic submanifolds&#039;&#039;&#039; (potentially of any even dimension) are submanifolds where the symplectic form is required to induce a symplectic form on them.&lt;br /&gt;
*&#039;&#039;&#039;isotropic submanifolds&#039;&#039;&#039; are submanifolds where the symplectic form restricts to zero, i.e. each tangent space is an isotropic subspace of the ambient manifold&#039;s tangent space. Similarly, if each tangent subspace to a submanifold is co-isotropic (the dual of an isotropic subspace), the submanifold is called &#039;&#039;&#039;co-isotropic&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The most important case of the isotropic submanifolds is that of &#039;&#039;&#039;Lagrangian submanifolds&#039;&#039;&#039;. A Lagrangian submanifold is, by definition, an isotropic submanifold of maximal dimension, namely half the dimension of the ambient symplectic manifold. One major example is that the graph of a [[symplectomorphism]] in the product symplectic manifold {{nowrap|1=(&#039;&#039;M&#039;&#039; &amp;amp;times; &#039;&#039;M&#039;&#039;, ω &amp;amp;times; &amp;amp;minus;ω)}} is Lagrangian. Their intersections display rigidity properties not possessed by smooth manifolds; the [[Arnold conjecture]] gives the sum of the submanifold&#039;s [[Betti number]]s as a lower bound for the number of self intersections of a smooth Lagrangian submanifold, rather than the [[Euler characteristic]] in the smooth case.&lt;br /&gt;
&lt;br /&gt;
== Lagrangian fibration ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;Lagrangian fibration&#039;&#039;&#039; of a symplectic manifold &#039;&#039;M&#039;&#039; is a [[fibration]] where all of the [[Fiber_bundle#Formal_definition|fibres]] are Lagrangian submanifolds. Since &#039;&#039;M&#039;&#039; is even dimensional we can take local coordinates {{nowrap|1=(&#039;&#039;p&#039;&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,&amp;amp;hellip;,&#039;&#039;p&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;n&#039;&#039;&amp;lt;/sub&amp;gt;,&#039;&#039;q&#039;&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,&amp;amp;hellip;,&#039;&#039;q&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;n&#039;&#039;&amp;lt;/sub&amp;gt;),}} and by [[Darboux&#039;s theorem]] the symplectic form &#039;&#039;ω&#039;&#039; can be, at least locally, written as {{nowrap|1=&#039;&#039;&amp;amp;omega;&#039;&#039; = &amp;amp;sum; d&#039;&#039;p&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;k&#039;&#039;&amp;lt;/sub&amp;gt; &amp;amp;and; d&#039;&#039;q&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;k&#039;&#039;&amp;lt;/sub&amp;gt;}}, where d denotes the [[exterior derivative]] and ∧ denotes the [[exterior product]]. Using this set-up we can locally think of &#039;&#039;M&#039;&#039; as being the [[cotangent bundle]] T*&#039;&#039;&#039;R&#039;&#039;&#039;&amp;lt;sup&amp;gt;&#039;&#039;n&#039;&#039;&amp;lt;/sup&amp;gt;, and the Lagrangian fibration as the trivial fibration {{nowrap|1=&#039;&#039;&amp;amp;pi;&#039;&#039; : T*&#039;&#039;&#039;R&#039;&#039;&#039;&amp;lt;sup&amp;gt;&#039;&#039;n&#039;&#039;&amp;lt;/sup&amp;gt; ↠ &#039;&#039;&#039;R&#039;&#039;&#039;&amp;lt;sup&amp;gt;&#039;&#039;n&#039;&#039;&amp;lt;/sup&amp;gt;.}} This is the canonical picture.&lt;br /&gt;
&lt;br /&gt;
== Lagrangian mapping ==&lt;br /&gt;
[[Image:TIKZ PICT FBN.png|thumb|&amp;lt;center&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[[:File:TIKZ PICT FBN.png|Click to Enlarge]]&amp;lt;/span&amp;gt;&amp;lt;/center&amp;gt;]]&lt;br /&gt;
Let &#039;&#039;L&#039;&#039; be a Lagrangian submanifold of a symplectic manifold (&#039;&#039;K&#039;&#039;,ω) given by an [[Immersion (mathematics)|immersion]] {{nowrap|1=&#039;&#039;i&#039;&#039; : &#039;&#039;L&#039;&#039; ↪ &#039;&#039;K&#039;&#039;}} (&#039;&#039;i&#039;&#039; is called a &#039;&#039;&#039;Lagrangian immersion&#039;&#039;&#039;). Let {{nowrap|1=&#039;&#039;&amp;amp;pi;&#039;&#039; : &#039;&#039;K&#039;&#039; ↠ &#039;&#039;B&#039;&#039;}} give a Lagrangian fibration of &#039;&#039;K&#039;&#039;. The composite {{nowrap|1=(&#039;&#039;&amp;amp;pi;&#039;&#039; ○ &#039;&#039;i&#039;&#039;) : &#039;&#039;L&#039;&#039; ↪ &#039;&#039;K&#039;&#039; ↠ &#039;&#039;B&#039;&#039;}} is a &#039;&#039;&#039;Lagrangian mapping&#039;&#039;&#039;. The [[critical value|critical value set]] of &#039;&#039;π&#039;&#039; ○ &#039;&#039;i&#039;&#039; is called a [[Caustic (mathematics)|caustic]].&lt;br /&gt;
&lt;br /&gt;
Two Lagrangian maps {{nowrap|1=(&#039;&#039;&amp;amp;pi;&#039;&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; ○ &#039;&#039;i&#039;&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;) : &#039;&#039;L&#039;&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; ↪ &#039;&#039;K&#039;&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; ↠ &#039;&#039;B&#039;&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;}} and {{nowrap|1=(&#039;&#039;&amp;amp;pi;&#039;&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; ○ &#039;&#039;i&#039;&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) : &#039;&#039;L&#039;&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; ↪ &#039;&#039;K&#039;&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; ↠ &#039;&#039;B&#039;&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;}} are called &#039;&#039;&#039;Lagrangian equivalent&#039;&#039;&#039; if there exist [[diffeomorphism]]s σ, τ and ν such that both sides of the diagram given on the right [[commutative diagram|commute]], and τ preserves the symplectic form.&amp;lt;ref name=&amp;quot;Arnold&amp;quot;/&amp;gt; Symbolically:&lt;br /&gt;
:&amp;lt;math&amp;gt; \tau \circ  i_1 = i_2 \circ \sigma, \ \nu \circ \pi_1 = \pi_2 \circ \tau, \ \tau^*\omega_2 = \omega_1 \, , &amp;lt;/math&amp;gt;&lt;br /&gt;
where τ*ω&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; denotes the [[Pullback_(differential_geometry)#Pullback_of_differential_forms|pull back]] of ω&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; by τ.&lt;br /&gt;
&lt;br /&gt;
== Special cases and generalizations ==&lt;br /&gt;
* A symplectic manifold endowed with a [[metric tensor|metric]] that is [[Almost complex manifold#Compatible triples|compatible]] with the symplectic form is an [[almost Kähler manifold]] in the sense that the tangent bundle has an [[almost complex structure]], but this need not be [[integrability condition|integrable]].&lt;br /&gt;
&lt;br /&gt;
* Symplectic manifolds are special cases of a [[Poisson manifold]]. The definition of a symplectic manifold requires that the symplectic form be non-degenerate everywhere, but if this condition is violated, the manifold may still be a Poisson manifold.&lt;br /&gt;
&lt;br /&gt;
* A &#039;&#039;&#039;multisymplectic manifold&#039;&#039;&#039; of degree &#039;&#039;k&#039;&#039; is a manifold equipped with a closed nondegenerate &#039;&#039;k&#039;&#039;-form.&amp;lt;ref&amp;gt;F. Cantrijn, L. A. Ibort and M. de León, J. Austral. Math. Soc. Ser. A 66 (1999), no. 3, 303-330.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A &#039;&#039;&#039;polysymplectic manifold&#039;&#039;&#039; is a Legendre bundle provided with a polysymplectic tangent-valued &amp;lt;math&amp;gt;(n+2)&amp;lt;/math&amp;gt;-form; it is utilized in Hamiltonian field theory.&amp;lt;ref&amp;gt;G. Giachetta, L. Mangiarotti and [[Sardanashvily|G. Sardanashvily]], Covariant Hamiltonian equations for field theory, Journal of Physics &#039;&#039;&#039;A32&#039;&#039;&#039; (1999) 6629-6642; [http://xxx.lanl.gov/abs/hep-th/9904062 arXiv: hep-th/9904062].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
{{Portal|Mathematics}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;-moz-column-count:3; column-count:3;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Almost complex manifold]]&lt;br /&gt;
* [[Almost symplectic manifold]]&lt;br /&gt;
* [[Contact manifold]] &amp;amp;minus; an odd-dimensional counterpart of the symplectic manifold.&lt;br /&gt;
* [[Fedosov manifold]]&lt;br /&gt;
* [[Poisson bracket]]&lt;br /&gt;
* [[Symplectic group]]&lt;br /&gt;
* [[Symplectic matrix]]&lt;br /&gt;
* [[Symplectic topology]]&lt;br /&gt;
* [[Symplectic vector space]]&lt;br /&gt;
* [[Symplectomorphism]]&lt;br /&gt;
* [[Tautological one-form]]&lt;br /&gt;
* [[Wirtinger inequality (2-forms)]]&lt;br /&gt;
* [[Covariant Hamiltonian field theory]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [[Dusa McDuff]] and D. Salamon: &#039;&#039;Introduction to Symplectic Topology&#039;&#039; (1998) Oxford Mathematical Monographs, ISBN 0-19-850451-9.&lt;br /&gt;
* [[Ralph Abraham]] and [[Jerrold E. Marsden]], &#039;&#039;Foundations of Mechanics&#039;&#039;, (1978) Benjamin-Cummings, London ISBN 0-8053-0102-X &#039;&#039;See section 3.2&#039;&#039;.&lt;br /&gt;
* [[Maurice A. de Gosson]]: &#039;&#039;Symplectic Geometry and Quantum Mechanics&#039;&#039; (2006) Birkhäuser Verlag, Basel ISBN 3-7643-7574-4.&lt;br /&gt;
* {{cite journal |author=Alan Weinstein |title=Symplectic manifolds and their lagrangian submanifolds |authorlink=Alan Weinstein |journal=Adv Math |volume=6 |issue=3 |year=1971 |pages=329–46 |doi=10.1016/0001-8708(71)90020-X }}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{Springer|author=Ü. Lumiste|title=Symplectic Structure|id=s/s091860}}&lt;br /&gt;
* [[Gennadi Sardanashvily|Sardanashvily, G.]], Fibre bundles, jet manifolds and Lagrangian theory. Lectures for theoreticians,[http://xxx.lanl.gov/abs/0908.1886 arXiv: 0908.1886]&lt;br /&gt;
* {{planetmath reference|id=3672|title=Examples of symplectic manifolds}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Symplectic Manifold}}&lt;br /&gt;
[[Category:Differential topology]]&lt;br /&gt;
[[Category:Symplectic geometry]]&lt;br /&gt;
[[Category:Hamiltonian mechanics]]&lt;br /&gt;
[[Category:Smooth manifolds]]&lt;/div&gt;</summary>
		<author><name>91.157.210.180</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=%C3%95&amp;diff=226123</id>
		<title>Õ</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=%C3%95&amp;diff=226123"/>
		<updated>2012-08-07T16:11:20Z</updated>

		<summary type="html">&lt;p&gt;91.157.13.121: Noted Saaremaa dialect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If your weight loss program is not giving we the right results, then we are reading the right article. We maybe making big strenuous efforts in purchase to get rid of weight however they may not be having a terrific impact. So now it is very the time to concentrate on little factors that go a long method in purchase to achieve efficient weight reduction. The simple strategies reported below are the tips which may function wonders for you plus they are truly easy to follow.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Food is the gas of the body plus you should understand which though fasting is included inside the long list of methods to lose weight it&#039;s at the end of the day a especially unhealthy practice. Instead of getting oily and spiced up food stuffs you will want to start the consumption of cereals and foods that have a high fiber and grain content. One of the better ways to lose weight fast is the intake of 2 servings of fruit and 5 servings of veggies a day.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;The best foods for weight loss are fresh all-natural food, nutritionally thick, significant inside fiber, low in fat and calories, low in sodium and processed sugars. They also consist of higher amounts of complex carbohydrates, fibers, high quality proteins and significant water content. Some of the greatest foods to eat in purchase to lose weight are greens, fruits, legumes, baked potato, complete grain foods (including wholemeal pasta, oatmeal, muesli, etc), boiled brown rice, baked potato and fresh fish.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Many folks join gyms as a result of the structure and atmosphere that a gym provides. There are pricey machines, advantageous classes, plus trainers available at gyms which could enable we remain on track. But if you are simply going to the gym to utilize the equipment, why not save cash plus create a gym at house? You do not have to have a treadmill plus fat machines. There are many aerobic exercises which you can do at house, and we can usually purchase dumbbells to employ. Buy some good walking shoes or a jump rope to take full benefit of the benefits of these exercises plus lose pounds.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;11 Say no to white carbohydrates. This includes white rice, white flour treatments like bread, pastries plus starchy greens such as [http://safedietplansforwomen.com/how-to-lose-weight-fast how to lose weight fast] potatoes. Instead loads up the body on fiber rich foods and lean protein.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;The fact of the matter is the fact that even though you need to shed pounds and look better, you still have to eat. Where the problem comes in is not constantly how much you eat, but what we eat. That is the difference between burning fat or gaining more.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;The little secrets mentioned above are nothing however, tiny changes inside a diet that confirm to be really powerful inside terms of your fat reduction efforts. Along with implementing these changes you furthermore have to learn more about a complete weight reduction program that may promote powerful fat loss.&lt;/div&gt;</summary>
		<author><name>91.157.13.121</name></author>
	</entry>
</feed>