Null-basierte Nummerierung

Null-basierte Nummerierung ist ein Weg von Nummerierung in dem das ursprüngliche Element von a Reihenfolge wird zugewiesen Index 0, anstatt der Index 1, wie es im Alltag typisch ist nicht mathematisch oder Nichtprogrammierung Umstände. Unter der nullbasierten Nummerierung wird das Anfangselement manchmal als als als bezeichnet Zeroth Element,[1] eher als das Erste Element; Zeroth ist ein geprägt Ordinalzahl entsprechend der Nummer Null. In einigen Fällen gehören ein Objekt oder ein Wert, das (ursprünglich) nicht (ursprünglich) zu einer bestimmten Sequenz gehören, aber natürlich vor ihrem ursprünglichen Element platziert werden kann, das Nuloth -Element bezeichnet werden. Es besteht weder eine breite Übereinstimmung hinsichtlich der Richtigkeit der Verwendung von Zero als Ordinal (noch in Bezug auf die Verwendung des Laufzeits Zeroth) wie es Unklarheiten für alle nachfolgenden Elemente der Sequenz schafft, wenn es keinen Kontext hat.

Die Nummerierungssequenzen ab 0 sind in der Mathematik -Notation weit verbreitet, insbesondere in Kombinatorik, obwohl Programmiersprachen für die Mathematik in der Regel aus 1 index.[2][3][4] Im Informatik, Array Indizes beginnen normalerweise bei 0 in modernen Programmiersprachen, sodass Computerprogrammierer möglicherweise verwenden Zeroth in Situationen, in denen andere verwenden könnten Erste, und so weiter. In einigen mathematischen Kontexten kann ohne Verwirrung eine nullbasierte Nummerierung verwendet werden Erste; Zum Beispiel a Nullen -Derivat einer Funktion ist die Funktion selbst, die durch erhalten wurde durch Unterscheidung Null mal. Eine solche Verwendung entspricht der Benennung eines Elements, das nicht ordnungsgemäß zur Sequenz gehört, sondern vor dem Vorgehen: Das Nullenivat ist überhaupt nicht wirklich ein Derivat. Allerdings genau wie das Erstesivat geht dem voraus Zweites Derivat, so tut auch das Nullen -Derivat (oder die ursprüngliche Funktion selbst) gehen vor der Erstesivat.

Computerprogrammierung

Herkunft

Martin Richards, Schöpfer der BCPL Sprache (ein Vorläufer von C), entworfene Arrays, die bei 0 als natürliche Position initiieren, um mit dem Zugriff auf den Array -Inhalt in der Sprache zuzugreifen, da der Wert von a Zeiger p Als Adresse wird auf die Position zugreift p + 0 im Speicher.[5][6] BCPL wurde zuerst für die kompiliert IBM 7094; Die Sprache führte nein vor Laufzeit IndirektionssucheDie durch diese Arrays bereitgestellte indirekte Optimierung wurde zum Kompilierungszeitpunkt durchgeführt.[6] Die Optimierung war dennoch wichtig.[6][7]

Edsger W. Dijkstra später schrieb eine relevante Notiz Warum die Nummerierung bei Null beginnen sollte[8] 1982 analysieren Sie die möglichen Entwürfe von Arrayindizes, indem sie sie in eine gekettete Ungleichheit einschließen und scharfe und Standardungleichheiten zu vier Möglichkeiten kombinieren, was demonstriert, dass auf seine Verurteilung keine Arrays auf Nullbasis durch nicht überlappende Indexbereiche dargestellt werden, die bei Null beginnen , anspielend auf Offene, halbe und geschlossene Intervalle Wie bei den realen Zahlen. Die Kriterien von Dijkstra für die Bevorzugung dieser Konvention sind ausführlich, dass es leere Sequenzen auf natürlichere Weise darstellt (ai < a?) als geschlossene "Intervalle" (ai ≤ (a–1)?) Und die mit halb offenen "Intervallen" von Naturals entspricht der Länge einer Subsequenz dem oberen minus der unteren Grenze (ai < b gibt (ba) Mögliche Werte für i, mit a, b, i alle Ganzzahlen).

Verwendung in Programmiersprachen

