알고리즘(4)
-
그리디(탐욕) 알고리즘
현재 상황에서 가장 좋은 것만 고르는 욕심꾸러기! 정당성 분석이 가장 중요. 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토한다. ex. 동전 거슬러줄 때, 단위가 큰 동전부터 생각해야 하는 이유? 큰 단위가 항상 작은 단위의 배수이므로, 작은 단위의 동전들을 종합해 다른 해가 나올 수 없기 때문. coins = [500, 100, 50, 10] pocket = int(input("얼마있어?\n")) count = 0 answer = {} for coin in coins: count += pocket // coin answer[coin] = pocket // coin pocket %= coin print(answer) import java.util.Scanner; public..
2020.11.04 -
🔐 소프트웨어 개발 보안 구축 #6 - 암호 알고리즘
👍 암호 알고리즘이란? 👊 용어정리 해시 : 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 "단방향" 암호 알고리즘 단방향 : 평문 -> 암호문으로 바꿀수는 있지만, 암호문을 평문으로 다시 복호화는 할 수 없는 암호화 방식. 해시를 사용하는 방식 양방향 : 평문 -> 암호문, 암호문 -> 평문 모두 가능한 암호화 방식. 양방향 암호화방식은 개인키와 공개키가 사용된다. 🙌 단방향 암호 알고리즘 단방향 암호 알고리즘은 해시를 이용한다. 해시 알고리즘을 해시 함수라고 부르며, 해시 함수로 변환된 값이나 키를 해시값 또는 해시키라고 한다. 단방향이기 때문에 복호화할 수 없어, 암호화보다는 데이터변조/수정여부 파악 등 무결성검증 용도로 많이 쓰인다. 대표 해시함수 : MD5, SHA, ..
2020.07.14 -
은행원 알고리즘
👍 은행원 알고리즘이란? 짧게 복습하면, 다중프로그래밍에서 여러 프로세스가 한정된 자원을 오류 없이 사용하도록 순서를 부여한 것이 상호배제였고, 상호배제라는 것 때문에 특정 상황에서 대기중인 프로세스가 무한정 기다리게 되는 불상사가 생긴 것이 교착상태였다. 그리고 교착상태를 아예 제거한다는 것은 앞선 상호배제부터 부정한다는 말이기 때문에 다중프로그래밍으로서 모순이 있어 좋지 않은 방법이었고, 교착상태를 인정하되 똘똘한 운영체제가 알아서 회피해가자는 것이 "교착상태 회피"였다. 그리고 교착상태 회피의 알고리즘이 바로 "은행원 알고리즘"이다. 은행원 알고리즘은 은행에서 대출해주는 직원에서 착안한 것이다. 대출하고자 하는 고객 = 프로세스 고객의 대출한도 = 프로세스가 실행에 있어 필요로 하는 자원의 총량 고..
2020.07.08 -
페이지 교체 알고리즘 - 주기억장치를 효율적으로 사용하자
👍 교체전략이란? 주기억장치 교체전략 = 페이지 교체 알고리즘 현대 운영체제는 제한된 용량을 가진 주기억장치를 효율적으로 사용하기 위해 다양한 전략을 사용한다. 그중 교체전략은 가상기억장치 다중프로그래밍에서 프로그램별 할당된 메모리가 꽉 찼을 때, 어떤 페이지를 바꿔껴야 더 효율적인지를 다루는 전략이며, 이를 위한 알고리즘을 "페이지 교체 알고리즘"이라고 한다. CPU가 지금 당장 연산해야 할 코드가 마침 주기억장치 내 페이지 프레임에 들어있는 것을 가리켜, 해당 페이지가 적중했다고 하여 "Page Hit"라고 한다. 반대로 페이지 프레임에 없다면 해당 페이지가 실패 또는 없다고 하여 "Page Fault"라고 한다. 따라서 교체전략, 즉 페이지 교체 알고리즘의 목표는 다음 하나로 정해진다. 페이지 적중..
2020.07.01