Лексикографический порядок — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Добавлены поля определений. Формулировка переделана в терминах последовательностей. Псевдокод удобнее для чтения. Английская вики.)
Строка 1: Строка 1:
 
== Определение ==
 
== Определение ==
Пусть нам дан алфавит <tex> \Sigma </tex>, на котором определен линейный порядок.
+
{{Определение
 +
|definition=Пусть даны две последовательности <tex> ~A = a_1 a_2 ... a_n </tex>  и <tex> ~B = b_1 b_2 ... b_m </tex> <br>
 +
Тогда последовательность <tex> ~A </tex> '''лексикографически меньше''' последовательности <tex> ~B </tex>, если: <br>
 +
1. <tex> n<m </tex> и при этом <tex> a_i=b_i </tex> для всех <tex>i \in [1;n] </tex> <br>
 +
'''или'''
 +
2. <tex> \mathcal {9} k\leqslant min(n, m): a_k<b_k </tex>  и при этом <tex> \mathcal {8} j < k ~a_j = b_j </tex>
 +
}}
  
Говорят, что слово <tex> ~A </tex> меньше слова <tex> ~B </tex>, если выполнено одно из следующих условий:
+
Приведем псевдокод сравнения последовательностей:
 
+
  '''function''' Сompare(A, B : '''string''') // Возвращает "LESS", если A < B, "MORE", если A > B, или "EQUAL", если последовательности равны
# Слово <tex> ~A </tex> является префиксом слова <tex> ~B </tex>.
+
  '''for''' i = 1 .. min(len(A), len(B))
# Cуществует <tex> i </tex>  <tex> \ge 0 </tex> такое, что для всех <tex> j < i </tex> выполнено неравенство <tex> A_j = B_j </tex>, а <tex> A_i < B_i </tex>.
+
    '''if''' (A[i] < B[i])   // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны
Приведем псевдокод сравнения слов:
+
      '''return''' LESS
  function Сompare(A, B : string) // Возвращает "<" (если A < B), ">" (если A > B), или "=", (если строки равны)
+
    '''if''' (A[i] > B[i])   // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны
    for i = 1 .. min(len(A), len(B))
+
      '''return''' MORE
        if (A[i] < B[i])  
+
  '''if''' (len(A) < len(B)) // А - префикс В, но не равна ей.
            return <
+
    '''return''' LESS
        if (A[i] > B[i])  
+
  '''if''' (len(A) > len(B)) // В - префикс А, но не равна ей.
            return >
+
    '''return''' MORE
    // Одна из строк является префиксом другой
+
  '''return''' EQUAL // Длины последовательностей и все элементы равны
    if (len(A) < len(B))
+
{{Определение
        return <
+
|definition=Последовательности записаны в '''лексикографическом порядке (in lexicographical order)''', если для любых <tex> i<j </tex> выполняется неравенство <tex> S_i<S_j </tex>, где <tex> S_i </tex> и <tex> S_j </tex> последовательности с номерами <tex> i </tex> и <tex> j </tex>.
    if (len(A) > len(B))
+
}}
        return >
 
    return = // Длины строк и все символы равны
 
 
 
Слова записаны в лексикографическом порядке, если для любых <tex> i<j </tex> выполняется неравенство <tex> S_i<S_j </tex>, где <tex> S_i </tex> и <tex> S_j </tex> слова с номерами <tex> i </tex> и <tex> j </tex>.
 
 
Например, слово "сон" лексикографически меньше слова "сонный", так как оно является его префиксом. Слово "низ" лексикографически меньше слова "нос", поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.
 
Например, слово "сон" лексикографически меньше слова "сонный", так как оно является его префиксом. Слово "низ" лексикографически меньше слова "нос", поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.
 
 
== Примеры ==
 
== Примеры ==
 
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).
 
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).
Строка 31: Строка 32:
  
 
* [http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Лексикографический порядок]
 
* [http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Лексикографический порядок]
 +
*[http://en.wikipedia.org/wiki/Lexicographical_order Lexicographical order]
  
 
[[Категория: Дискретная математика и алгоритмы]]
 
[[Категория: Дискретная математика и алгоритмы]]
  
 
[[Категория: Комбинаторика ]]
 
[[Категория: Комбинаторика ]]

Версия 21:20, 5 декабря 2013

Определение

Определение:
Пусть даны две последовательности [math] ~A = a_1 a_2 ... a_n [/math] и [math] ~B = b_1 b_2 ... b_m [/math]

Тогда последовательность [math] ~A [/math] лексикографически меньше последовательности [math] ~B [/math], если:
1. [math] n\lt m [/math] и при этом [math] a_i=b_i [/math] для всех [math]i \in [1;n] [/math]
или

2. [math] \mathcal {9} k\leqslant min(n, m): a_k\lt b_k [/math] и при этом [math] \mathcal {8} j \lt k ~a_j = b_j [/math]


Приведем псевдокод сравнения последовательностей:

function Сompare(A, B : string) // Возвращает "LESS", если A < B, "MORE", если A > B, или "EQUAL", если последовательности равны
  for i = 1 .. min(len(A), len(B))
    if (A[i] < B[i])   // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны
      return LESS
    if (A[i] > B[i])   // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны
      return MORE
  if (len(A) < len(B)) // А - префикс В, но не равна ей.
    return LESS
  if (len(A) > len(B)) // В - префикс А, но не равна ей.
    return MORE
  return EQUAL // Длины последовательностей и все элементы равны
Определение:
Последовательности записаны в лексикографическом порядке (in lexicographical order), если для любых [math] i\lt j [/math] выполняется неравенство [math] S_i\lt S_j [/math], где [math] S_i [/math] и [math] S_j [/math] последовательности с номерами [math] i [/math] и [math] j [/math].

Например, слово "сон" лексикографически меньше слова "сонный", так как оно является его префиксом. Слово "низ" лексикографически меньше слова "нос", поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.

Примеры

  1. Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).
  2. Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.
  3. Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.

Ссылки