Diese Verwendung ergibt Programmiersprachen, einschließlich C, Java, und Lispeln. In diesen drei werden Sequenztypen (C -Arrays, Java -Arrays und -Listen sowie Lisp -Listen und Vektoren) beginnend mit dem Null -Index indiziert. Insbesondere in C, wo Arrays eng miteinander verbunden sind Zeiger Arithmetik, dies sorgt für eine einfachere Implementierung: Das Index bezieht sich auf einen Versatz aus der Ausgangsposition eines Arrays, sodass das erste Element einen Versatz von Null hat.

Referenzierspeicher durch eine Adresse und ein Offset wird direkt in dargestellt Computerhardware Auf praktisch allen Computerarchitekturen erleichtert dieses Design -Detail in C auf Kosten einiger menschlicher Faktoren. In diesem Zusammenhang ist die Verwendung von "Zeroth" als Ordinal nicht streng richtig, sondern eine weit verbreitete Gewohnheit in diesem Beruf. Andere Programmiersprachen, wie z. Forran oder Cobol, haben Array -Indexs, die mit einem beginnen, weil sie als gemeint waren hochrangige Programmiersprachenund als solche mussten sie eine Korrespondenz zu den üblichen haben Ordnungszahlen die vordiere Erfindung der Null um lange.

Pascal Ermöglicht den Bereich eines Arrays von allen ordinalen Typen (einschließlich aufgezählter Typen). Apl Ermöglicht das Einstellen des Indexursprungs auf 0 oder 1 während der Laufzeit programmatisch.[9][10] Einige neuere Sprachen, wie z. Lua und Visual Basic, haben aus dem gleichen Grund dieselbe Konvention verabschiedet.

Null ist der niedrigste, nicht signierte Ganzzahlwert, einer der grundlegendsten Typen bei der Programmierung und Hardwaredesign. In Informatik, Null wird daher oft als Basisfall für viele Arten von numerisch verwendet Rekursion. Beweise und andere Arten von mathematischen Argumentation in der Informatik beginnen oft mit Null. Aus diesen Gründen ist es in der Informatik nicht ungewöhnlich, dass sie von Null und nicht von einem von Null und nicht von einem.

Hacker und Informatiker nennen oft das erste Kapitel einer Veröffentlichung "Kapitel 0", insbesondere wenn es sich um einführende Natur handelt. Eine der klassischen Instanzen war in der ersten Ausgabe von K & r. In den letzten Jahren wurde dieses Merkmal auch bei vielen beobachtet reine Mathematiker, wo viele Konstruktionen von 0 nummeriert sind.

Wenn ein Array zur Darstellung eines Zyklus verwendet wird, ist es zweckmäßig, den Index mit a zu erhalten Modulo -Funktion, was zu Null führen kann.

Numerische Eigenschaften

Mit null basierter Nummerierung kann ein Bereich als halb geöffnet ausgedrückt werden Intervall, [0,n), im Gegensatz zum geschlossenen Intervall, [1,n]. Leere Bereiche, die häufig in Algorithmen auftreten, sind schwierig mit einem geschlossenen Intervall auszudrücken, ohne auf stumme Konventionen wie [1,0] zurückzugreifen. Aufgrund dieser Eigenschaft verringert sich die nullbasierte Indexierung möglicherweise möglicherweise Off-by-One und Zaunpostenfehler.[8] Andererseits zählt die Wiederholung n wird im Voraus berechnet, wodurch die Verwendung von Zählen von 0 bis n–1 (inklusiv) weniger intuitiv. Einige Autoren bevorzugen eine basierte Indexierung, da sie enger der Art und Weise entspricht, wie Entitäten in anderen Kontexten indiziert werden.[11]

