Journey to CS/KNOU CS 24

[이산수학] 조합이론 - Part 2. 중복 집합에서의 순열

중복된 원소를 포함하는 집합에서는 순열을 어떻게 구할까? 중복된 원소를 포함하는 집합에서 순열을 구하는 방법은 일반적인 순열 공식을 약간 확장하여 이해할 수 있다.지난 글(조합 Part 1.)에서 살펴보았듯, 서로 다른 원소 n개를 모두 일렬로 배열하는 경우의 수는 n!이라는 것은 이미 알고 있다. 하지만 집합 안에 동일한 원소가 여러 개 존재한다면, 단순히 n!로 계산하는 것은 중복을 포함한 결과를 만들어내므로 적절하지 않다.중복된 원소들끼리 자리를 바꿔도 전체 배열이 같기 때문이다.예를 들어, 다음과 같은 문자 집합을 생각해 보자. {A, A, B} 이 세 문자를 일렬로 배열하는 경우의 수를 생각하면,겉보기에는 3개의 문자를 배열하므로 3! = 6 가지가 있을 것 같지만,여기서 두 개의 A의 위치를 ..

[이산수학] 행렬의 종류와 특징

이산수학에서는 다양한 형태의 행렬이 등장한다. 각각의 행렬은 특정한 구조를 가지며, 그 구조에 따라 계산이나 해석에 용이한 특성을 갖는다. 대표적인 행렬의 종류들을 살펴보자. 1. 정방행렬 (Square Matrix)정의: 행(row)의 수와 열(column)의 수가 같은 행렬을 정방행렬이라고 한다.특징: n×n 형태로 나타난다. 정방행렬은 대각선, 역행렬, 행렬식 등을 논의할 수 있는 기본 구조이다.예시:2. 대각행렬 (Diagonal Matrix)정의: 정방행렬 중에서 주대각선 이외의 모든 원소가 0인 행렬을 대각행렬이라고 한다.특징: 대각선의 값만 의미가 있으며, 행렬 곱이나 거듭제곱 계산이 간단하다.예시:3. 단위행렬 (Identity Matrix)정의: 대각행렬 중에서도 모든 주대각선 원소가 1..

[이산수학] 집합의 서로소, 분할, 멱집합 개념

📌 1. 서로소 집합 (Disjoint Sets)정의:두 집합이 공통 원소를 전혀 갖지 않으면, 서로소(disjoint)라고 한다. 예시:A={1,2,3}, B={4,5}공통 원소 없음 → 서로소C={2,3}, D={3,4}공통 원소 {3} 있음 → 서로소 아님 📌 2. 집합의 분할 (Partition)정의:어떤 집합 A를 겹치지 않는 부분집합들로 나누되, 그 부분집합들을 모두 합치면 원래의 집합 A가 되는 경우, 이를 분할이라 한다. 조건:모든 부분집합은 공집합이 아님.부분집합들은 서로소.부분집합들을 합치면 원래 집합과 같음.예시:A={1,2,3}분할 예: { {1}, {2,3} }또 다른 분할 예: { {1,2}, {3} }틀린 예: { {1,2}, {2,3} } → 2가 중복됨 📌 3. 멱집합..

[DBS] 트랜잭션 - Part 1. 데이터 일관성과 트랜잭션 연산

트랜잭션(Transaction)이란 ? 데이터베이스에서 트랜잭션은 데이터의 일관성을 보장하면서 여러 작업을 하나의 논리적 단위로 묶어 처리하는 과정을 말한다. 일관성(Consistency)란 무엇을 말하는가? 우선 데이터베이스에서 일관된 상태란 다음 조건들을 충족하는 상태이다. 데이터 무결성 제약 조건(Integrity Constraints) 만족개체 무결성: 모든 테이블의 기본 키(Primary Key)는 널(NULL) 값을 가질 수 없으며, 중복될 수 없다. 각 엔티티(개체)는 고유하게 식별되어야 한다.참조 무결성: 외래 키(Foreign Key)는 참조하는 기본 키의 값이 데이터베이스에 존재하거나, 널(NULL) 값이어야 한다. 즉, 참조하는 데이터가 유효해야 한다. 예를 들어, '주문' 테이블에 ..

[운영체제] 가상 메모리와 주소 변환 - Part 1. 기본 개념 이해하기

가상 메모리란? 가상 메모리는 운영체제가 프로그램에게 제공하는 추상화된 메모리 주소 공간이다. 이는 실제 물리적 메모리(RAM)의 크기와 상관없이 프로그램에게 더 크고 연속적인 메모리 공간을 제공한다.가상 메모리의 핵심은 주소 변환 메커니즘이다. 프로그램은 가상 주소를 사용하고, 이 주소는 메모리 관리 장치(MMU)에 의해 실제 물리 주소로 변환된다. 이때 모든 가상 주소가 항상 물리 메모리에 매핑되어 있는 것은 아니며, 필요한 경우에만 하드 디스크와 같은 보조 기억장치에서 물리 메모리로 데이터를 가져온다.따라서 하드디스크 자체가 메모리처럼 동작하는 것이 아니라, 가상 주소 공간을 효율적으로 관리함으로써 제한된 물리 메모리를 효율적으로 사용하고 필요시 보조 기억장치를 활용하는 것이다. 운영체제는 가상 메..

[SQL] 서브쿼리(Subquery)에 대해 알아보자

