Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Происхождение [ править ]

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

Эдсгер В. Дейкстра позже написал соответствующую заметку Почему нумерация должна начинаться с нуля [8] в 1982 году, анализируя возможные конструкции индексов массивов, заключая их в цепное неравенство, объединяя резкие и стандартные неравенства с четырьмя возможностями, демонстрируя это, по его убеждению. Массивы с отсчетом от нуля лучше всего представлены неперекрывающимися диапазонами индексов, которые начинаются с нуля, имея в виду открытые, полуоткрытые и закрытые интервалы, как и действительные числа. Критерии Дейкстры для предпочтения этого соглашения в деталях заключаются в том, что оно представляет пустые последовательности более естественным образом ( 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», особенно если она носит вводный характер. Один из классических примеров был в первом издании K&R . В последние годы эта черта также наблюдалась среди многих математиков-математиков , где многие конструкции нумеруются с 0.

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

Числовые свойства [ править ]

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

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

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

а + s × ( я - 1)

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

а + с × я

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

Однако язык, желающий индексировать массивы от 1, может принять соглашение, согласно которому каждый адрес массива представлен как a ′ = a - s ; то есть вместо использования адреса первого элемента массива такой язык будет использовать адрес вымышленного элемента, расположенного непосредственно перед первым фактическим элементом. Выражение индексации для индекса, основанного на 1, тогда будет:

а '+ s × я

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

На первый взгляд фиктивный элемент плохо масштабируется для многомерных массивов. При индексировании многомерных массивов с нуля наивное (непрерывное) преобразование в линейное адресное пространство (систематическое изменение одного индекса за другим) выглядит проще, чем при индексировании с одного. Например, при отображении трехмерного массива на линейный массив 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 ] вычисляется по формуле r = zMN + yM + x . Организация всех массивов с индексами на основе 1 ([1 ≤ x ′P ], [1 ≤ y ′N ], [1 ≤ z ′M ], [1 ≤ r ′M⋅N⋅P ]), и предполагая аналогичное расположение элементов, дает r ′ = ( z ′ - 1) ⋅ MN+ ( y ′ - 1) ⋅ M + ( x ′ - 0) для доступа к тому же элементу, что, возможно, выглядит более сложным. Конечно, r ' = r + 1, поскольку [ z = z ′ - 1], [ y = y ′ - 1] и [ x = x ′ - 1]. Простой и повседневный пример - позиционная система обозначений, которая стала возможной с изобретением нуля. В позиционном обозначении десятки, сотни, тысячи и все другие цифры начинаются с нуля, только единицы начинаются с единицы. [12]

  •    

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

Наука [ править ]

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

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

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

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

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

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

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

Другие поля [ править ]

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

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

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

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

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

24-часовые часы и международный стандарт ISO 8601 используют 0 для обозначения первого (нулевого) часа дня.

Станции Кингс-Кросс в Лондоне, Эдинбург-Хеймаркет и станции в Уппсале , Йонаго , Стокпорте и Кардиффе имеют платформу 0 .

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

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

Ноль иногда используется в адресах улиц , особенно в схемах, где четные числа находятся на одной стороне улицы, а нечетные - на другой. В данном случае речь является знаковым Christ Church Кембридж на Кембридж, Массачусетс «S Harvard Square , адрес которого находится 0 Garden Street.

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

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

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

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

См. Также [ править ]

  • Аппроксимация нулевого порядка
  • Поочередная ошибка

Ссылки [ править ]

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