구체 수학(가제) 제2판 서문 낙서 보충

류광, 2017/11/25 19:51
구체 수학 제2판 낙서 설명을 지금부터 조금씩이라도 올리려고 합니다. 첫 편은 서문의 낙서들입니다.

지금 한창 조판 중인 구체 수학(Concrete Mathematics) 제2판의 페이지 여백에는 다양한 '낙서'가 있습니다. 그중에는 영어 단어의 중의성이나 관련 수학 지식을 이용한 일종의 말장난에 해당하는 낙서들도 있는데, 제한된 지면에서 맛을 살려서 번역하기가 상당히 까다로웠습니다. 그래서 다음과 같은 차선책을 사용하기로 했습니다(서문의 한 역주의 일부입니다).

[인용]

... 그래서 문장을 그냥 통상적인 방식으로 번역하되, 동음이의어 관계를 짐작할 수 있는 단서를 낙서나 해당 본문 문구에 포함하는 정도로(이를테면 원래의 영어 단어를 병기하는 등) 처리했다. 그리고 매번 이런 역주를 다는 것은 오히려 독자의 주의를 흐트러뜨릴 수 있으므로, 특별한 경우가 아닌한 낙서에 대한 부연 설명은 생략했음을 양해해 주기 바란다. 일부 낙서에 관한 추가 설명은 옮긴이 홈페이지(옮긴이의 글 참고)에서 제공하겠다.

번역서가 나올 때에 맞추어 마지막 낙서까지 정리하는 것을 목표로, 이 역주에서 말한 "일부 낙서에 관한 추가 설명"을 차츰 올리려고 합니다. 첫 편인 이번 글은 서문의 낙서들을 다룹니다.

킬로이는 하르가 아니었다.

이 낙서의 원문은 “Kilroy wasn’t Harr.”로, 제2차 세계 대전 당시 유행한 낙서인 “Kilroy was here.”(킬로이 다녀감)와 수학자 알프레드 하르(Alfred Haar)의 이름을 결합한 익살입니다.

