수학이야기 76. 선택과 배열 (Selection and Arrangement)
📌 학습 개요
세상에 존재하는 모든 것들은 1열로 세우거나, 분류하거나, 상자에 넣어야 합니다. 이 단순해 보이는 배열(Arrangement) 과 선택(Selection) 작업 속에는 우주가 돌아가는 완벽한 필연적 물리 법칙이 숨어 있습니다.
이 장에서는 ‘조합론(Combinatorics)’ 의 기초를 해제합니다. “무조건 겹치는 녀석들이 있다” 는 단순무식하면서도 강력한 논리인 ‘비둘기집의 원리’, 무한으로 복사해 낼 수 있는 재귀적 배열인 ‘중복조합’, 그리고 눈 돌아갈 정도로 복잡한 전개식을 아름다운 블록 쌓기 게임으로 전락시키는 ‘파스칼의 삼각형’ 을 만납니다.
여기에 파이썬(Python) 의 강력한 배열(List), 집합(Set), 그리고 대수학 연산 모듈(SymPy) 과 조합 모듈(itertools) 을 얹어, 100일 걸릴 수학 노가다를 단 0.1초 만에 날려버리는 코딩 쾌감을 만끽해 봅시다.
📚 목차 (Table of Contents)
- 1. 100% 무조건 일어나는 마법: ‘비둘기집의 원리 (1)’
- 방(공간) 보다 비둘기(객체) 가 무조건 많으면 필연적으로 발생하는 데이터 충돌과 중복의 필연성을 이해하고, 파이썬의 중복 방어막인 집합(
Set) 자료형의 개념을 해킹합니다.
- 방(공간) 보다 비둘기(객체) 가 무조건 많으면 필연적으로 발생하는 데이터 충돌과 중복의 필연성을 이해하고, 파이썬의 중복 방어막인 집합(
- 2. 올림 연산의 마법: ‘비둘기집 원리의 일반화’
- 무수히 많은 데이터가 쏟아질 때 발생하는 공평 분배의 한계치와 강제적으로 값이 위로 끌어올려지는 ‘올림(
math.ceil)’ 연산의 원리를 서버 분산 처리 기술에 대입해 봅니다.
- 무수히 많은 데이터가 쏟아질 때 발생하는 공평 분배의 한계치와 강제적으로 값이 위로 끌어올려지는 ‘올림(
- 3. 중복 카운트의 덫을 피하라: ‘포함배제의 원리’
- 벤 다이어그램의 두 원판을 합칠 때 ‘더블 체크(교집합)’ 되는 오류를 막기 위해 더하고, 빼는 교차 합산의 마법을 파이썬 합/교집합 구조(
&,|) 와 연계해 익힙니다.
- 벤 다이어그램의 두 원판을 합칠 때 ‘더블 체크(교집합)’ 되는 오류를 막기 위해 더하고, 빼는 교차 합산의 마법을 파이썬 합/교집합 구조(
- 4. 베스킨라빈스 아이스크림통의 비밀: ‘중복조합’
- “서로 다른 3개 중 중복을 섞어 4개를 골라라!” 라는 불가능해 보이는 수수께끼를 ‘별과 막대기 기법’ 이라는 일차원 공간 배열 코드로 강제 다운그레이드 시키는 천재적 발상을 스캔합니다.
- 5. 전개의 공포를 끝장내는 수학 치트키: ‘파스칼의 삼각형과 이항정리’
- 악몽 같던 방정식 전개($a+b)^{10}$ 의 숫자들이 사실은 피라미드식 덧셈 로직에 불과했음을 깨닫고, 파이썬의 궁극의 전개 머신
SymPy를 장착하여 수학 숙제를 1초 만에 분쇄합니다.
- 악몽 같던 방정식 전개($a+b)^{10}$ 의 숫자들이 사실은 피라미드식 덧셈 로직에 불과했음을 깨닫고, 파이썬의 궁극의 전개 머신
서브목차