방송대 편입 첫 학기에 데이터베이스 과목을 수강하면서 SQL을 처음 배우기 시작했다. SQL의 핵심이라고 할 수 있는 그룹 질의, 중첩 질의, 조인 질의와 같은 질의(쿼리)의 여러 종류를 배우고 있다. 이러한 질의의 원리를 좀 더 꼼꼼하게 정리할 필요를 느껴서 이 포스팅을 쓰게 되었다. 오늘은 그 중에서도 서브쿼리에 대해 최대한 자세히 알아보려고 한다. 서브쿼리, 왜 필요할까?SQL을 쓰다보면 단일 쿼리만으로는 해결이 어려운 상황이 자주 발생할 것이다.예를 들어, 전체 평균 점수보다 점수가 높은 학생의 명단을 조회하는 쿼리는 단일 쿼리로 작성할 수 없다.이런 문제를 해결해주는 도구가 바로 서브쿼리(Subquery)다.서브쿼리를 이용하면 복잡한 조건이나 계산을 한 번에 처리할 수 있어서, SQL을 더 유연..

[이산수학] 다익스트라(Dijkstra) 알고리즘으로 최단 경로 문제 해결하기

최단 경로 문제란 ?우리가 길을 찾을 때 가장 빠른 길을 고민하듯이, 컴퓨터 과학에도 비슷한 문제가 있다. 바로 최단 경로 문제(Shortest Path Problem)이다. 이 문제는 가중 그래프에서 한 정점(시작점)에서 다른 정점(도착점)까지 가는 경로 중 가중치의 합이 최소가 되는 경로를 찾는 것을 목표로 한다. 여기서 가중치는 간선(edge)에 붙은 숫자로, 거리, 시간, 비용 등을 나타낼 수 있다.예를 들어, 도시 A에서 도시 C로 가는 길이 두 개 있다고 해보자. 하나는 직진해서 10km이고, 다른 하나는 B를 거쳐서 7km라면, 당연히 7km인 경로를 선택할 것이다. 최단 경로 문제는 이런 상황을 수학적으로 해결하는 방법이다. 이번 포스팅에서는 이 문제를 효율적으로 푸는 방법 중 하나인 다익..

[이산수학] 팩토리얼(계승)함수의 재귀적 정의와 파이썬: 수학과 코딩의 만남🤍

이산수학의 함수 챕터를 공부하다가 팩토리얼의 '재귀적 정의'를 보고 왜 굳이 이렇게 정의를 해야 하는지 의문이 생겼다.팩토리얼은 지난 글에서도 한 번 다뤘지만 이번엔 좀 다른 관점에서 바라보려고 한다.팩토리얼이란? 팩토리얼은 양의 정수 n에 대해 n!라고 쓰고, 1부터 n까지의 모든 정수를 곱한 값이다. 수식으로 보면 다음과 같다. n!=1×2×3×⋯×n 그리고 하나 기억할 것은, 수학에서는 0!=1 로 정의되어 있다는 것이다. 이게 앞으로 다룰 재귀적 정의에서 중요한 역할을 하게 된다. 재귀적 정의, 팩토리얼의 마법 공식팩토리얼을 계산하는 방법은 여러 가지가 있지만, 오늘의 주인공은 재귀적 정의이다. 재귀(recursion)는 어떤 문제를 해결하기 위해 그 문제의 더 작은 버전을 반복적으로 해결하는 방..

[운영체제] 병행 프로세스 - 세마포어 완벽 정리 Part 3 - 판독기-기록기 문제

지난 두 편의 글을 통해 세마포어의 정의와, '상호배제 문제'와 '동기화 문제', '생산자-소비자 문제'를 세마포어가 어떻게 해결하는지에 대해 알아보았다. 이번 포스팅은 세마포어 관련 마지막 포스팅으로, 세마포어로 해결할 수 있는 문제 중 판독기-기록기 문제를 집중적으로 살펴보도록 한다. 판독기-기록기 문제란? 판독기-기록기 문제는 다수의 협력 프로세스가 공유 자원을 사이에 두고 데이터를 읽는 판독기(reader)와 데이터를 쓰는 기록기(writer)로 나위어 동작할 때, 이들의 접근을 어떻게 제어할 것인지에 대한 문제다. 이 문제의 핵심은 두 가지 조건을 만족시키는 것이다. 기록기의 상호 배제: 한 기록기가 공유 자원에 데이터를 쓰는 동안 다른 기록기나 판독기는 접근할 수 없음. 데이터를 쓰고 있는 중..

[운영체제] 병행 프로세스 - 세마포어 완벽 정리 Part 2 - 생산자-소비자 문제

지난 글에서는 세마포어의 정의와, '상호배제 문제'와 '동기화 문제'를 세마포어가 어떻게 해결하는지에 대해 공부해보았다. 이번 글에서는 세마포어로 해결할 수 있는 문제 중 생산자-소비자 문제에 대해 다뤄보려고 한다. 생산자-소비자 문제란? 생산자-소비자 문제는 두 프로세스가 협력하여 데이터를 주고받는 상황을 다룬다. 생산자-소비자 문제에서는 세 가지 용어를 먼저 정의해야 한다. 생산자(Producer) : 데이터를 생성하여 버퍼에 넣는 프로세스소비자(Consumer) : 버퍼에서 데이터를 꺼내 사용하는 프로세스버퍼(Buffer) : 생산자와 소비자 사이에 데이터를 저장하는 공유 공간 생산자-소비자 문제에는 두 가지 조건이 있다. 상호배제 : 여러 프로세스가 동시에 버퍼에 접근할 수 없다. 즉, 생산자가 ..

1 2 3