'킬로이 다녀감'에 관해서는 위키백과의 글을 참고하세요. 여담으로, 스틱스의 Mr. Roboto 마지막 부분 "I'm Kilroy! Kilroy! Kilroy! Kilroy!"의 킬로이도 이 킬로이에서 따온 것이라고 합니다(그 노래가 수록된 앨범 자체가 "Kilroy Was Here"이고요.

알프레드 하르는 헝가리의 수학자로, 하르 측도, 하르 파형소(웨이블릿), 하르 변환 등이 이 수학자의 이름을 딴 것이라고 합니다.

군(群)을 석방하라.

이 낙서의 원문은 “Free the group.”으로, the group을 '그 집단' 또는 '그 단체'로 해석할 수도 있고 수학 용어 '군'으로 해석할 수도 있습니다

핵에 핵공격을!

이 낙서의 원문은 "Nuke the kernel."입니다. 한국어에서는 핵무기의 '핵'과 수학 용어 '핵'(그리고 '핵심'이나 중핵 같은 일상 용어의 핵)이 한자까지 같지만 영어에서 핵무기의 '핵'은 kernel이 아니라 nuclear이므로, 앞의 낙서와는 달리 동음이의어가 아니라 이음동의어를 이용한 말장난이라 하겠습니다.

n에게 권력을!

원문은 "Power to the n"으로, "Power to the people(민중에게 권력을)" 같은 문구를 연상케 합니다. 수학에서 power는 거듭제곱을 뜻합니다.

N =1 ⇒ P = NP

유명한 난제인 P-NP 문제를, P와 N을 그냥 보통의 변수로 취급해서 간단하게 해결해 버린 것입니다.

난 이 주제에 대해서는 최소한의(marginal) 관심밖에 없어.

페이지의 여백(margin)에 적힌 낙서라는 점을 이용한 말장난입니다.

(서문 낙서 하나 추가합니다 -- 2017-12-09)

알았어: 구체(concrete) 수학은 훈련(drilling)을 뜻해.

원서명 Concrete Math의 Concrete가 건축자재로서의 콘크리트를 연상시킨다는 점을 이용한 말장난입니다(이 비유는 원서 앞 표지에서부터 등장합니다). drilling은 훈련이라는 뜻과 함께 드릴로 뚫는다는 뜻도 있습니다. 철거 현장 등에서 드드드드... 하면서 콘크리트 벽이나 바닥을 깨는 장면을 연상케 하는 낙서입니다. 뇌의 주름에 쌓인 두꺼운 찌꺼기를 깨는 장면을 연상할 수도 있겠고요(흠칫).


그 외에도 서문에는 여러 낙서가 있지만, "굳이" 설명할 만한 낙서들은 이 정도입니다. 다음 편에서는 제1장의 낙서들을 소개하겠습니다.

top
트랙백 0 : 의견 # + 0

근황 - 2017-09-23

류광, 2017/09/23 19:39
Concrete Math 2nd 마쳤고 Andy Field의 통계학+R 책을 번역 중입니다.

저번 달 말에 Concrete Math 2nd 번역을 마쳤습니다. 조판과 교정에 적어도 석 달은 걸릴 것으로 예상합니다.

며칠 전부터는 Andy Field가 쓴 'Discovering Statistics Using R'이라는 통계학 입문서를 번역하기 시작했습니다. 같은 저자의 베스트셀러 'Discovering Statistics Using SPSS'의 R 버전입니다. 내용이나 외형이나 딱 대학 교재지만, 설명이 친절하고 자세해서 독학용으로도 좋을 것입니다. 다른 대부분의 책들처럼 이 책도 배워 가면서 번역하고 있는데, 독자의 입장에서 평가할 때 지루하지 않고 성취감도 있습니다.

아참, 남는 스팀 키가 있는데 아무나 가져가세요. 며칠 전에 험블 번들에서 Outlast와 Outlast: Whistleblower의 스팀 키를 공짜로 뿌렸는데, 본편인 Outlast는 이미 라이브러리에 있어서 키가 남았습니다.

Outlast : GVT??-5TJGH-B3Q6I

힌트: 2002년 한일 월드컵의 전 대회인 19??년 제16회 FIFA 월드컵은 프랑스에서 열렸습니다.

주의: 등록 기한이 있으니 바로 등록하세요. 미국 태평양 표준시 기준으로 10월 7일 오전 10시까지입니다.

그리고 아직 해보지는 않았지만 엄청 무서운 게임이라고 합니다. http://store.steampowered.com/app/238320/Outlast/?l=koreana 참고.

top
TAG 근황
트랙백 0 : 의견 # + 0

C++17 표준 라이브러리에 새로 추가된 알고리즘과 기타 변경 사항 소개

류광, 2017/08/05 18:49
C++17 표준 라이브러리 소개 시리즈의 마지막 글. 새로 추가된 알고리즘과 기타 변경 사항을 소개합니다.

"핵심 C++ 표준 라이브러리" 부록 A 방출 계획의 마지막 글입니다. C++에 새로 추가된 알고리즘들과 자잘한 변경 사항을 간략하게 정리했습니다.

새로 추가된 알고리즘

C++17에서 새로 추가된 알고리즘들을 간략하게만 소개하겠다. 이들은 모두 std 이름공간에 속한다.

  • for_each_n: for_each와 같되 [first, last)가 아니라 [first, first+n)을 입력 범위로 사용하며, first+n을 돌려준다(참고로 for_each의 직렬 버전은 사용자 지정 함수를 돌려주고 병렬 버전은 아무것도 돌려주지 않는다). 필요한 헤더는 <algorithm>이며, 병렬 버전도 있다.
  • sample: 주어진 범위의 요소 n개를 주어진 확률 분포에 따라 무작위로 선택한다. 필요한 헤더는 <algorithm>이다.
  • uninitialized_moveuninitialized_move_n: 주어진 요소들을 초기화되지 않은 메모리 영역으로 이동한다. 필요한 헤더는 <memory>이며, 병렬 버전도 있다.
  • clamp: 주어진 값이 하한보다 작으면 하한을, 상한보다 크면 상한을 돌려준다. 그 외에는 주어진 값을 돌려준다. 비교 함수를 지정할 수 있다. 필요한 헤더는 <algorithm>이다.
  • reduce: 분산 처리나 병렬 처리 관련 프레임워크 또는 언어에서 흔히 볼 수 있는 Map-Reduce(사상-축약) 패턴의 Reduce 단계에 해당하는 알고리즘이다. 필요한 헤더는 <numeric>이며, 병렬 버전도 있다. 참고로 Map에 해당하는 표준 라이브러리 알고리즘은 transform이다. 기존 accumulate 알고리즘에 병렬 버전이 추가되지 않았는데, 대신 reduce의 병렬 버전을 사용하면 된다.
  • transform_reduce: Map-Reduce에 해당하는 알고리즘으로, 요소들을 먼저 변환한 후에 축약한다. 필요한 헤더는 <numeric>이며, 병렬 버전도 있다. 기존 inner_product 알고리즘에 병렬 버전이 추가되지 않았는데, 대신 이 transform_reduce의 병렬 버전을 사용하면 된다.
  • inclusive_scanexclusive_scan: 요소들의 구간 합(prefix sum; 또는 부분합)들을 구한다. inclusive_scani번째 요소를 i번째 부분합에 포함하고, exclusive_scan은 포함하지 않는다. 예를 들어 덧셈과 초기치 0을 사용한다고 할 때 {1, 1, 0, 2, 3}의 inclusive_scan 결과는 {1, 2, 2, 4, 7}이고 exclusive_scan 결과는 {0, 1, 2, 2, 4}이다. 덧셈 이외의 합산 함수를 지정할 수 있으며, 부분합의 초기치도 다르게 지정할 수 있다(기본은 0). 필요한 헤더는 <numeric>이며, 병렬 버전도 있다. 기존 partial_sum 알고리즘에 병렬 버전이 추가되지 않았는데, 대신 inclusive_scan의 병렬 버전을 사용하면 된다.
  • transform_inclusive_scantransform_inclusive_scan: 요소들을 먼저 변환한 후 구간 합을 구한다. 필요한 헤더는 <numeric>이며, 병렬 버전도 있다.

기타 변경 사항

그 외에 C++17 표준 라이브러리의 변경 사항을 정리하자면 다음과 같다.

  • random_shuffle, auto_ptr, result_of, bind1st, unxepected 등 이전 표준들이 폐기 예정으로 분류한 구성요소들이 실제로 폐기되었다(표 A.3).
  • 활성 예외 객체 검출 함수 uncaught_exception이 폐기 예정으로 분류되고, 이를 대신하는 uncaught_exceptions가 추가되었다. 전자는 현재 스레드에 활성 예외 객체(던져졌지만 아직 해당 catch 절에 도달하지 않은 예외 객체)가 있는지의 여부(bool)를 돌려주지만, 후자는 현재 스레드의 활성 예외 객체 개수(int)를 돌려준다(<exception> 헤더).
  • mapunordered_maptry_emplaceinsert_or_assign이라는 새로운 멤버 함수가 추가되었다. 이들은 주어진 키가 컨테이너에 없는 경우에만 새 요소를 생성 또는 삽입한다.
  • 컨테이너 멤버 함수 size, empty, data의 비멤버 함수 버전인 std::size, std::empty, std::data가 추가되었다(<iterator> 헤더).
  • 메모리를 구성하는 바이트byte의 개념을 좀 더 명시적으로 표현하기 위해 std::byte라는 형식이 추가되었다. 내부적으로 std::byte는 하나의 열거형 클래스(enum class)인데, 바탕 자료 형식은 unsigned char이다. unsigned char와는 달리 std::byte는 문자 형식으로도, 수치(산술) 형식으로도 간주되지 않는다. 개념적으로 std::byte는 단지 비트들의 집합일 뿐이며, 산술 연산자들은 지원하지 않고 비트별 논리 연산자들과 자리이동(shift) 연산자들만 지원한다. 임의의 정수 n을 std::byte 객체로 변환하려면 std::byte{n} 형태의 표현식을 사용하고(C++17부터는 이런 식으로 열거형 객체를 생성할 수 있게 되었다), 그 반대의 변환은 std::to_integer 함수(역시 C++17에서 추가되었다)를 사용하면 된다.
  • 컴파일 시점에서 형식 특질들의 논리합, 논리곱, 부정을 산출하는 메타 함수 conjunction, disjunction, negation이 추가되었으며, is_aggregate, is_invocable, is_swappable 등 다양한 컴파일 시점 형식 판정 함수가 추가되었다(<type_traits> 헤더).
  • 최대공약수와 최소공배수를 돌려주는 수학 함수 gcdlcm이 추가되었으며(<numeric> 헤더), 타원적분, 베셀 함수, 르장드르 함수, 노이만 함수, 리만 제타 함수 등 다양한 특수 함수가 추가되었다(<cmath> 헤더). 표 A.4에 특수 함수들이 나열되어 있다.

표 A.3 폐기된 구성요소들

auto_ptr, const_mem_fun_t, pointer_to_binary_function, binary_function, get_unexpected, pointer_to_unary_function, bind1st, mem_fun1_ref_t, ptr_fun, bind2nd, mem_fun1_t, random_shuffle, binder1st, mem_fun_ref_t, set_unexpected, binder2nd, mem_fun_ref, unary_function, const_mem_fun1_ref_t, mem_fun_t, unexpected, const_mem_fun1_t, mem_fun, unexpected_handler, const_mem_fun_ref_t

표 A.4 특수 수학 함수

assoc_laguerre, comp_ellint_3f, ellint_1l, legendre, assoc_laguerref, comp_ellint_3l, ellint_2, legendref, assoc_laguerrel, cyl_bessel_i, ellint_2f, legendrel, assoc_legendre, cyl_bessel_if, ellint_2l, riemann_zeta, assoc_legendref, cyl_bessel_il, ellint_3, riemann_zetaf, assoc_legendrel, cyl_bessel_j, ellint_3f, riemann_zetal, beta, cyl_bessel_jf, ellint_3l, sph_bessel, betaf, cyl_bessel_jl, expint, sph_besself, betal, cyl_bessel_k, expintf, sph_bessell, comp_ellint_1, cyl_bessel_kf, expintl, sph_legendre, comp_ellint_1f, cyl_bessel_kl, hermite, sph_legendref, comp_ellint_1l, cyl_neumann, hermitef, sph_legendrel, comp_ellint_2, cyl_neumannf, hermitel, sph_neumann, comp_ellint_2f, cyl_neumannl, laguerre, sph_neumannf, comp_ellint_2l, ellint_1, laguerref, sph_neumannl, comp_ellint_3, ellint_1f, laguerrel

top
트랙백 0 : 의견 # + 0

C++17 표준 라이브러리의 알고리즘 병렬화 소개

류광, 2017/07/29 14:43
C++17 표준 라이브러리의 알고리즘 병렬화를 소개합니다

본문 열기

top
트랙백 0 : 의견 # + 0

C++17 표준 라이브러리의 파일 시스템 라이브러리 소개

류광, 2017/07/22 13:20
이어지는 핵심 C++ 표준 라이브러리" 부록 공개. 이번에는 C++17에 추가된 파일 시스템 라이브러리를 소개합니다.

본문 열기

top
트랙백 0 : 의견 # + 0

◀ PREV : [1] : [2] : [3] : [4] : [5] : ... [60] : NEXT ▶