stringtranslate.com

Нумерация с нуля

Нумерация с отсчетом от нуля — это способ нумерации , при котором начальному элементу последовательности присваивается индекс  , а не индекс 1, как это типично в повседневных нематематических или непрограммных обстоятельствах. При нумерации, начинающейся с нуля, начальный элемент иногда называют нулевым элементом [1] , а не первым элементом; ноль — это придуманный порядковый номер , соответствующий числу ноль . В некоторых случаях объект или значение, которое (изначально) не принадлежит данной последовательности, но которое естественным образом может быть помещено перед ее начальным элементом, может быть названо нулевым элементом. Нет широкого согласия относительно правильности использования нуля в качестве порядкового номера (а также относительно использования термина « ноль» ), поскольку это создает двусмысленность для всех последующих элементов последовательности при отсутствии контекста.

Последовательности нумерации, начинающиеся с 0, довольно распространены в математических обозначениях, в частности в комбинаторике , хотя языки программирования для математики обычно индексируются с 1. [2] [3] [4] В информатике индексы массивов в современных языках программирования обычно начинаются с 0. , поэтому программисты могут использовать ноль в ситуациях, когда другие могут использовать сначала и так далее. В некоторых математических контекстах нумерацию, начинающуюся с нуля, можно использовать без путаницы, когда порядковые формы имеют четко установленное значение с очевидным кандидатом, который должен стоять перед первым ; например, нулевая производная функции — это сама функция, полученная путем дифференцирования в ноль раз. Такое использование соответствует названию элемента, не принадлежащего по существу последовательности, но предшествующего ей: нулевая производная на самом деле вообще не является производной. Однако так же, как первая производная предшествует второй производной , так и нулевая производная (или сама исходная функция) предшествует первой производной .

Компьютерное программирование

Источник

Мартин Ричардс , создатель языка BCPL (предшественник C ), спроектировал массивы, начинающиеся с 0, как естественную позицию для начала доступа к содержимому массива в языке, поскольку значение указателя p , используемого в качестве адреса, обращается к позиции p + 0 в памяти. [5] [6] BCPL был впервые скомпилирован для IBM 7094 ; в языке не было реализовано косвенный поиск во время выполнения , поэтому оптимизация косвенного обращения, обеспечиваемая этими массивами, выполнялась во время компиляции. [6] Тем не менее оптимизация была важна. [6] [7]

В 1982 году Эдсгер В. Дейкстра в своей соответствующей заметке «Почему нумерация должна начинаться с нуля» [8] утверждал, что индексы массивов должны начинаться с нуля, поскольку последний является наиболее натуральным числом . Обсуждает возможные конструкции диапазонов массивов, заключая их в цепочку неравенств, комбинируя точные и стандартные неравенства с четырьмя возможностями, демонстрируя, что, по его убеждению, массивы с нулевым отсчетом лучше всего представлены непересекающимися диапазонами индексов, которые начинаются с нуля, намекая на открытость . , полуоткрытые и закрытые интервалы , как и в случае с действительными числами. Критерии Дейкстры в пользу этого соглашения заключаются, в частности, в том, что оно представляет пустые последовательности более естественным образом ( ai < a  ?) , чем замкнутые «интервалы» ( ai ≤ ( a − 1) ? ), и что с полу- открытые «интервалы» натуральных чисел, длина подпоследовательности равна верхней минус нижней границе ( ai < b дает ( b - a ) возможные значения для i , где a , b , i все целые числа).

Использование в языках программирования

Такое использование вытекает из выбора дизайна, встроенного во многие влиятельные языки программирования , включая C , Java и Lisp . В этих трех типах последовательностей (массивы C, массивы и списки Java, а также списки и векторы Lisp) индексация начинается с нулевого индекса. В частности, в C, где массивы тесно связаны с арифметикой указателей , это упрощает реализацию: нижний индекс относится к смещению от начальной позиции массива, поэтому первый элемент имеет нулевое смещение.

Обращение к памяти по адресу и смещению представлено непосредственно в компьютерном оборудовании практически на всех компьютерных архитектурах, поэтому эта деталь конструкции в C упрощает компиляцию за счет некоторого человеческого фактора. В этом контексте использование «нуля» в качестве порядкового номера не совсем правильно, но это широко распространенная привычка в этой профессии. Другие языки программирования, такие как Fortran или COBOL , имеют индексы массивов, начинающиеся с единицы, поскольку они задумывались как языки программирования высокого уровня и, как таковые, должны были соответствовать обычным порядковым номерам , которые предшествовали изобретению нуля . долго.

