Що означає позначення цієї квадратної дужки та дужок [first1, last1)?


137

Я бачив діапазони чисел, представлені як [first1,last1)і [first2,last2).

Я хотів би знати, що означає таке позначення.


3
[first, last)це напіввідкритий інтервал, як зазначали інші. У деяких підручниках це також пишеться як [first, last>і має абсолютно однакове значення, лише синтаксис відрізняється.
darioo

8
Кращим місцем для цього питання буде math.stackexchange.com (IMHO). Але неважливо! :)
xk0der

8
Як Мнемонік, подумайте, що квадратна дужка захоплюється цим значенням, що означає "до і включаючи". А круглі дужки мають більш м’яке і менш обмежувальне значення: "до, але не включаючи".
Ерік Лещинський

Як програміст кожного разу, коли я бачу квадратні дужки, він завжди пригадує форму Extended Backus-Naur - en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form
RBT

2
Рекомендую перенести це на math.SE
Ben Leggiero

Відповіді:


227

Кронштейн означає, що кінець діапазону включений - він включає перелічені елементи. Дужка означає, що кінець є ексклюзивним і не містить перерахованого елемента. Отже [first1, last1), діапазон починається з first1(і включає його), але закінчується безпосередньо перед цим last1.

Припускаючи цілі числа:

  • (0, 5) = 1, 2, 3, 4
  • (0, 5] = 1, 2, 3, 4, 5
  • [0, 5) = 0, 1, 2, 3, 4
  • [0, 5] = 0, 1, 2, 3, 4, 5

3
Це розвивається з попередньої алгебри шкільної школи, де ви дізнаєтесь про функції f (x) та домен та діапазон функції, де така функція, як f (x) = x ^ 2, мала б діапазон від 0 до позитивної нескінченності, позначається з [0, ∞).
JohnMerlino

1
@Timbo ∞ - це не число.
JakeD

2
@pycoder ваше визначення числа видається зайвим обмеженням. en.wikipedia.org/wiki/Surreal_number
Тімбо

2
@JakeD Що стосується вашого первинного коментаря, ви маєте рацію таким чином, що нескінченність не є числом, отже, чому набір [0, ∞) не включає його.
wjandrea

1
∞ це не порядковий номер такого роду, з яким ви можете виконувати арифметику. Але це дійсне кардинальне число, відповідаючи на запитання типу "Скільки цілих чисел?". Це також, як і в цьому випадку, цілком справедливо як обмеження
Кевін Райт

37

Це напіввідкритий інтервал .

  • Закритий інтервал [a,b] включає кінцеві точки.
  • Відкритий інтервал (a,b) їх виключає .

У вашому випадку кінцева точка на початку інтервалу включається, але кінець виключається. Отже, це означає інтервал "first1 <= x <last1".

Напіввідкриті інтервали корисні для програмування, оскільки вони відповідають загальній ідіомі циклічного циклу:

for (int i = 0; i < n; ++i) { ... } 

Ось i знаходиться в межах [0, n).


15

Поняття інтервальної нотації випливає як з математики, так і з інформатики. Математичні позначення [, ], (, )позначають домен (або діапазон ) інтервал.

  • Дужки [і] засоби:

    1. Номер включений ,
    2. Ця сторона інтервалу закрита ,
  • Дужки (та )засоби:

    1. Номер виключений ,
    2. Ця сторона інтервалу відкрита .

Інтервал зі змішаними станами називається "напіввідкритим" .

Наприклад, діапазон послідовних цілих чисел від 1 .. 10 (включно) буде позначений як такий:

  • [1,10]

Зверніть увагу, як це слово inclusiveвживалося. Якщо ми хочемо виключити кінцеву точку, але "охопити" той самий діапазон, нам потрібно перемістити кінцеву точку:

  • [1,11)

І для лівого, і для правого краю інтервалу є фактично 4 перестановки:

(1,10) =   2,3,4,5,6,7,8,9       Set has  8 elements
(1,10] =   2,3,4,5,6,7,8,9,10    Set has  9 elements
[1,10) = 1,2,3,4,5,6,7,8,9       Set has  9 elements
[1,10] = 1,2,3,4,5,6,7,8,9,10    Set has 10 elements

Як це стосується математики та інформатики?

Індекси масивів, як правило, використовують різну зміщення залежно від того, в якому полі ви знаходитесь:

  • Математика, як правило, одна -На.
  • Деякі мови програмування мають тенденцію до нульової бази , наприклад, C, C ++, Javascript, Python, тоді як інші мови, такі як Mathematica, Fortran, Pascal, є одноосновними.

Ці відмінності можуть призвести до тонких помилок розміщення огорожі , які також називаються окремими називаються помилками при впровадженні математичних алгоритмів, таких як for-loops.

