Bu köşeli parantez ve parantez parantez gösterimi [ilk1, son1) ne anlama geliyor?


137

I olarak temsil numara tayflarını görmüş [first1,last1)ve [first2,last2).

Böyle bir gösterimin ne anlama geldiğini bilmek istiyorum.


3
[first, last)diğerlerinin de belirttiği gibi yarı açık bir aralıktır. Bazı ders kitaplarında, bu da [first, last>aynı anlama gelir ve aynı anlama sahiptir, sadece sözdizimi farklıdır.
darioo

8
Bu soru için daha iyi bir yer math.stackexchange.com (IMHO) olabilir. Aman neyse! :)
xk0der

8
Bir Anımsatıcı olarak, köşeli parantezin "en fazla ve dahil" anlamına gelen bu değeri yakaladığını düşünün. Ve yuvarlak parantez daha yumuşak ve daha az kısıtlayıcıdır: "en fazla ama dahil değil" anlamına gelir.
Eric Leschinski

Bir programcı olarak köşeli parantez gördüğümde bana her zaman Genişletilmiş Backus-Naur formunu hatırlatıyor - en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form
RBT

2
Bunu matematiğe taşımanızı tavsiye ederim.SE
Ben Leggiero

Yanıtlar:


228

Köşeli ayraç, aralığın sonunun kapsayıcı olduğu anlamına gelir - listelenen öğeyi içerir. Parantez, sonun özel olduğu ve listelenen öğeyi içermediği anlamına gelir . Dolayısıyla [first1, last1), aralık ile başlar first1(ve onu içerir), ancak hemen önce biter last1.

