이 대괄호와 괄호 대괄호 표기법은 [first1, last1)을 의미합니까?


137

나는로 표현 번호 범위 본 [first1,last1)[first2,last2).

그런 표기법의 의미를 알고 싶습니다.


3
[first, last)다른 사람들이 지적했듯이 반 개방 간격입니다. 일부 교과서에서 이것은 또한 [first, last>같은 의미 로 작성되며 구문 만 다릅니다.
darioo

8
이 질문에 대한 더 좋은 곳은 math.stackexchange.com (IMHO)입니다. 신경 쓰지 마! :)
xk0der

8
니모닉으로, 대괄호는 "최대 포함"을 의미하는 해당 값을 가져옵니다. 그리고 둥근 괄호는 더 부드럽고 덜 제한적인 의미입니다.
Eric Leschinski

- 나는 항상 나에게 확장 된 배 커스 - 나 우어 형식의 기억을 제공 대괄호를 볼 때마다 프로그래머로 en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form
통화 연결음

2
이것을 math.SE로 마이그레이션하는 것이 좋습니다.
Ben Leggiero

답변:


227

대괄호는 범위의 끝이 포함됨을 의미하며 여기에는 나열된 요소 가 포함 됩니다. 괄호는 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

1
@Timbo ∞는 숫자가 아닙니다.
JakeD

2
@pycoder 당신의 수의 정의는 불필요하게 제한적인 것 같습니다. en.wikipedia.org/wiki/Surreal_number
팀보

2
@JakeD 초기 코멘트와 관련하여, 당신은 무한대가 숫자가 아닌 방식으로 옳습니다. 따라서 세트 [0, ∞)가 그것을 포함하지 않는 이유입니다.
wjandrea

1
∞는 계산할 수 있는 수가 아닙니다 . 그러나 "정수는 몇 개입니까?"와 같은 질문에 대답 할 때 유효한 기본 숫자입니다. 이 경우와 마찬가지로 한도
Kevin Wright

37

즉 A의 반 개방 구간 .

  • 닫힌 간격 [a,b] 에는 끝 점이 포함됩니다 .
  • 열린 간격은 (a,b) 제외 됩니다.

귀하의 경우 간격이 시작될 때 끝 점이 포함되지만 끝은 제외됩니다. 따라서 "first1 <= x <last1"간격을 의미합니다.

반 개방 구간은 반복에 대한 일반적인 관용구에 해당하므로 프로그래밍에 유용합니다.

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

여기서 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과 같은 특정 프로그래밍 언어는 0 기반이지만 Mathematica, Fortran, Pascal과 같은 다른 언어는 1 기반입니다.

이러한 차이는 미묘한으로 이어질 수 있습니다 울타리 게시물 오류 , 일명, 오프별로 한 등을위한-루프와 같은 수학적 알고리즘을 구현할 때 버그.

정수

처음 몇 소수 [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]와 같이 집합이나 배열이 있으면 수학자들은 첫 번째 요소를 1st 절대 요소라고합니다. 즉 첨자 표기법을 사용하여 색인을 나타냅니다.

  • a 1 = 2
  • a 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-1] 대신 간격 [0, N)으로 공통 관용구를 씁니다 .

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명명법을 사용 하지만 이제는 0부터 시작하는 언어로 배열 오프셋을 수정해야합니다.

예 :

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 기반의 알고리즘을 사용하는 더미 0 번째 요소입니다. 예 : Python Index Start

부동 소수점

미묘한 버그를 피하기 위해 부동 소수점 숫자에도 간격 표기법이 중요합니다.

특히 컴퓨터 그래픽 (컬러 변환, 계산 기하학, 애니메이션 여유 / 혼합 등)에서 부동 소수점 숫자를 다룰 때 정규화 된 숫자가 자주 사용됩니다. 즉, 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은 일부 기계 엡실론 입니다. 32 비트 부동 소수점 숫자에 대해 const float EPSILON = 1e-#C 코드에서 (예 :와 같은 1e-6) 관용구 가 표시되는 경우가 있습니다 . 이 SO 질문 EPSILON은 무엇을 보증합니까? 예비 세부 정보가 있습니다. 보다 포괄적 인 답변을 보려면 FLT_EPSILONDavid Goldberg의 모든 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 사항을 참조하십시오.

난수 생성기의 일부 구현은 random()보다 편리한 0.0 .. 1.0 대신 0.0 .. 0.999 ... 범위의 값을 생성 할 수 있습니다. 코드에서 적절한 주석은이를 [0.0,1.0) 또는 [0.0,1.0]으로 문서화하므로 사용법에 대한 모호함이 없습니다.

예:

  • random()색상 을 생성하려고합니다 . 3 개의 부동 소수점 값을 부호없는 8 비트 값으로 변환하여 각각 빨강, 녹색 및 파랑 채널을 가진 24 비트 픽셀을 생성합니다. 출력 간격에 따라 (254,254,254) 또는 (255,255,255)로 random()끝날 수 있습니다 .near-whitewhite
     +--------+-----+
     |random()|Byte |
     |--------|-----|
     |0.999...| 254 | <-- error introduced
     |1.0     | 255 |
     +--------+-----+

간격을 사용한 부동 소수점 정밀도 및 견고성에 대한 자세한 내용은 Christer Ericson의 실시간 충돌 감지 , 11 장 수치 견고성 , 11.3 강력한 부동 소수점 사용법을 참조하십시오 .


1

대괄호는 "극단적 포함"을 의미하고 둥근 대괄호는 "극단적 독점"을 의미하는 간격을 정의 할 때 수학적 규칙이 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.