Was bedeutet diese eckige Klammer und Klammernotation [first1, last1]?


136

Ich habe Nummernkreise gesehen, die als [first1,last1)und dargestellt sind [first2,last2).

Ich würde gerne wissen, was eine solche Notation bedeutet.


3
[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.
Darioo

8
Ein besserer Ort für diese Frage wäre math.stackexchange.com (IMHO). Aber das macht nichts! :)
xk0der

8
Denken Sie als Mnemonik, dass die eckige Klammer diesen Wert erreicht, was "bis einschließlich" bedeutet. Und die runde Klammer ist weicher und weniger restriktiv: "bis zu, aber nicht einschließlich".
Eric Leschinski

Als Programmierer erinnere ich mich immer an die erweiterte Backus-Naur-Form, wenn ich eckige Klammern sehe - en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form
RBT

2
Ich empfehle dies auf math.SE zu migrieren
Ben Leggiero

Antworten:


225

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:

  • (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
Dies ergibt sich aus der Voralgebra der Grundschule, in der Sie etwas über die Funktionen f (x) und die Domäne und den Bereich der Funktion lernen, wobei eine Funktion wie f (x) = x ^ 2 einen Bereich von 0 bis zur positiven Unendlichkeit haben würde, der mit bezeichnet wird [0, ∞).
John Merlino

1
@ Timbo ∞ ist keine Zahl.
JakeD

2
@pycoder Ihre Definition der Zahl scheint unnötig einschränkend. en.wikipedia.org/wiki/Surreal_number
Timbo

2
@JakeD In Bezug auf Ihren ersten Kommentar haben Sie Recht, dass Unendlichkeit keine Zahl ist, weshalb die Menge [0, ∞) sie nicht enthält.
Wjandrea

1
∞ ist keine Ordnungszahl , mit der Sie rechnen können. Bei der Beantwortung von Fragen wie "Wie viele Ganzzahlen gibt es?" Ist dies jedoch eine gültige Kardinalzahl. Es ist auch, wie in diesem Fall, als Limit
Kevin Wright

37

Das ist ein halboffenes Intervall .

  • Ein geschlossenes Intervall [a,b] enthält die Endpunkte.
  • Ein offenes Intervall (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).


15

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:

    1. Die Nummer ist enthalten ,
    2. Diese Seite des Intervalls ist geschlossen ,
  • Die Klammern (und )Mittel:

    1. Die Nummer ist ausgeschlossen ,
    2. Diese Seite des Intervalls ist offen .

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 :

  • [1,10]

Beachten Sie, wie das Wort inclusiveverwendet wurde. Wenn wir den Endpunkt ausschließen möchten, aber denselben Bereich "abdecken" möchten, müssen wir den Endpunkt verschieben:

  • [1,11]

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:

  • Mathematisch ist tendenziell eine -Basis.
  • Bestimmte Programmiersprachen tendenziell Null -Basis, wie C, C ++, Javascript, Python, während andere Sprachen wie Mathematica, Fortran, Pascal sind eins-Basis.

Diese Unterschiede können bei der Implementierung mathematischer Algorithmen wie for-Schleifen zu subtilen Zaunpfostenfehlern führen , auch bekannt als " Off-by-One" -Fehler.

Ganzzahlen

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:

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

Einige Programmiersprachen würden im Gegensatz dazu das erste Element als zero'th relatives Element bezeichnen.

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

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 -1Bias.

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 < Nmit 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 <= NNomenklatur 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

Gleitkomma

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 :

  • (0,1) = 1e-M .. 0,999 ...
  • (0,1] = 1e-M .. 1,0
  • [0,1) = 0,0 .. 0,999 ...
  • [0,1] = 0,0 .. 1,0

Wobei M ein Maschinen-Epsilon ist . Aus diesem Grund wird const float EPSILON = 1e-#im C-Code manchmal eine Redewendung 1e-6für eine 32-Bit-Gleitkommazahl angezeigt. Diese SO-Frage Garantiert EPSILON etwas? hat einige vorläufige Details. Für eine umfassendere Antwort siehe FLT_EPSILONund 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:

  • Sie möchten 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 .


1

Es kann eine mathematische Konvention bei der Definition eines Intervalls sein, in dem eckige Klammern "extrem inklusive" und runde Klammern "extrem exklusiv" bedeuten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.