Паскаль позволяет диапазону массива иметь любой порядковый тип (включая перечислимые типы). APL позволяет программно устанавливать начало индекса в 0 или 1 во время выполнения. [9] [10] Некоторые современные языки, такие как Lua и Visual Basic , приняли то же соглашение по той же причине.

Ноль — это наименьшее целое число без знака, один из самых фундаментальных типов в программировании и проектировании оборудования. Таким образом , в информатике ноль часто используется в качестве базового варианта для многих видов числовой рекурсии . Доказательства и другие виды математических рассуждений в информатике часто начинаются с нуля. По этим причинам в информатике нет ничего необычного в нумерации с нуля, а не с единицы.

В последние годы эта черта также наблюдалась среди многих чистых математиков , где многие конструкции нумеруются с .

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

Числовые свойства

При нумерации , начинающейся с нуля, диапазон может быть выражен как полуоткрытый интервал [0, n ) , в отличие от закрытого интервала [1, n ] . Пустые диапазоны, которые часто встречаются в алгоритмах, сложно выразить с помощью замкнутого интервала, не прибегая к таким глупым соглашениям, как [1, 0] . Благодаря этому свойству индексирование с отсчетом от нуля потенциально снижает вероятность ошибок « отклонение на единицу» и «забор» . [8] С другой стороны, количество повторений n рассчитывается заранее, что делает использование счета от 0 до n - 1 (включительно) менее интуитивным. Некоторые авторы предпочитают индексацию на основе единицы, поскольку она более точно соответствует тому, как индексируются объекты в других контекстах. [11]

Еще одним свойством этого соглашения является использование модульной арифметики , реализованной в современных компьютерах. Обычно функция по модулю отображает любое целое число по модулю N в одно из чисел 0, 1, 2, ..., N − 1 , где N ≥ 1 . По этой причине многие формулы в алгоритмах (например, для расчета индексов хеш-таблиц) можно элегантно выразить в коде с помощью операции по модулю, когда индексы массива начинаются с нуля.

Операции с указателями также могут быть более элегантно выражены с индексом, начинающимся с нуля, благодаря базовой логике адреса/смещения, упомянутой выше. Для иллюстрации предположим, что a — это адрес памяти первого элемента массива, а i — индекс нужного элемента. Чтобы вычислить адрес желаемого элемента, если номера индексов отсчитываются от 1, желаемый адрес вычисляется с помощью этого выражения:

где s — размер каждого элемента. Напротив, если индексные числа отсчитываются от 0, выражение принимает вид

Это более простое выражение более эффективно вычислять во время выполнения .

Однако язык, желающий индексировать массивы с 1, мог бы принять соглашение, согласно которому каждый адрес массива представляется как = as ; то есть вместо использования адреса первого элемента массива такой язык будет использовать адрес вымышленного элемента, расположенного непосредственно перед первым реальным элементом. Тогда выражение индексации для индекса, отсчитываемого от 1, будет иметь вид

Следовательно, выигрыш в эффективности во время выполнения индексации с отсчетом от нуля не является неотъемлемым, а является результатом решения представлять массив с адресом его первого элемента, а не с адресом вымышленного нулевого элемента. Однако адрес этого вымышленного элемента вполне может быть адресом какого-то другого элемента в памяти, не связанного с массивом.

На первый взгляд вымышленный элемент плохо масштабируется для многомерных массивов. Индексация многомерных массивов с нуля делает наивное (непрерывное) преобразование в линейное адресное пространство (систематически меняющим один индекс за другим) более простым, чем при индексировании из одного. Например, при сопоставлении трехмерного массива A[ P ][ N ][ M ] с линейным массивом L[ M⋅N⋅P ] , оба с элементами M ⋅ N ⋅ P , индекс r в линейном массиве будет получить доступ к определенному элементу с помощью L[ r ] = A[ z ][ y ][ x ] при индексации с отсчетом от нуля, т.е. [0 ≤ x < P ] , [0 ≤ y < N ] , [0 ≤ z < M ] и [0 ≤ r < M ⋅ N ⋅ P ] вычисляется по формуле

Организация всех массивов с индексами, начинающимися с 1 ( [1 ≤ x′P ] , [1 ≤ y′N ] , [1 ≤ z′M ] , [1 ≤ r′M ⋅ N ⋅ P ] ), и предполагая аналогичное расположение элементов, дает

для доступа к тому же элементу, что, возможно, выглядит более сложным. Конечно, r ′ = r + 1, поскольку [ z = z ′ – 1], [ y = y ′ – 1] и [ x = x ′ – 1]. Простой и повседневный пример — позиционная запись , ставшая возможной благодаря изобретению нуля. В позиционной записи десятки, сотни, тысячи и все остальные цифры начинаются с нуля, с единицы начинаются только единицы. [12]