Tam sayılar varsayarsak:

  • (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
Bu, f (x) fonksiyonları ve f (x) = x ^ 2 gibi bir fonksiyonun 0 ila pozitif sonsuzluk aralığına sahip olduğu f (x) fonksiyonlarını ve fonksiyonun alanını ve aralığını öğrendiğiniz ilkokul öncesi cebirden gelişir. [0, ∞).
JohnMerlino

1
@Timbo ∞ bir sayı değildir.
JakeD

2
@pycoder sayı tanımınız gereksiz yere sınırlayıcı görünüyor. en.wikipedia.org/wiki/Surreal_number
Timbo

2
@JakeD İlk yorumunuzla ilgili olarak, sonsuzluğun bir sayı olmadığı bir şekilde haklısınız, bu nedenle [0, ∞) kümesi onu içermiyor.
wjandrea

1
∞, aritmetik yapabileceğiniz türden bir sıra sayısı değildir . Ancak, "Kaç tane tam sayı vardır?" Gibi soruları yanıtlarken geçerli bir ana sayıdır. Aynı zamanda, bu durumda olduğu gibi, bir sınır
Kevin Wright 21

37

Bu yarı açık bir aralık .

  • Kapalı bir aralık , bitiş noktalarını [a,b] içerir .
  • Açık bir aralık onları (a,b) hariç tutar .

Sizin durumunuzda, aralığın başlangıcındaki bitiş noktası dahil edilir, ancak bitiş hariçtir. Yani "ilk1 <= x <son1" aralığı anlamına gelir.

Yarı açık aralıklar programlamada kullanışlıdır çünkü döngü için ortak deyime karşılık gelirler:

for (int i = 0; i < n; ++i) { ... } 

Burada i [0, n) aralığındadır.


15

Aralık gösterimi kavramı hem Matematik hem de Bilgisayar Bilimlerinde ortaya çıkmaktadır . Matematiksel gösterimde [, ], (, )belirtmektedir alan (ya da bir dizi bir aralığın).

  • Parantez [ve ]anlamı:

    1. Numara dahildir ,
    2. Aralığın bu tarafı kapalıdır ,
  • Parantez (ve )anlamı:

    1. Numara hariçtir ,
    2. Aralığın bu tarafı açık .

Karışık durumlara sahip bir aralığa "yarı açık" denir .

Örneğin, 1 .. 10 (dahil) arasındaki ardışık tamsayı aralığı şu şekilde belirtilir :

  • [1,10]

Kelimenin nasıl inclusivekullanıldığına dikkat edin . Bitiş noktasını hariç tutmak , ancak aynı aralığı "kapsamak" istiyorsak , bitiş noktasını taşımamız gerekir:

  • [1,11)

Aralığın hem sol hem de sağ kenarları için aslında 4 permütasyon vardır:

(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

Bunun Matematik ve Bilgisayar Bilimleri ile nasıl bir ilişkisi var?

Dizi dizinleri , içinde olduğunuz alana bağlı olarak farklı bir uzaklık kullanma eğilimindedir :

  • Matematik tek tabanlı olma eğilimindedir .
  • C, C ++, Javascript, Python gibi belirli programlama dilleri sıfır tabanlı olma eğilimindeyken , Mathematica, Fortran, Pascal gibi diğer diller tek tabanlıdır.

Bu farklılıklar, for-loop'lar gibi Matematiksel algoritmaları uygularken , örtük çit sonrası hatalarına , yani tek tek hatalara yol açabilir .

tamsayılar

Örneğin ilk birkaç asal sayı [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]gibi bir kümemiz veya dizimiz varsa , Matematikçiler ilk öğeye 1st mutlak öğe olarak başvururlar . Örneğin, indeksi belirtmek için alt simge gösteriminin kullanılması:

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

Bazı programlama dilleri, aksine, ilk öğeye zero'th göreceli öğe olarak atıfta bulunur .

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

Dizi indeksleri [0, N-1] aralığında olduğundan, o zaman açıklık amacıyla, 0 .. N aralığı için aynı sayısal değeri, örneğin a gibi metinsel gürültü eklemek yerine tutmak "güzel" olacaktır.-1 sapma .

Örneğin, C veya JavaScript'te, bir N öğe dizisi üzerinde yineleme yapmak için bir programcı i = 0, i < N, biraz daha ayrıntılı [0, N-1] yerine [0, N) aralığı ile ortak deyimini yazar :

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>

Matematikçiler, 1'den saymaya başladıkları için bunun yerine i = 1, i <= Nisimlendirmeyi kullanırlar, ancak şimdi sıfır tabanlı bir dilde dizi ofsetini düzeltmemiz gerekiyor.

Örneğin

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>

Kenara :

0 tabanlı olan programlama dilleri size bir gerekebilir kludge bir Matematiksel 1 tabanlı algoritma kullanmak için bir kukla zero'th elemanın. ör. Python Dizini Başlangıcı

Kayan nokta

Aralık gösterimi, kayan noktalı sayılar için ince hatalardan kaçınmak için de önemlidir.

Özellikle Bilgisayar Grafiklerinde kayan nokta sayıları ile uğraşırken (renk dönüşümü, hesaplama geometrisi, animasyon hareket hızı / karıştırma, vb.) Çoğu kez normalleştirilmiş sayılar kullanılır. Yani 0,0 ile 1,0 arasındaki sayılar.

Uç noktaların kapsayıcı mı yoksa dışlayıcı mı olduğu uç durumları bilmek önemlidir :

  • (0,1) = 1e-M .. 0.999 ...
  • (0,1] = 1e-M .. 1.0
  • [0,1) = 0.0 .. 0.999 ...
  • [0,1] = 0.0 .. 1.0

M'nin bir makine epsilon olduğu yerde . Bu nedenle, bazen 32 bitlik bir kayan nokta sayısı için const float EPSILON = 1e-#C kodunda (örneğin 1e-6) deyim görebilirsiniz . Bu SO sorusu EPSILON herhangi bir garanti veriyor mu? bazı ön detaylara sahiptir. Daha kapsamlı bir yanıt için bkz. FLT_EPSILONVe David Goldberg'in Kayan Nokta Aritmetiği Hakkında Her Bilgisayar Bilimcisinin Bilmesi Gerekenler

Bazı rasgele sayı üreteci uygulamaları random(), daha uygun olan 0.0 .. 1.0 yerine 0.0 .. 0.999 ... aralığında değerler üretebilir. Koddaki uygun yorumlar bunu [0.0,1.0) veya [0.0,1.0] olarak belgeleyecektir, bu nedenle kullanım konusunda belirsizlik yoktur.

Misal:

  • random()Renkler yaratmak istiyorsunuz . Sırasıyla kırmızı, yeşil ve mavi kanallarla 24 bit piksel oluşturmak için üç kayan nokta değerini işaretsiz 8 bitlik değerlere dönüştürürsünüz. random()Sizin tarafınızdan verilen aralığa bağlı olarak near-white(254,254,254) veya white(255,255,255) ile sonuçlanabilir.
     +--------+-----+
     |random()|Byte |
     |--------|-----|
     |0.999...| 254 | <-- error introduced
     |1.0     | 255 |
     +--------+-----+

Kayan nokta hassasiyeti ve aralıklarla sağlamlığı hakkında daha fazla ayrıntı için Christer Ericson'ın Gerçek Zamanlı Çarpışma Algılama , Bölüm 11 Sayısal Sağlamlık , Bölüm 11.3 Sağlam Kayan Nokta Kullanımı'na bakın .


1

Köşeli parantezlerin "aşırı kapsayıcı" ve yuvarlak parantezlerin "aşırı dışlayıcı" anlamına geldiği bir aralığın tanımında matematiksel bir kural olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.