此方括号和括号括号表示的是什么[first1,last1)?


136

我看到了以[first1,last1)和表示的数字范围[first2,last2)

我想知道这种表示法的含义。


3
[first, last)正如其他人所指出的,这是一个半开放时间间隔。在某些教科书中,这也被写成[first, last>并具有完全相同的含义,只是语法不同。
darioo 2010年

8
这个问题最好的地方是math.stackexchange.com(IMHO)。但是不要紧!:)
xk0der 2010年

8
作为助记符,认为方括号抓住了该值,意思是“直到并包括”。圆括号的含义更柔和,限制更小:“最多但不包括”。
埃里克·莱斯钦斯基

作为程序员,每当我看到方括号时,它总是让我想起Backus-Naur扩展形式-en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form
RBT

2
我建议将其迁移到math.SE
Ben Leggiero

Answers:


225

方括号表示范围的末尾包含在内 -包括列出的元素。括号表示end是互斥的,并且不包含列出的元素。因此[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 2014年

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. 间隔的这一侧是打开的

具有混合状态的间隔称为“半开”

例如,从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循环)时,这些差异可能会导致细微的篱笆柱错误,也就是一站式错误。

整数

如果我们有一个集合或数组,例如前几个素数[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ],那么数学家会将第一个元素称为1st 绝对 元素。即使用下标符号表示索引:

  • 一个1 = 2
  • 一个2 = 3
  • 一个10 = 29

相反,某些编程语言会将第一个元素称为zero'th 相对元素。

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

由于数组索引在[0,N-1]范围内,因此为了清楚起见,对于范围0..N保持相同的数值而不是添加诸如偏差之类的文本噪声将是“不错的” -1

例如,在C或JavaScript中,要遍历N个元素的数组,程序员将编写i = 0, i < N间隔为[0,N)而不是稍微冗长的[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是语言,你可能需要一个杂牌的虚拟第零使用基于1 -数学算法元素。例如Python索引开始

浮点

间隔符号对于浮点数也很重要,以避免微妙的错误。

当处理浮点数时,尤其是在计算机图形学中(颜色转换,计算几何,动画缓和/融合等),通常会使用标准化数。即,介于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的实时碰撞检测,第11章,数值稳健性,第11.3节“ 稳健浮点用法”


1

在间隔的定义中,这可以是数学惯例,其中方括号表示“极值包含”,而圆括号表示“极值排除”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.