Saya telah melihat kisaran angka diwakili sebagai [first1,last1)
dan [first2,last2)
.
Saya ingin tahu apa arti notasi tersebut.
Saya telah melihat kisaran angka diwakili sebagai [first1,last1)
dan [first2,last2)
.
Saya ingin tahu apa arti notasi tersebut.
Jawaban:
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:
Itu selang setengah terbuka .
[a,b]
mencakup titik akhir.(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).
Konsep notasi interval yang muncul di kedua Matematika dan Ilmu Komputer. Notasi Matematika [
, ]
, (
, )
menunjukkan domain (atau kisaran ) dari selang.
Kurung [
dan ]
sarana:
Tanda kurung (
dan )
berarti:
Interval dengan keadaan campuran disebut "setengah terbuka" .
Misalnya, kisaran bilangan bulat berurutan dari 1 .. 10 (inklusif) akan dinotasikan seperti itu:
Perhatikan bagaimana kata inclusive
itu digunakan. Jika kita ingin mengecualikan titik akhir tetapi "menutupi" rentang yang sama kita perlu memindahkan titik akhir:
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:
Perbedaan-perbedaan ini dapat menyebabkan kesalahan posting pagar halus , alias, bug off-by-one ketika menerapkan algoritma matematika seperti for-loop.
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:
Beberapa bahasa pemrograman, dalam kontradiksi, akan merujuk pada elemen pertama sebagai elemen zero'th
relatif .
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 -1
bias.
Misalnya, dalam C atau JavaScript, untuk beralih pada array elemen N, programmer akan menulis idiom umum i = 0, i < N
dengan 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 <= N
nomenklatur 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
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 :
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_EPSILON
dan 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:
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 .
[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.