Ein weiteres Eigentum dieser Konvention ist in der Verwendung von Modulararithmetik wie in modernen Computern implementiert. Normalerweise die Modulo -Funktion Karten Sie alle Ganzzahlmodulo N zu einer der Zahlen 0, 1, 2, ..., N - 1, wo N ≥ 1. Aus diesem Grund können viele Formeln in Algorithmen (z.

Zeigervorgänge können aufgrund der oben erwähnten zugrunde liegenden Adresse/Offset-Logik auch eleganter auf einen Null-basierten Index ausgedrückt werden. Um zu veranschaulichen, nehme an a ist der Speicheradresse des ersten Elements eines Arrays und i ist der Index des gewünschten Elements. Um die Adresse des gewünschten Elements zu berechnen, wird die gewünschte Adresse durch diesen Ausdruck berechnet, wenn die Indexnummern von 1 zählen:

a + s × (i - 1)

wo s ist die Größe jedes Elements. Im Gegensatz dazu wird der Ausdruck: Wenn die Indexzahlen von 0 zählen, wird:

a + s × i

Dieser einfachere Ausdruck ist effizienter zu berechnen Laufzeit.

Eine Sprache, die Arrays aus 1 indexieren möchte a'= as; Das heißt, anstatt die Adresse des ersten Array -Elements zu verwenden, würde eine solche Sprache die Adresse eines fiktiven Elements verwenden, das sich unmittelbar vor dem ersten tatsächlichen Element befindet. Der Indexierungsausdruck für einen 1-basierten Index wäre dann:

a' + s × i

Daher ist der Effizienzvorteil zur Laufzeit der Null-basierten Indexierung nicht inhärent, sondern ein Artefakt der Entscheidung, ein Array mit der Adresse seines ersten Elements und nicht der Adresse des fiktiven Zeroth-Elements darzustellen. Die Adresse dieses fiktiven Elements könnte jedoch sehr gut die Adresse eines anderen Elements im Speicher sein, der nicht mit dem Array zusammenhängt.

Oberflächlich über skaliert das fiktive Element nicht gut auf mehrdimensionale Arrays. Die Indizierung mehrdimensionaler Arrays von Null macht eine naive (zusammenhängende) Konvertierung in einen linearen Adressraum (systematisch variieren ein Index nach dem anderen) einfacher als bei der Indexierung von einem. Zum Beispiel beim Zuordnen des dreidimensionalen Arrays zu einem linearen Array l [M · nanisch] beide mit M · nanisch Elemente, der Index r im linearen Array zum Zugriff auf ein bestimmtes Element mit L [r] = A [z][y][x] in einer nullbasierten Indexierung, d. H. [0 ≤ x < P], [0 ≤ y < N], [0 ≤ z < M] und [0 ≤ r < M · nanisch], wird berechnet von r = zMN + yM + x. Organisation aller Arrays mit 1 basierten Indizes ([1 ≤ x'P], [1 ≤ y 'N], [1 ≤ z 'M], [1 ≤ r'M · nanisch]) und Annahme einer analogen Anordnung der Elemente gibt r' = (z ' - 1) ≤MN + (y ' - 1) ≤M + (x' - 0) Zu demselben Element zugreifen, was wohl komplizierter aussieht. Na sicher, r' = r + 1, seit [z = z ' - 1], [y = y ' - 1], und [x = x' - 1]. Ein einfaches Beispiel und ein einfaches Beispiel für das Alltag ist Positionsnotation was die Erfindung der Null ermöglicht hat. In der Positionsnotation beginnen Zehn, Hunderte, Tausende und alle anderen Ziffern mit Null, nur Einheiten beginnen bei einem.[12]

  • Null-Basierte Indizes
    x
    y
    0 1 2 .. .. 8 9
    0 00 01 02 08 09
    1 10 11 12 18 19
    2 20 21 22 28 29
    ..
    ..
    8 80 81 82 88 89
    9 90 91 92 98 99
    Der Tabelleninhalt repräsentiert den Index r
  •    
  • Einer-Basierte Indizes
    x'
    y '
    1 2 3 .. .. 9 10
    1 01 02 03 09 10
    2 11 12 13 19 20
    3 21 22 23 29 30
    ..
    ..
    9 81 82 83 89 90
    10 91 92 93 99 100
    Der Tabelleninhalt repräsentiert den Index r'

Diese Situation kann zu einer gewissen Verwirrung in der Terminologie führen. In einem Null-basierten Indexierungsschema ist das erste Element "Elementnummer Null". Ebenso ist das zwölfte Element "Elementnummer elf". Daher erscheint eine Analogie der Ordnungszahlen zu der Anzahl der nummerierten Objekte; der höchste Index von n Objekte werden sein n - 1 und es bezieht sich auf die nTH Element. Aus diesem Grund wird das erste Element manchmal als das bezeichnet Zeroth Element, um Verwirrung zu vermeiden.

Wissenschaft

Im Mathematik, viele Zahlensequenzen oder von Polynome werden von nichtnegativen Ganzzahlen indiziert, zum Beispiel die Bernoulli -Zahlen und die Glockenzahlen.

Sowohl Mechanik und Statistiken, die Nulle Moment wird definiert und repräsentiert die Gesamtmasse im Fall von physikalisch Dichteoder Gesamtwahrscheinlichkeit, d. H. Eins, für a Wahrscheinlichkeitsverteilung.

