Apa arti dari tanda kurung siku dan kurung kurung ini [first1, last1)?

136

Saya telah melihat kisaran angka diwakili sebagai [first1,last1)dan [first2,last2).

Saya ingin tahu apa arti notasi tersebut.

Nav
sumber
3
[first, last)adalah interval setengah terbuka seperti yang telah dicatat orang lain. Dalam beberapa buku teks, ini juga ditulis sebagai [first, last>dan memiliki arti yang persis sama, hanya sintaks yang berbeda.
darioo
8
Tempat yang lebih baik untuk pertanyaan ini adalah math.stackexchange.com (IMHO). Tapi sudahlah! :)
xk0der
8
Sebagai Mnemonic, pikirkan braket persegi meraih nilai itu, yang berarti "hingga dan termasuk". Dan tanda kurung bulat lebih lembut dan kurang membatasi makna: "hingga tetapi tidak termasuk".
Eric Leschinski
Sebagai seorang programmer, setiap kali saya melihat tanda kurung siku, saya selalu mengingat bentuk Extended Backus-Naur - en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form
RBT
2
Saya sarankan untuk memigrasikan ini ke math.SE
Ben Leggiero

Jawaban:

226

Tanda kurung berarti bahwa ujung kisaran termasuk - termasuk elemen yang tercantum. Tanda kurung berarti akhir itu eksklusif dan tidak mengandung elemen yang terdaftar. Jadi untuk [first1, last1), rentang dimulai dengan first1(dan memasukkannya), tetapi berakhir tepat sebelumnya last1.

