자리올림 피라미드 ④ - 2

파이썬 스니펫으로 구현하고자 하는것은?

by 머리카락속의 바람

1) 11^n 계산에서 “자리올림(캐리)”을 정량화

a)무엇을 측정하는가?

파스칼 계수 줄 [C(n,0),...,C(n,n)]을 만들어서

10진 캐리(자리올림)를 실제로 전파시키며

다음 지표들을 나타낸다.

W_n : 캐리 이전에 한 자리(9)를 넘는 계수의 개수(= 중앙 띠 폭)

total_carries : 전체 계산에서 발생한 자리올림의 총량

D_n : 자리올림 밀도 = total_carries / 최종 자릿수 길이

final_digits : 최종 10진 자릿값 리스트(LSD-first; 뒤집으면 11^n의 10진 표기가 됨)



핵심 함수

pascal_row(n) → [C(n,0),...,C(n,n)]

carry_map_from_pascal(n, base=10) → (final_digits, total_carries, W_n, D_n)

demo_table_for_n(2, 40) → 여러 n에 대해 요약 표 출력


# (A) 자리올림 지도 요약
digits, tc, Wn, Dn = carry_map_from_pascal(25, base=10)
print("W_n(중앙 띠 폭):", Wn)
print("total_carries(총 캐리):", tc)
print("D_n(밀도):", Dn)
print("num_digits(최종 자릿수 개수):", len(digits))

# 여러 n에 대한 테이블
demo_table_for_n(2, 40)



> 해석 포인트

W_n은 대략 √n 스케일로 커져서 “중앙 중첩의 폭”이 넓어짐을 보여준다.

D_n은 합성(깊이 n)이 커질수록 보통 커지며, “경계 통과(자리올림)”가 점점 중앙에 집중되는 경향을 확인할 수 있다.


2) 곱셈적(배율) 과정의 벤포드 수렴 시뮬

b) 무엇을 측정하나?
배율 과정 X_{t+1} = X_t * Y_t를 오래 반복하면

phi = frac(log10 X) (로그의 가수 위상)이 균등에 가까워지고 첫 자릿수 분포가 벤포드형으로 수렴하는 걸 수치로 확인할 수 있다.


같이 출력되는 지표:

HB = 1 - 12*Var(phi) : 위상 혼합 지표(0에 가까우면 “벤포드적”)

H1_bits : 첫 자릿수의 셰넌 엔트로피(벤포드일 때 ≈ 2.876 bits)

first_digit_hist : 1~9 첫 자릿수의 실측 분포

benford : 이론적 벤포드 분포(비교용)



핵심 함수

simulate_benford_convergence(steps=20000, growth_sampler=None)

기본 growth_sampler는 Y = 10^U, U ~ Uniform[-0.5, 0.5] (규모가 넓게 섞이는 배율)



어떻게 쓰나?

# (B) 벤포드 수렴 실험
res = simulate_benford_convergence(steps=20000)
print("HB(0에 가까울수록 섞임↑):", res["HB"])
print("H1_bits(벤포드≈2.876):", res["H1_bits"])
print("실측 분포:", [round(x,3) for x in res["first_digit_hist"]])
print("이론 벤포드:", [round(x,3) for x in res["benford"]])

> 해석 포인트

HB가 0에 가까워질수록 위상(phase) 혼합이 잘 된 상태 → 벤포드 근사 강화

H1_bits가 2.876 bits 근처면 벤포드형에 근접

실측 분포가 이론 벤포드와 비슷해지면 “곱셈-혼합 → 벤포드 수렴”이 확인된다.



커스터마이즈 팁

다른 진법으로 자리올림을 보고 싶으면: carry_map_from_pascal(n, base=p)

다른 성장 모델로 벤포드 수렴을 보고 싶으면


import random, math
# 예: 로그정상분포 성장률
def lognormal_growth(mu=0.0, sigma=0.25):
z = random.gauss(0, 1)
return 10 ** (mu + sigma*z)

res = simulate_benford_convergence(steps=20000, growth_sampler=lambda: lognormal_growth(0, 0.2))



한 줄 요약(요약 직관)

(A) 자리올림 지도: 11^n 계산에서 발생하는 자릿수 경계 통과를 W_n, total_carries, D_n로 정량화 → 중앙 중첩이 n과 함께 커지는 걸 확인.

(B) 벤포드 수렴: 곱셈적 변화가 길게 이어지면 위상(phase) 혼합이 진행되어 첫 자릿수 분포가 벤포드형으로 수렴( HB → 0, H1_bits → 2.876 ).

이전 04화자리올림 피라미드 ④