Ik heb nummerreeksen gezien die worden weergegeven als [first1,last1)
en [first2,last2)
.
Ik zou graag willen weten wat zo’n notatie betekent.
Antwoord 1, autoriteit 100%
Een haakje – [
of ]
– betekent dat het einde van het bereik inclusiefis — het bevat het vermelde element. Een haakje – (
of )
– betekent dat het einde exclusiefis en niet het vermelde element bevat. Dus voor [first1, last1)
begint het bereik met first1
(en omvat het), maar eindigt het net voor last1
.
Ervan uitgaande dat gehele getallen:
- (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
Antwoord 2, autoriteit 15%
Dat is een halfopen interval.
- Een gesloten interval
[a,b]
bevatde eindpunten. - Een open interval
(a,b)
sluit ze uit.
In jouw geval is het eindpunt aan het begin van het interval wel inbegrepen, maar het einde niet. Het betekent dus het interval “first1 <= x < last1”.
Half-open intervallen zijn handig bij het programmeren omdat ze overeenkomen met het gebruikelijke idioom voor looping:
for (int i = 0; i < n; ++i) { ... }
Hier is i in het bereik [0, n).
Antwoord 3, autoriteit 7%
Het concept van intervalnotatiekomt voor in zowelwiskunde als informatica. De wiskundige notatie [
, ]
, (
, )
geeft het domein(of bereik) van een interval.
-
De haakjes
[
en]
betekenen:- Het nummer is inbegrepen,
- Deze kant van het interval is gesloten,
-
De haakjes
(
en)
betekenen:- Het nummer is uitgesloten,
- Deze kant van het interval is open.
Een interval met gemengde toestanden wordt “half-open”genoemd.
Het bereik van opeenvolgende gehele getallen van 1 .. 10 (inclusief) wordt bijvoorbeeld als zodanig genoteerd:
- [1,10]
Let op hoe het woord inclusive
werd gebruikt. Als we het eindpunt willen uitsluitenmaar hetzelfde bereik willen “bedekken”, moeten we het eindpunt verplaatsen:
- [1,11)
Voor zowel de linker- als de rechterrand van het interval zijn er in feite 4 permutaties:
(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
Hoe verhoudt dit zich tot wiskunde en informatica?
Array-indexen hebben de neiging om een andereoffset te gebruiken, afhankelijk van in welk veld u zich bevindt:
- Wiskunde is meestal een-gebaseerd.
- Bepaalde programmeertalen zijn meestal nul-gebaseerd, zoals C, C++, Javascript, Python, terwijl andere talen zoals Mathematica, Fortran en Pascal één-gebaseerd zijn.
Deze verschillen kunnen leiden tot subtiele hekfouten , aka, Off-by-one bugs bij het implementeren van wiskundige algoritmen zoals voor-lussen.
Integers
Als we een set of array hebben, zeg dan van de eerste paar Primes [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
, zouden wiskundigen verwijzen naar het eerste element als de 1st
absoluut -element. d.w.z. met behulp van subscript-notatie om de index aan te duiden:
- A 1 = 2
- A 2 = 3
- :
- A 10 = 29
Enkele programmeertalen, in tegenstrijdigheid, verwijzen naar het eerste element als de zero'th
relatief element.
- A [0] = 2
- A [1] = 3
- :
- a [9] = 29
Aangezien de array-indexen in het bereik zijn [0, N-1] dan voor duidelijkheidsdoeleinden zou het “Nice” zijn om dezelfde numerieke waarde voor het bereik te houden 0 .. N in plaats van tekstuele ruis zoals een -1
bias.
Bijvoorbeeld in C of JavaScript, om te herhalen over een reeks N-elementen, zou een programmeur het gewone idioom van i = 0, i < N
met het interval [0, N) in plaats van de iets meer uitgebreide [0, N-1]:
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>
Antwoord 4
Het kan een wiskundige conventie zijn in de definitie van een interval waarbij vierkante haken ‘extreem inclusief’ betekenen en ronde haken ‘extreem exclusief’.