เครื่องหมายวงเล็บเหลี่ยมและเครื่องหมายวงเล็บวงเล็บหมายถึงอะไร [first1, last1)


137

ฉันได้เห็นช่วงที่แสดงเป็นตัวเลขและ[first1,last1)[first2,last2)

ฉันอยากทราบว่าสัญกรณ์ดังกล่าวหมายถึงอะไร


3
[first, last)เป็นช่วงครึ่งเปิดตามที่คนอื่นสังเกต ในหนังสือเรียนบางเล่มยังเขียนว่า[first, last>และมีความหมายเหมือนกันทุกประการมีเพียงไวยากรณ์เท่านั้นที่แตกต่างกัน
darioo

8
สถานที่ที่ดีกว่าสำหรับคำถามนี้คือmath.stackexchange.com (IMHO) แต่ไม่เป็นไร! :)
xk0der

8
ในฐานะ Mnemonic ให้คิดว่าวงเล็บเหลี่ยมยึดกับค่านั้นซึ่งหมายความว่า "up to and including" และวงเล็บกลมมีความหมายที่นุ่มนวลกว่าและมีข้อ จำกัด น้อยกว่า: "มากถึง แต่ไม่รวม"
Eric Leschinski

ในฐานะโปรแกรมเมอร์เมื่อใดก็ตามที่ฉันเห็นวงเล็บเหลี่ยมมันทำให้ฉันนึกถึงแบบฟอร์ม Extended Backus-Naur - en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form
RBT

2
ฉันขอแนะนำให้ย้ายข้อมูลนี้เป็นคณิตศาสตร์ SE
Ben Leggiero

คำตอบ:


228

วงเล็บหมายความว่าจุดสิ้นสุดของช่วงนั้นรวมอยู่ด้วยซึ่งรวมถึงองค์ประกอบที่ระบุไว้ วงเล็บหมายความว่าส่วนท้ายเป็นแบบพิเศษและไม่มีองค์ประกอบในรายการ ดังนั้นสำหรับ[first1, last1)ช่วงเริ่มต้นด้วยfirst1(และรวมถึงมัน) last1แต่ปลายก่อน