Das Nullengesetz der Thermodynamik wurde nach den ersten, zweiten und dritten Gesetzen formuliert, aber als grundlegender angesehen, damit der Name.

In der Biologie soll ein Organismus keine Auftragsabsicht haben, wenn er "überhaupt keine Absicht von irgendetwas" zeigt. Dies würde eine Situation einschließen, in der der genetisch festgelegte Phänotyp des Organismus zu einem Fitness -Nutzen für sich selbst führt, da er nicht "beabsichtigt" hatte, seine Gene auszudrücken.[13] Im ähnlichen Sinne kann ein Computer aus dieser Perspektive als absichtliche Entität von Null betrachtet werden, da er nicht beabsichtigt, den Code der von ihm ausgeführten Programme auszudrücken.[14]

In biologischen oder medizinischen Experimenten sollen anfängliche Messungen, die vor einer experimentellen Zeit durchgeführt wurden, am 0 -Tag des Experiments sein.

In der Genomik werden sowohl 0 basierte als auch 1 basierte Systeme für Genomkoordinaten verwendet.

Patient Null (oder Indexfall) ist der Anfang Geduldig in dem Bevölkerungsstichprobe von einem epidemiologisch Ermittlung.

Andere Felder

Das Jahr null existiert nicht in der weit verbreiteten Gregorianischer Kalender oder in seinem Vorgänger die Julian Kalender. Unter diesen Systemen das Jahr 1 v. Chr wird gefolgt von Ad 1. Es gibt jedoch ein Jahr Null in astronomisches Jahr Nummerierung (wo es mit dem julianischen Jahr 1 v. Chr. Und in zusammenfällt) und in ISO 8601: 2004 (wo es mit dem Gregorianischen Jahr 1 v. Chr.) Und in allen zusammenfällt Buddhist und Hindu -Kalender.

In vielen Ländern die Erdgeschoss In Gebäuden gilt eher als Bodennummer 0 als als "1. Stock", wobei die Namenskonvention normalerweise in den Vereinigten Staaten von Amerika vorkommt. Dies macht einen konsistenten Satz mit unterirdischen Böden, die mit negativen Zahlen gekennzeichnet sind.

Während die Ordinal von 0 hauptsächlich in Gemeinschaften verwendet wird, die direkt mit Mathematik, Physik und Informatik verbunden sind, gibt es auch Instanzen in klassischer Musik. Der Komponist Anton Bruckner betrachtete seine früh Symphonie in D -Moll Um nicht in den Kanon seiner Werke einzubeziehen, schrieb er 'Gilt Nick' in die Punktzahl und einen Kreis mit einer Querlatte, um es "ungültig" zu bedeuten. Aber posthum wurde diese Arbeit als bekannt als als bekannt Symphonie Nr. 0 in d minor, obwohl es tatsächlich danach geschrieben wurde Symphonie Nr. 1 in C -Moll. Es gibt noch früher Symphonie in f -Moll von Bruckners, der manchmal genannt wird Nr. 00. Der russische Komponist Alfred Schnittke schrieb auch a Symphonie Nr. 0.

An einigen Universitäten, darunter Oxford und Cambridge, bezieht sich "Woche 0" oder gelegentlich "Noughth Week" auf die Woche vor der ersten Woche der Vorträge in einer Amtszeit. In Australien bezeichnen einige Universitäten dies als "o Woche", was als Wortspiel dient "Orientierungswoche". Als Parallele sind die einleitenden Wochen bei Universitätserziehungen in Schweden werden im Allgemeinen "Nolling" genannt (Nulling).

Das Luftwaffe der Vereinigten Staaten Startet jeden Mittwoch das Grundausbildungen, und die erste Woche (von acht) wird mit dem folgenden Sonntag beginnt. Die vier Tage vor diesem Sonntag werden oft als "Nullwoche" bezeichnet.

24-Stunden-Uhren und der internationale Standard ISO 8601 Verwenden Sie 0, um die erste (Zeroth) Stunde des Tages zu bezeichnen. Auch die 12-stündige Uhren benutzt in Japan Verwenden Sie 0, um die Stunde unmittelbar nach Mitternacht und Mittag zu bezeichnen, im Gegensatz zu 12, die an anderer Stelle verwendet werden, um Verwirrung zu vermeiden ob 12 Uhr und 12 Uhr darstellen Mittag oder Mitternacht.

