카테고리 없음

k차원에서 k flat-diagram n개로 나눠지는 영역의 개수

tosemary 2025. 4. 4. 21:00
import sys
import itertools
import numpy as np
from math import comb

def compute_max_region_count(k, n, vectors):
    # 1. 초기 영역분할 최대 수 p 계산
    p = sum(comb(n, i) for i in range(k + 1))  # p = nC0 + nC1 + ... + nCk

    # 2. 조합을 이용하여 벡터 선택 및 랭크 검사
    for r in range(2, k + 1):  # 2개부터 k개까지 선택
        for subset in itertools.combinations(vectors, r):
            matrix = np.array(subset)
            if np.linalg.matrix_rank(matrix) < r:
                p -= 1  # 랭크가 부족하면 p 감소

    return p

# 입력 처리
k, n = map(int, input().split())  # 첫 줄 입력: k 차원, n개의 벡터
vectors = [list(map(int, input().split())) for _ in range(n)]  # n개의 벡터 입력

# 결과 계산 및 출력
print(compute_max_region_count(k, n, vectors))

 

이 코드는 방향벡터만 입력받기 때문에, 주어진 방향 벡터의 한에서 최대로 분할할 수 있는 영역의 개수 코드이다.(그니까 세 직선이 한점에서 만난다거나 이런 경우는 없게 만들 수 있다는 뜻)

원점과 떨어진 거리 r도 입력받아 그냥 나눠지는 영역의 개수를 구하면 얼마나 좋을까.. 더 생각해보자