สมมติว่าจำนวนเต็ม:

  • (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
สิ่งนี้วิวัฒนาการมาจากพีชคณิตชั้นประถมศึกษาปีที่คุณเรียนรู้เกี่ยวกับฟังก์ชัน f (x) และโดเมนและช่วงของฟังก์ชันโดยที่ฟังก์ชันเช่น f (x) = x ^ 2 จะมีช่วง 0 ถึงอินฟินิตี้บวกแสดงด้วย [0, ∞)
JohnMerlino

1
@ Timbo ∞ไม่ใช่ตัวเลข
JakeD

2
@pycoder คำจำกัดความของจำนวนของคุณดูเหมือน จำกัด โดยไม่จำเป็น en.wikipedia.org/wiki/Surreal_number
Timbo

2
@JakeD เกี่ยวกับความคิดเห็นเริ่มต้นของคุณคุณคิดถูกแล้วว่าอินฟินิตี้ไม่ใช่ตัวเลขดังนั้นทำไมเซต [0, ∞) จึงไม่รวมไว้
wjandrea

1
∞ไม่ได้เป็นลำดับหมายเลขของการจัดเรียงที่คุณสามารถทำเลขคณิตกับ แต่เป็นตัวเลขที่ถูกต้องเมื่อตอบคำถามเช่น "จำนวนเต็มมีกี่จำนวน" นอกจากนี้ในกรณีนี้ใช้ได้อย่างสมบูรณ์แบบเป็นขีด จำกัด
Kevin Wright

37

นั่นเป็นช่วงเวลาครึ่งเปิด

  • ช่วงเวลาปิด[a,b] รวมถึงจุดสิ้นสุด
  • ช่วงเวลาที่เปิด(a,b) ไม่รวมไว้

ในกรณีของคุณจุดสิ้นสุดที่จุดเริ่มต้นของช่วงเวลาจะรวมอยู่ด้วย แต่จุดสิ้นสุดจะไม่รวมอยู่ด้วย ดังนั้นจึงหมายถึงช่วงเวลา "first1 <= x <last1"

ช่วงครึ่งเปิดมีประโยชน์ในการเขียนโปรแกรมเนื่องจากสอดคล้องกับสำนวนทั่วไปสำหรับการวนซ้ำ:

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

นี่ฉันอยู่ในช่วง [0, n)


15

แนวคิดของสัญกรณ์ช่วงเวลาเกิดขึ้นทั้งในคณิตศาสตร์และวิทยาศาสตร์คอมพิวเตอร์ สัญกรณ์คณิตศาสตร์[, ], (, )หมายถึงโดเมน (หรือ ช่วง ) ของช่วงเวลา

  • วงเล็บ[และ]วิธีการ:

    1. จำนวนที่มีการรวม ,
    2. ด้านข้างของช่วงเวลานี้จะปิด ,
  • วงเล็บ(และ)วิธีการ:

    1. ไม่รวมหมายเลขนี้ ,
    2. ด้านนี้ของช่วงเวลาเปิดอยู่

ช่วงเวลาที่มีสถานะผสมเรียกว่า"half-open" "ครึ่งเปิด"

ตัวอย่างเช่นช่วงของจำนวนเต็มต่อเนื่องตั้งแต่ 1 .. 10 (รวม) จะได้รับการระบุดังนี้:

  • [1,10]

สังเกตว่าคำinclusiveนั้นถูกใช้อย่างไร หากเราต้องการยกเว้นจุดสิ้นสุด แต่ "ครอบคลุม" ช่วงเดียวกันเราจำเป็นต้องย้ายจุดสิ้นสุด:

  • [1,11)

สำหรับขอบทั้งซ้ายและขวาของช่วงเวลามีการเรียงสับเปลี่ยน 4 แบบ:

(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

สิ่งนี้เกี่ยวข้องกับคณิตศาสตร์และวิทยาศาสตร์คอมพิวเตอร์อย่างไร?

ดัชนีอาร์เรย์มักจะใช้ค่าชดเชยที่แตกต่างกันขึ้นอยู่กับว่าคุณอยู่ในช่องใด:

  • คณิตศาสตร์มีแนวโน้มที่จะเป็นหนึ่งเดียวชั่น
  • ภาษาโปรแกรมบางภาษามีแนวโน้มที่จะใช้เลขศูนย์เช่น C, C ++, Javascript, Python ในขณะที่ภาษาอื่น ๆ เช่น Mathematica, Fortran, Pascal เป็นภาษาเดียว

ความแตกต่างเหล่านี้สามารถนำไปสู่การที่ลึกซึ้งข้อผิดพลาดรั้วโพสต์ , อาคาปิดโดยหนึ่งข้อบกพร่องเมื่อใช้อัลกอริทึมทางคณิตศาสตร์เช่น for-loops

จำนวนเต็ม

ถ้าเรามีชุดหรืออาเรย์กล่าวว่าในไม่กี่ช่วงแรก[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]คณิตศาสตร์จะอ้างถึงองค์ประกอบแรกเป็น1st ที่แน่นอน องค์ประกอบ เช่นการใช้สัญกรณ์ตัวห้อยเพื่อแสดงดัชนี:

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

ภาษาโปรแกรมบางภาษาในทางตรงกันข้ามจะอ้างถึงองค์ประกอบแรกเป็นองค์ประกอบzero'th สัมพัทธ์

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

เนื่องจากดัชนีอาร์เรย์อยู่ในช่วง [0, N-1] ดังนั้นเพื่อความชัดเจนจึงควร "ดี" ที่จะเก็บค่าตัวเลขเดียวกันสำหรับช่วง 0 .. N แทนที่จะเพิ่มสัญญาณรบกวนที่เป็นข้อความเช่น a-1อคติ

ตัวอย่างเช่นใน C หรือ JavaScript ในการวนซ้ำอาร์เรย์ขององค์ประกอบ N โปรแกรมเมอร์จะเขียนสำนวนทั่วไป i = 0, i < Nด้วยช่วงเวลา [0, N) แทนที่จะเป็น verbose [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>

นักคณิตศาสตร์เนื่องจากพวกเขาเริ่มนับที่ 1 จะใช้i = 1, i <= Nระบบการตั้งชื่อแทนแต่ตอนนี้เราจำเป็นต้องแก้ไขการชดเชยอาร์เรย์ในภาษาที่ใช้ศูนย์

เช่น

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>

นอกเหนือจาก :

ในภาษาการเขียนโปรแกรมที่อิงตาม 0 คุณอาจต้องใช้kludgeขององค์ประกอบที่เป็นศูนย์จำลองเพื่อใช้อัลกอริทึมที่อิงตามคณิตศาสตร์ 1 เช่นPython Index Start

Floating-Point

สัญกรณ์ช่วงเวลายังมีความสำคัญสำหรับตัวเลขทศนิยมเพื่อหลีกเลี่ยงจุดบกพร่องเล็กน้อย

เมื่อจัดการกับตัวเลขทศนิยมโดยเฉพาะในคอมพิวเตอร์กราฟิก (การแปลงสีเรขาคณิตเชิงคำนวณการค่อยๆเปลี่ยนภาพเคลื่อนไหว / การผสม ฯลฯ ) มักจะใช้ตัวเลขมาตรฐาน นั่นคือตัวเลขระหว่าง 0.0 ถึง 1.0

สิ่งสำคัญคือต้องทราบขอบกรณีหากจุดสิ้นสุดรวมหรือไม่รวม :

  • (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 เป็นบางepsilon เครื่อง นี่คือสาเหตุที่บางครั้งคุณอาจเห็นconst float EPSILON = 1e-#สำนวนในรหัส C (เช่น1e-6) สำหรับเลขทศนิยม 32 บิต คำถามนี้EPSILON รับประกันอะไรหรือไม่? มีรายละเอียดเบื้องต้น สำหรับคำตอบที่ครอบคลุมมากขึ้นโปรดดูFLT_EPSILONและสิ่งที่นักวิทยาศาสตร์คอมพิวเตอร์ทุกคนควรรู้เกี่ยวกับเลขคณิตลอยตัวของ David Goldberg

การใช้งานตัวสร้างตัวเลขสุ่มบางอย่างrandom()อาจสร้างค่าในช่วง 0.0 .. 0.999 ... แทนที่จะเป็น 0.0 .. 1.0 ที่สะดวกกว่า ความคิดเห็นที่ถูกต้องในรหัสจะบันทึกสิ่งนี้เป็น [0.0,1.0) หรือ [0.0,1.0] ดังนั้นจึงไม่มีความคลุมเครือเกี่ยวกับการใช้งาน

ตัวอย่าง:

  • คุณต้องการสร้างrandom()สี คุณแปลงค่าทศนิยมสามค่าเป็นค่า 8 บิตที่ไม่ได้ลงชื่อเพื่อสร้างพิกเซล 24 บิตพร้อมช่องสีแดงสีเขียวและสีน้ำเงินตามลำดับ ขึ้นอยู่กับเอาต์พุตช่วงเวลาโดยrandom()คุณอาจลงท้ายด้วยnear-white(254,254,254) หรือwhite(255,255,255)
     +--------+-----+
     |random()|Byte |
     |--------|-----|
     |0.999...| 254 | <-- error introduced
     |1.0     | 255 |
     +--------+-----+

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความแม่นยำจุดลอยตัวและความทนทานกับช่วงเวลาดู Christer Ericson ของReal-Time ตรวจสอบการชน , บทที่ 11 ตัวเลขทนทานมาตรา 11.3 แข็งแกร่ง Floating-Point การใช้งาน


1

อาจเป็นการประชุมทางคณิตศาสตร์ในคำจำกัดความของช่วงเวลาที่วงเล็บเหลี่ยมหมายถึง "รวมสุดขั้ว" และวงเล็บกลม "เอกสิทธิ์เฉพาะบุคคล"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.