Цілі особи

Якщо у нас є набір або масив, скажімо, про перші кілька простих ліній [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ], математики будуть називати перший елемент 1st абсолютним елементом. тобто використання позначень підрозділу для позначення індексу:

  • a 1 = 2
  • a 2 = 3
  • :
  • a 10 = 29

Деякі мови програмування, всупереч, позначають перший елемент як zero'th відносний елемент.

  • a [0] = 2
  • a [1] = 3
  • :
  • a [9] = 29

Оскільки індекси масиву знаходяться в діапазоні [0, N-1], то для наочності було б "приємно" зберігати однакове числове значення для діапазону 0 .. N замість додавання текстового шуму, такого як -1зміщення.

Наприклад, в C або JavaScript, щоб перебрати масив з N елементів, програміст запише загальну ідіому i = 0, i < Nз інтервалом [0, N) замість трохи більш багатослівного [0, N-1]:

function main() {
    var output = "";
    var a = [ 2, 3, 5, 7,  11, 13, 17, 19, 23, 29 ];
    for( var i = 0; i < 10; i++ ) // [0,10)
       output += "[" + i + "]: " + a[i] + "\n";

    if (typeof window === 'undefined') // Node command line
        console.log( output )
    else
        document.getElementById('output1').innerHTML = output;
}
 <html>
     <body onload="main();">
         <pre id="output1"></pre>
     </body>
 </html>

Математики, оскільки вони починають рахувати з 1, замість цього використають i = 1, i <= Nноменклатуру, але тепер нам потрібно виправити зміщення масиву мовою на нульовій основі.

напр

function main() {
    var output = "";
    var a = [ 2, 3, 5, 7,  11, 13, 17, 19, 23, 29 ];
    for( var i = 1; i <= 10; i++ ) // [1,10]
       output += "[" + i + "]: " + a[i-1] + "\n";

    if (typeof window === 'undefined') // Node command line
        console.log( output )
    else
        document.getElementById( "output2" ).innerHTML = output;
}
<html>
    <body onload="main()";>
        <pre id="output2"></pre>
    </body>
</html>

Убік :

У мовах програмування, які 0 заснованих вам може знадобитися кладж манекен zero'th елемента для використання алгоритму математичного 1 на основі. наприклад, Початок індексу Python

Плаваюча точка

Інтервальне позначення також важливе для чисел з плаваючою комою, щоб уникнути тонких помилок.

При роботі з числами з плаваючою комою, особливо в комп’ютерній графіці (перетворення кольорів, обчислювальна геометрія, полегшення / змішування анімації тощо), часто використовуються нормовані числа. Тобто числа між 0,0 та 1,0.

Важливо знати крайні випадки , якщо кінцеві точки включно або ексклюзивні :

  • (0,1) = 1е-М .. 0,999 ...
  • (0,1] = 1е-М .. 1,0
  • [0,1) = 0,0 .. 0,999 ...
  • [0,1] = 0,0 .. 1,0

Де M - деякий машинний епсилон . Ось чому іноді ви можете бачити const float EPSILON = 1e-#ідіому в коді C (наприклад 1e-6) для 32-бітного номера з плаваючою точкою. Це ТАКЕ питання, чи гарантує EPSILON щось? має деякі попередні подробиці. Більш вичерпну відповідь див. У статті FLT_EPSILONДевіда Голдберга про те, що повинен знати кожен комп'ютерний арифметик з арифметикою з плаваючою комою

Деякі реалізації генератора випадкових чисел random()можуть створювати значення в діапазоні 0,0 .. 0,999 ... замість більш зручного 0,0 .. 1,0. Належні коментарі в коді задокументують це як [0.0,1.0) або [0.0,1.0], тому немає двозначності щодо використання.

Приклад:

  • Ви хочете генерувати random()кольори. Ви перетворюєте три значення з плаваючою комою у неподписані 8-бітні значення, щоб генерувати 24-бітний піксель з червоним, зеленим та синім каналами відповідно. Залежно від виходу інтервалу, який random()ви можете отримати, ви можете отримати near-white(254,254,254) або white(255,255,255).
     +--------+-----+
     |random()|Byte |
     |--------|-----|
     |0.999...| 254 | <-- error introduced
     |1.0     | 255 |
     +--------+-----+

Більш детальну інформацію про точність та стійкість з плаваючою комою з інтервалами див. У виявленні зіткнення в реальному часі Крістера Еріксона , Розділ 11 Числова стійкість , Розділ 11.3 Міцне використання з плаваючою комою .


1

Це може бути математичною умовою у визначенні інтервалу, де квадратні дужки означають "екстремальний включно", а круглі дужки - "екстремальний ексклюзив".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.