Dengan asumsi bilangan bulat:

  • (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
Michael Mrozek
sumber
3
Ini berkembang dari pra-aljabar sekolah dasar, di mana Anda belajar tentang fungsi f (x) dan domain dan rentang fungsi, di mana fungsi seperti f (x) = x ^ 2, akan memiliki kisaran 0 hingga tak terbatas positif, dilambangkan dengan [0, ∞).
JohnMerlino
1
@Timbo ∞ bukan angka.
JakeD
2
@pycoder, definisi nomor Anda sepertinya tidak perlu dibatasi. en.wikipedia.org/wiki/Surreal_number
Timbo
2
@JakeD Mengenai komentar awal Anda, Anda benar sehingga infinity bukan angka, karenanya mengapa himpunan [0, ∞) tidak memasukkannya.
wjandrea
1
∞ bukan nomor urut, jenis yang dapat Anda lakukan aritmatika. Tetapi ini adalah nomor kardinal yang valid ketika menjawab pertanyaan seperti "Ada berapa bilangan bulat?". Ini juga, seperti dalam kasus ini, sangat valid sebagai batasan
Kevin Wright
37

Itu selang setengah terbuka .

  • Interval tertutup [a,b] mencakup titik akhir.
  • Interval terbuka (a,b) tidak termasuk mereka.

Dalam kasus Anda, titik akhir pada awal interval disertakan, tetapi titik akhir tidak termasuk. Jadi itu berarti interval "first1 <= x <last1".

Interval setengah terbuka berguna dalam pemrograman karena berhubungan dengan idiom umum untuk perulangan:

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

Di sini saya berada dalam kisaran [0, n).

Mark Byers
sumber
15

Konsep notasi interval yang muncul di kedua Matematika dan Ilmu Komputer. Notasi Matematika [, ], (, )menunjukkan domain (atau kisaran ) dari selang.

  • Kurung [dan ]sarana:

    1. Jumlahnya sudah termasuk ,
    2. Sisi interval ini ditutup ,
  • Tanda kurung (dan )berarti:

    1. Jumlahnya dikecualikan ,
    2. Sisi interval ini terbuka .

Interval dengan keadaan campuran disebut "setengah terbuka" .

Misalnya, kisaran bilangan bulat berurutan dari 1 .. 10 (inklusif) akan dinotasikan seperti itu:

  • [1,10]

Perhatikan bagaimana kata inclusiveitu digunakan. Jika kita ingin mengecualikan titik akhir tetapi "menutupi" rentang yang sama kita perlu memindahkan titik akhir:

  • [1,11)

Untuk kedua tepi kiri dan kanan interval sebenarnya ada 4 permutasi:

(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

Bagaimana ini berhubungan dengan Matematika dan Ilmu Komputer?

Indeks array cenderung menggunakan offset berbeda tergantung pada bidang apa Anda berada:

  • Matematika cenderung berbasis satu .
  • Bahasa pemrograman tertentu cenderung berbasis nol , seperti C, C ++, Javascript, Python, sedangkan bahasa lain seperti Mathematica, Fortran, Pascal adalah berbasis satu.

Perbedaan-perbedaan ini dapat menyebabkan kesalahan posting pagar halus , alias, bug off-by-one ketika menerapkan algoritma matematika seperti for-loop.

Integer

Jika kita memiliki himpunan atau larik, katakanlah beberapa bilangan prima pertama, ahli [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]matematika akan menyebut elemen pertama sebagai elemen 1st absolut . yaitu Menggunakan notasi subskrip untuk menunjukkan indeks:

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

Beberapa bahasa pemrograman, dalam kontradiksi, akan merujuk pada elemen pertama sebagai elemen zero'th relatif .

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

Karena indeks array berada dalam kisaran [0, N-1] maka untuk tujuan kejelasan akan "bagus" untuk menjaga nilai numerik yang sama untuk rentang 0 .. N bukannya menambahkan suara tekstual seperti -1bias.

Misalnya, dalam C atau JavaScript, untuk beralih pada array elemen N, programmer akan menulis idiom umum i = 0, i < Ndengan interval [0, N) alih-alih sedikit lebih bertele-tele [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>

Matematikawan, karena mereka mulai menghitung pada 1, alih-alih akan menggunakan i = 1, i <= Nnomenklatur tetapi sekarang kita perlu mengoreksi offset array dalam bahasa berbasis nol.

misalnya

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>

Selain :

Dalam bahasa pemrograman yang berbasis 0 Anda mungkin perlu kludge dari elemen dummy zero'th untuk menggunakan algoritma berbasis 1 Matematika. misalnya Mulai Indeks Python

Floating-Point

Notasi interval juga penting untuk angka floating-point untuk menghindari bug halus.

Ketika berhadapan dengan angka floating-point terutama di Komputer Grafik (konversi warna, geometri komputasi, pelonggaran / pencampuran animasi, dll.) Sering kali nomor yang dinormalisasi digunakan. Artinya, angka antara 0,0 dan 1,0.

Penting untuk mengetahui kasus tepi jika titik akhir inklusif atau eksklusif :

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

Di mana M adalah beberapa epsilon mesin . Inilah sebabnya mengapa Anda terkadang melihat const float EPSILON = 1e-#idiom dalam kode C (seperti 1e-6) untuk angka floating point 32-bit. Pertanyaan SO ini Apakah EPSILON menjamin sesuatu? memiliki beberapa detail awal. Untuk jawaban yang lebih komprehensif lihat FLT_EPSILONdan Apa yang Harus Diketahui Setiap Ilmuwan Komputer Tentang Aritmatika Floating-Point

Beberapa implementasi generator bilangan acak, random()dapat menghasilkan nilai dalam kisaran 0,0 .. 0,999 ... alih-alih lebih nyaman 0,0 .. 1,0. Komentar yang tepat dalam kode akan mendokumentasikan ini sebagai [0.0.1.0) atau [0.0.1.0] sehingga tidak ada ambiguitas dalam penggunaannya.

Contoh:

  • Anda ingin menghasilkan random()warna. Anda mengonversi tiga nilai titik-mengambang ke nilai 8-bit yang tidak ditandatangani untuk menghasilkan piksel 24-bit masing-masing dengan saluran merah, hijau, dan biru. Bergantung pada output interval oleh random()Anda dapat berakhir dengan near-white(254.254.254) atau white(255.255.255).
     +--------+-----+
     |random()|Byte |
     |--------|-----|
     |0.999...| 254 | <-- error introduced
     |1.0     | 255 |
     +--------+-----+

Untuk perincian lebih lanjut tentang presisi dan ketahanan titik mengambang dengan interval, lihat Deteksi Tabrakan Real-Time Christer Ericson , Bab 11 Numerical Robustness , Bagian 11.3 Penggunaan Kuat-Titik Apung .

Michaelangel007
sumber
1

Ini bisa menjadi konvensi matematika dalam definisi interval di mana tanda kurung siku berarti "inklusif ekstral" dan kurung bulat "eksklusif ekstrem".

Eddy
sumber