Такая ситуация может привести к некоторой путанице в терминологии. В схеме индексации с отсчетом от нуля первым элементом является «элемент номер ноль»; аналогично двенадцатый элемент — это «элемент номер одиннадцать». Поэтому возникает аналогия с порядковыми числами с количеством исчисляемых предметов; наивысший индекс n объектов будет n − 1 и относится к n- му элементу. По этой причине первый элемент иногда называют нулевым элементом , чтобы избежать путаницы.

Наука

В математике многие последовательности чисел или полиномов индексируются неотрицательными целыми числами, например числа Бернулли и числа Белла .

И в механике , и в статистике определяется нулевой момент , представляющий полную массу в случае физической плотности или полную вероятность, то есть единицу, для распределения вероятностей .

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

В биологии говорят, что организм обладает интенциональностью нулевого порядка, если он «вообще не проявляет никакого намерения». Это включает в себя ситуацию, когда генетически предопределенный фенотип организма приносит пользу самому себе, поскольку он не «намеревается» экспрессировать свои гены. [13] В аналогичном смысле компьютер можно рассматривать с этой точки зрения как интенциональную сущность нулевого порядка, поскольку он не «намеревается» выражать код программ, которые он запускает. [14]

В биологических или медицинских экспериментах первоначальные измерения, сделанные до истечения времени эксперимента, считаются нулевым днем ​​эксперимента. [ нужна цитата ]

В геномике для координат генома используются как системы с отсчетом от 0, так и от 1. [ нужна цитата ]

Нулевой пациент (или индексный случай ) — это первый пациент в популяционной выборке эпидемиологического расследования .

Другие поля

Нулевой год не существует ни в широко используемом григорианском календаре , ни в его предшественнике, юлианском календаре . В этих системах за первым годом до нашей эры следует 1 год нашей эры . Однако нулевой год присутствует в нумерации астрономических лет (где он совпадает с 1-м юлианским годом до н. э.) и в ISO 8601:2004 (где он совпадает с 1-м григорианским годом до н. э.), а также во всех буддийских и индуистских календарях .

Во многих странах первый этаж в зданиях считается этажом 0, а не «первым этажом», как это принято в Соединенных Штатах Америки. Это составляет согласованный набор с подземными этажами, отмеченными отрицательными числами.

Хотя порядковый номер 0 в основном находит применение в сообществах, непосредственно связанных с математикой, физикой и информатикой, существуют также примеры в классической музыке. Композитор Антон Брукнер счел свою раннюю Симфонию ре минор недостойной включения в канон своих произведений и написал на партитуре и круге с перекладиной gilt nicht («не в счет»), имея в виду, что это означает "неверный". Но посмертно это произведение стало известно как Симфония № 0 ре минор , хотя на самом деле оно было написано после Симфонии № 1 до минор . Есть еще более ранняя Симфония фа минор Брукнера, которую иногда называют № 00 . Русский композитор Альфред Шнитке также написал Симфонию № 0 .

В некоторых университетах, включая Оксфорд и Кембридж, «нулевая неделя» или иногда «нулевая неделя» относится к неделе, предшествующей первой неделе лекций в семестре. В Австралии некоторые университеты называют это «неделей О», что является каламбуром от « недели ориентации ». Аналогично, вводные недели в университетском образовании в Швеции обычно называются nollning (обнуление).

ВВС США начинают базовую подготовку каждую среду, а первая неделя (из восьми) считается начинающейся со следующего воскресенья. Четыре дня перед этим воскресеньем часто называют «нулевой неделей».

В 24-часовом формате и международном стандарте ISO 8601 используется 0 для обозначения первого (нулевого) часа дня, что соответствует использованию 0 для обозначения первой (нулевой) минуты часа и первой (нулевой) секунды минуты. . Кроме того, в 12-часовых часах , используемых в Японии , используется 0 для обозначения часа сразу после полуночи и полудня в отличие от 12, используемого в других местах, чтобы избежать путаницы, обозначают ли 12:00 и 12:00 полдень или полночь .

Рисунки Роберта Крамба для первого выпуска Zap Comix были украдены, поэтому он нарисовал совершенно новый выпуск, который был опубликован как выпуск 1. Позже он перекрасил свои фотокопии украденных иллюстраций и опубликовал их как выпуск 0.

