Ich habe Nummernkreise gesehen, die als [first1,last1)
und dargestellt sind [first2,last2)
.
Ich würde gerne wissen, was eine solche Notation bedeutet.
Ich habe Nummernkreise gesehen, die als [first1,last1)
und dargestellt sind [first2,last2)
.
Ich würde gerne wissen, was eine solche Notation bedeutet.
Antworten:
Eine Klammer bedeutet, dass das Ende des Bereichs inklusive ist - es enthält das aufgelistete Element. Eine Klammer bedeutet, dass end exklusiv ist und das aufgelistete Element nicht enthält. Also für [first1, last1)
beginnt der Bereich mit first1
(und enthält), aber endet kurz vor last1
.
Angenommene ganze Zahlen:
Das ist ein halboffenes Intervall .
[a,b]
enthält die Endpunkte.(a,b)
schließt sie aus.In Ihrem Fall ist der Endpunkt am Anfang des Intervalls enthalten, das Ende jedoch ausgeschlossen. Es bedeutet also das Intervall "first1 <= x <last1".
Halboffene Intervalle sind bei der Programmierung nützlich, da sie der allgemeinen Redewendung für Schleifen entsprechen:
for (int i = 0; i < n; ++i) { ... }
Hier liegt i im Bereich [0, n).
Das Konzept der Intervall - Notation kommt in bis sowohl Mathematik und Informatik. Die mathematische Notation [
, ]
, (
, )
bezeichnet die Domäne (oder Bereich ) eines Intervalls.
Die Klammern [
und ]
Mittel:
Die Klammern (
und )
Mittel:
Ein Intervall mit gemischten Zuständen wird als "halboffen" bezeichnet .
Zum Beispiel würde der Bereich aufeinanderfolgender Ganzzahlen von 1 bis 10 (einschließlich) als solcher notiert :
Beachten Sie, wie das Wort inclusive
verwendet wurde. Wenn wir den Endpunkt ausschließen möchten, aber denselben Bereich "abdecken" möchten, müssen wir den Endpunkt verschieben:
Sowohl für den linken als auch für den rechten Rand des Intervalls gibt es tatsächlich 4 Permutationen:
(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
In welcher Beziehung steht dies zu Mathematik und Informatik?
Array-Indizes verwenden in der Regel einen anderen Versatz, je nachdem, in welchem Feld Sie sich befinden:
Diese Unterschiede können bei der Implementierung mathematischer Algorithmen wie for-Schleifen zu subtilen Zaunpfostenfehlern führen , auch bekannt als " Off-by-One" -Fehler.
Wenn wir eine Menge oder ein Array haben, beispielsweise von den ersten Primzahlen [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
, würden Mathematiker das erste Element als 1st
absolutes Element bezeichnen. dh Verwenden der tiefgestellten Notation zur Bezeichnung des Index:
Einige Programmiersprachen würden im Gegensatz dazu das erste Element als zero'th
relatives Element bezeichnen.
Da der Array - Indizes liegt im Bereich [0, N-1] dann aus Gründen der Übersichtlichkeit wäre es „nett“ sein , den gleichen numerischen Wert für den Bereich zu halten 0 .. N anstelle von textueller Zugabe Rauschen , wie beispielsweise einen -1
Bias.
Zum Beispiel würde ein Programmierer in C oder JavaScript, um über ein Array von N Elementen zu iterieren, das gemeinsame Idiom von i = 0, i < N
mit dem Intervall [0, N) anstelle des etwas ausführlicheren [0, N-1] schreiben :
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>
Da Mathematiker bei 1 anfangen zu zählen, würden sie stattdessen die i = 1, i <= N
Nomenklatur verwenden, aber jetzt müssen wir den Array-Offset in einer auf Null basierenden Sprache korrigieren.
z.B
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>
Nebenbei :
In Programmiersprachen , die 0-basiert sind , haben Sie vielleicht eine Notwendigkeit kludge ein Element der nullten Dummy einen mathematischen 1-basierten Algorithmus. zB Python Index Start
Die Intervallnotation ist auch für Gleitkommazahlen wichtig, um subtile Fehler zu vermeiden.
Beim Umgang mit Gleitkommazahlen, insbesondere in der Computergrafik (Farbkonvertierung, Rechengeometrie, Lockerung / Überblendung von Animationen usw.), werden häufig normalisierte Zahlen verwendet. Das heißt, Zahlen zwischen 0,0 und 1,0.
Es ist wichtig, die Randfälle zu kennen, wenn die Endpunkte inklusive oder exklusiv sind :
Wobei M ein Maschinen-Epsilon ist . Aus diesem Grund wird const float EPSILON = 1e-#
im C-Code manchmal eine Redewendung 1e-6
für eine 32-Bit-Gleitkommazahl angezeigt. Diese SO-Frage Garantiert EPSILON etwas? hat einige vorläufige Details. Für eine umfassendere Antwort siehe FLT_EPSILON
und David Goldbergs Was jeder Informatiker über Gleitkomma-Arithmetik wissen sollte
Einige Implementierungen eines Zufallszahlengenerators random()
können Werte im Bereich von 0,0 bis 0,999 anstelle der bequemeren 0,0 bis 1,0 erzeugen. Richtige Kommentare im Code dokumentieren dies als [0.0,1.0) oder [0.0,1.0], sodass keine Unklarheiten hinsichtlich der Verwendung bestehen.
Beispiel:
random()
Farben erzeugen . Sie konvertieren drei Gleitkommawerte in vorzeichenlose 8-Bit-Werte, um ein 24-Bit-Pixel mit roten, grünen und blauen Kanälen zu generieren. Abhängig von dem von random()
Ihnen ausgegebenen Intervall erhalten Sie möglicherweise near-white
(254,254,254) oder white
(255,255,255). +--------+-----+
|random()|Byte |
|--------|-----|
|0.999...| 254 | <-- error introduced
|1.0 | 255 |
+--------+-----+
Weitere Informationen zur Gleitkommapräzision und Robustheit mit Intervallen finden Sie in Christer Ericsons Echtzeit-Kollisionserkennung , Kapitel 11 Numerische Robustheit , Abschnitt 11.3 Robuste Gleitkommaverwendung .
[first, last)
ist ein halboffenes Intervall, wie andere angemerkt haben. In einigen Lehrbüchern wird dies auch so geschrieben[first, last>
und hat genau die gleiche Bedeutung, nur die Syntax ist unterschiedlich.