King's Cross Station in London, Edinburgh Haymarketund Stationen in Uppsala, Yonago, Stockport und Cardiff haben eine Plattform 0.

Robert CrumbZeichnungen für die erste Ausgabe von Zap Comix wurden gestohlen, also zog er eine ganz neue Ausgabe an, die als Ausgabe 1 veröffentlicht wurde. Später inking er seine Fotokopien des gestohlenen Kunstwerks neu und veröffentlichte es als Ausgabe 0.

Das Brüssel klingeln Die Straße in Belgien ist nummeriert R0. Es wurde nach der Ringstraße gebaut AntwerpenAber Brüssel (die Hauptstadt) wurde als eine grundlegendere Anzahl verdient. Ebenso die (unvollendete) Orbitalautobahn herum Budapest in Ungarn heißt M0.

Null wird manchmal verwendet in StraßenadressenBesonders in Schemata, in denen auch Zahlen eine Straßenseite sind und auf der anderen Seite ungerade Zahlen. Ein typisches Beispiel ist Christ Church an Harvard Square, deren Adresse 0 Garden Street ist.

In der ersten Formel 1 wird die Nummer 1, wenn ein verteidigender Weltmeister in der folgenden Saison nicht antritt passieren sowohl in den Jahren 1993 als auch 1994, wobei Damon Hill die Nummer 0 in beiden Spielzeiten trug, als der Titelverteidiger Nigel Mansell nach 1992 kündigte und der Titelverteidiger Alain Prost nach 1993 kündigte.

Ein chronologisches Prequel einer Reihe kann als 0 nummeriert werden, wie z. Ring 0: Geburtstag oder Zork Zero.

Das Schweizer Bundesbahn Anzahl bestimmte Klassen von Rolling -Aktien von Null zum Beispiel von Null, Re 460 000 bis 118.

Im Bereich der Fiktion, Isaac asimov Schließlich fügte ihm ein Nullengesetz hinzu Drei Gesetze der Robotikim Wesentlichen vier Gesetze machen.

Siehe auch

Verweise

Zitate

  1. ^ M. Seed, Graham (1965). Eine Einführung in die objektorientierte Programmierung in C ++ mit Anwendungen in Computergrafiken (2. Aufl.). Britische Bibliothek: Springer. p. 391. ISBN 1852334509. Abgerufen 11. Februar 2020.
  2. ^ Steve Eddins und Loren Shure. "Matrixindizierung in Matlab". Abgerufen 23. Februar 2021.
  3. ^ "Wie man: Elemente von Listen erhalten". Wolfram. Abgerufen 23. Februar 2021.
  4. ^ "Indexierung von Arrays, Matrizen und Vektoren". Maplesoft. Abgerufen 23. Februar 2021.
  5. ^ Martin Richards (1967). Das BCPL -Referenzhandbuch (PDF). Massachusetts Institute of Technology. p. 11.
  6. ^ a b c Mike Hoye. "Zitat benötigt". Abgerufen 28. Januar 2014.
  7. ^ Tom van Vleck (1995). "Die IBM 7094 und CTSS". Abgerufen 28. Januar 2014.
  8. ^ a b Dijkstra, Edsger Wybe (2. Mai 2008). "Warum die Nummerierung bei Null beginnen sollte (EWD 831)". E. W. Dijkstra Archiv. Universität von Texas in Austin. Abgerufen 2011-03-16.
  9. ^ Brown, Jim (Dezember 1978). "Zur Verteidigung von Indexursprung 0". ACM Sigapl APL Quote Quad. 9 (2): 7. doi:10.1145/586050.586053. S2CID 40187000.
  10. ^ Hui, Roger. "Ist der Indexursprung 0 ein Hindernis?". jsoftware.com. Jsoftware. Abgerufen 19. Januar 2015.
  11. ^ Programmieren Microsoft® Visual C#® 2005 von Donis Marshall
  12. ^ Sal Khan. Math 1. Klasse / Platzwert / Zahlennetz. Khan Akademie. Abgerufen 28. Juli, 2018. YouTube -Titel: Nummer Grid / Counting / Early Math / Khan Academy
  13. ^ Byrne, Richard W. "Der Denkape: Evolutionäre Ursprünge der Intelligenz". Abgerufen 2010-05-18.
  14. ^ Dunbar, Robin. "Die menschliche Geschichte - eine neue Geschichte der Evolution der Menschheit". Abgerufen 2010-05-18.

Quellen