Кольцевая дорога Брюсселя в Бельгии имеет номер R0. Он был построен по образцу кольцевой дороги вокруг Антверпена , но Брюссель (будучи столицей) считался заслуживающим более простого номера. Точно так же (недостроенная) орбитальная автомагистраль вокруг Будапешта в Венгрии называется M0 .

Ноль иногда используется в адресах , особенно в схемах, где четные числа — это одна сторона улицы, а нечетные — другая. В качестве примера можно привести Церковь Христа на Гарвардской площади , адрес которой — 0 Гарден-стрит.

Раньше в Формуле-1 , когда действующий чемпион мира не выступал в следующем сезоне, номер 1 не присваивался ни одному гонщику, но один гонщик команды чемпиона мира носил номер 0, а другой - номер 2. Это действительно произошло как в 1993, так и в 1994 году, когда Дэймон Хилл носил номер 0 в обоих сезонах, поскольку действующий чемпион Найджел Мэнселл ушел после 1992 года, а действующий чемпион Ален Прост ушел после 1993 года. Однако в 2014 году серия перешла к водителям, имеющим персонализированные за всю карьеру числа вместо номеров, присвоенных команде, за исключением того, что действующий чемпион все еще имеет возможность носить номер 1. Поэтому 0 больше не используется в этом сценарии. Неясно, доступен ли он в качестве номера, выбранного водителем, или они должны быть в диапазоне от 2 до 99, но до сих пор он не использовался в этой системе.

Некоторые командные виды спорта позволяют выбрать 0 в качестве номера формы игрока (в дополнение к типичному диапазону 1–99). НФЛ проголосовала за разрешение этого с 2023 года.

Хронологический приквел сериала может иметь номер 0, например, Ring 0: Birthday или Zork Zero .

Швейцарские федеральные железные дороги нумеруют определенные классы подвижного состава с нуля, например, Re 460 000 до 118.

Что касается художественной литературы, Айзек Азимов в конечном итоге добавил к своим «Трём законам робототехники» нулевой закон , по сути превратив их в четыре закона.

Стандартное колесо рулетки содержит числа 0 и 1-36. Он отображается зеленым цветом, поэтому для целей ставок не классифицируется ни как «красный», ни как «черный». В карточной игре «Уно» есть числовые карты от 0 до 9, а также специальные карты в каждой цветной масти.

Смотрите также

Рекомендации

Цитаты

  1. ^ М. Сид, Грэм (1965). Введение в объектно-ориентированное программирование на C++ с приложениями в компьютерной графике (2-е изд.). Британская библиотека: Спрингер. п. 391. ИСБН 1852334509. Проверено 11 февраля 2020 г.
  2. ^ Стив Эддинс и Лорен Шур. «Матричное индексирование в MATLAB» . Проверено 23 февраля 2021 г.
  3. ^ «Как: получить элементы списков» . Вольфрам . Проверено 23 февраля 2021 г.
  4. ^ «Индексирование массивов, матриц и векторов». Мэйплсофт . Проверено 23 февраля 2021 г.
  5. ^ Мартин Ричардс (1967). Справочное руководство BCPL (PDF) . Массачусетский Институт Технологий. п. 11.
  6. ^ abc Майк Хой. "Нужна цитата" . Проверено 28 января 2014 г.
  7. ^ Том Ван Флек (1995). «IBM 7094 и CTSS» . Проверено 28 января 2014 г.
  8. ^ аб Дейкстра, Эдсгер Вайб (2 мая 2008 г.). «Почему нумерация должна начинаться с нуля (EWD 831)». Архив Э. В. Дейкстры . Техасский университет в Остине . Проверено 16 марта 2011 г.
  9. ^ Браун, Джим (декабрь 1978 г.). «В защиту происхождения индекса 0». ACM SIGAPL APL Quote Quad . 9 (2): 7. дои : 10.1145/586050.586053. S2CID  40187000.
  10. ^ Хуэй, Роджер. «Является ли индекс Origin 0 помехой?». jsoftware.com . JПрограммное обеспечение . Проверено 19 января 2015 г.
  11. ^ Программирование Microsoft® Visual C# 2005, автор Донис Маршалл.
  12. ^ Сал Хан. Математика 1-го класса/значение места/числовая сетка. Ханская академия . Проверено 28 июля 2018 г. Название на YouTube: Числовая сетка / Счет / Ранняя математика / Академия Хана.
  13. ^ Бирн, Ричард В. «Думающая обезьяна: эволюционное происхождение интеллекта» . Проверено 18 мая 2010 г.
  14. ^ Данбар, Робин. «Человеческая история – новая история эволюции человечества» . Проверено 18 мая 2010 г.

Источники