보다 큰거같다
시험공부 해야하는데 여인수전개가 같은걸 계속 반복하는 재귀함수꼴 같아서
노트에 알고리즘을 짜봤는데 아무리생각해도 정말 비효율적인거같음 ㅋㅋㅋ
동적할당 짜는거 어렵기도하고 노트에다 깔짝깔짝하는데 무슨 그런 수고까지 하나 싶어서 1차원 배열로 해봤으요
함수선언 Int Det(Array A)
n차원행렬을 원소 n^2개의 1차원배열로 생각하고 선언
정수 i, j, result도 선언하고 0으로 초기화
만약 n==2면 대각선끼리 더하고 뺀거 리턴
아니면 n-1번 루프i돌림
루프i의 내용은
Array newA[(n-1)^2]를 만들고
(n-1)^2번 루프j돌림
루프j의 내용은
newA[j]에 A[Value(n, i ,j)]넣는것 (여인수분해하는 과정에서 배열 차원줄이는 그것)(굳이 설명안해도 될거같음)
루프j에서 나오면
result에 A[i]*Det(newA)를 더하기
루프i에서 나오면
result를 리턴
지금 아이패드밖에 없어서 실행시간은 못재는데
아마 n에 100정도만 넣어도 하루 죙일 걸릴거같음
수업시간에 지금 있는 행렬식구하는 알고리즘중에 가장 빠른게 O((n^2)*log(n))이라고 들었는데
뭘 어떻게한거지 ㄷㄷ
그 머라하지 삼각행렬로 쪼개는거 그거아님?
아닌데 1에서 n-1까지합을 n/2번해야하는뎅 더빠른거있나
https://en.m.wikipedia.org/wiki/Coppersmith–Winograd_algorithm
이건듯 현실에선 안쓴데
와 그거 그냥 흘려듣고 필기를안해놔서 아쉬웠는데 고마워요. 선대교수님 전공이 빅데이터라는데 연구하다보면 150만차원이상의 행렬의 역행렬을 구해야하는경우도 있다고 하시더라고요. 그럴땐 학교 슈퍼컴퓨터로 계산한다는데 나중에 대학원가면 자주쓸꺼라고 슈퍼컴퓨터 사용신청법을 엉청 길게 말씀하셔서 기억이나요 ㅇㅇ.