[Logic] 개발자가 논리학을 볼 때 자주 겪는 착각: OR는 양자택일이 아니다
·
◈ Study/인공지능 AI🛸
- 코드의 ||와 논리학의 ∨, 그리고 Resolution Rule의 오해 풀기 지난 포스팅에서 도출 규칙을 다루며, 상충되는 조건이 사라지고 결론이 도출되는 과정을 살펴봤습니다. [Algorithm] AI는 어떻게 추론하는가? : 도출 규칙(Resolution Rule) 분석최근 하버드의 CS50 AI 강의를 듣다가 흥미로운 장표를 발견했습니다. 겉보기에는 단순한 영어 문장 놀이처럼 보이지만, 사실 이 장표는 현대 자동 정리 증명(Automated Theorem Proving)과 지식 기반 에yermi.tistory.com 그런데 이 식을 곰곰이 뜯어보다 보면, 개발자로서 한 가지 근본적인 의문이 생길 수 있습니다. 논리식에서 OR(∨)는 양자택일 아닌가?둘 다 True일 수는 없나? 결론..
[Logic] AI는 어떻게 추론하는가? : 도출 규칙(Resolution Rule) 분석
·
◈ Study/인공지능 AI🛸
최근 하버드의 CS50 AI 강의를 듣다가 흥미로운 장표를 발견했습니다. 겉보기에는 단순한 영어 문장 놀이처럼 보이지만, 사실 이 장표는 현대 자동 정리 증명(Automated Theorem Proving)과 지식 기반 에이전트(Knowledge-Based Agent)가 세상을 이해하는 가장 핵심적인 알고리즘, 바로 도출 규칙을 설명하고 있습니다.오늘은 이 논리식이 왜 성립하는지, 그리고 우리 개발자들이 다루는 시스템 내부에서 이것이 어떻게 응용되는지 'Deep Dive' 해보겠습니다.1. 문제의 정의 (Formal Definition)사진 속 강사(Brian Yu)가 보여주는 예시는 다음과 같은 구조를 가지고 있습니다.(Ron is in the Great Hall) ∨ (Hermione is in th..
[알고리즘] 에라토스테네스의 체(Sieve of Eratosthenes) [간단하고 빠르게 소수 찾기]
·
◈ Study/알고리즘(Algorithm)🎡
- 에라토스테네스의 체(Sieve of Eratosthenes) 에라토스테네스의 체는 간단하고 빠르게 소수를 찾는 방법이다. 아래는 에라토스테네스의 체를 구현해 놓은 코드이다. private static boolean[] eratos(int num) { // 0과 1은 소수가 아님 if(num < 2) { return 0; } // 0부터 num까지의 배열 생성 boolean[] nums = new boolean[num + 1]; // 0과 1을 true로 초기화. false는 소수, true는 소수가 아닌 수 nums[0] = nums[1] = true; /*에라토스테네스의 체에 맞게 소수를 구함 *1) nums[i]가 true이면 i 이후의 i 배수는 약수로 i를 가지고 있는 것이 되므로 i 이후의 ..
[알고리즘] 힙 정렬(Heap Sort) [힙 트리를 활용한 정렬 알고리즘]
·
◈ Study/알고리즘(Algorithm)🎡
- 힙 정렬(Heap Sort)이란? 선택 정렬과 거의 같은 알고리즘으로, 가장 큰 원소를 뒤로 보내는 데에 매번 쭉 돌면서 알아내느냐 힙을 사용하여 알아내느냐가 유일한 차이점이다. - 힙 정렬의 정렬 과정 원소들을 전부 힙에 삽입한다. 힙의 루트에 있는 값은 남은 수들 중에서 최솟값(혹은 최댓값)을 가지므로 루트를 출력하고 힙에서 제거한다. 힙이 빌 때까지 2의 과정을 반복한다.
[알고리즘] 병합 정렬/합병 정렬(Merge Sort) [존 폰 노이만의 정렬 알고리즘]
·
◈ Study/알고리즘(Algorithm)🎡
- 병합 정렬/합병 정렬(Merge Sort)이란? 원소 개수가 1 또는 0이 될 때까지 두 부분으로 쪼개고 쪼개서 자른 순서의 역순으로 크기를 비교해 병합하는 방식. 병합된 부분 안은 이미 정렬되어 있으므로 전부 비교하지 않아도 제자리를 찾을 수 있다. 이 그림에서 분할 정복으로 일정하게 정렬이 이뤄지는 병합 정렬의 특징을 잘 파악할 수 있다. [38, 27, 43, 3, 9, 82, 10]인 입력값은 [38, 27, 43, 3]과 [9, 82, 10] 로 두 부분으로 분할, 다시 [38, 27], [43, 3], [9, 82], [10]로 네 부분으로 분할 등의 방식으로 각각 더 이상 쪼갤 수 없을 때까지 계속해서 분할한 후, 분할이 끝나면 정렬하면서 정복해 나간다.