2023/12 21

1) 텐서플로우(Tensorflow)

목차 텐서플로우 텐서플로는 구글의 어느 한 팀에 의해 공개된 대표적인 머신러닝 라이브러리이다. 이는 파이썬뿐만 아니라, 다양한 언어를 사용하고 모델을 개발하고 배포할 수 있는 다양한 도구를 지원한다. 그리고 텐서플로우는 딥러닝 연산을 처리하는 라이브러리로서 텐서라고 불리는 데이터를 계산 그래프 구조를 통해 흘려가면서 복잡한 행렬 연산을 처리하게 된다. 이번에는 파이썬 언어를 이용해 공부해보자 한다. 텐서플로우 자료구조 텐서플로우는 파이썬 자료형 값들을 텐서플로우 자료구조인 텐서(Tensor)로 변환되어 처리하는데.. 0차원 텐서인 스칼라, 1차원 벡터, 2차원 행렬, 3차원 텐서, 4차원 텐서..... 차수가 1씩 증가함에 따라 데이터 구조가 확장된다. 여기서 차수는 차원의 수를 말하는 것이며 텐서를 구..

4) 자바 8

자바 8에서의 변경된 사항. 1. 람다 표현식(lambda expression) 람다 표현식은 함수형 프로그래밍을 지원하기 위해 도입된 새로운 표현식이다. 람다 표현식은 메서드를 하나의 식으로 표현할 수 있게 해 주고 람다 표현식의 기본 문법은 다음과 같다. (매개변수) -> 식 예를 들어, 다음과 같은 메소드가 있다고 가정해 보면. 이 메서드는 배열에 저장된 짝수를 출력한다. public void printEvenNumbers(int[] numbers) { for (int number : numbers) { if (number % 2 == 0) { System.out.println(number); } } } 이 메소드를 람다 표현식으로 바꾸면 다음과 같다. public class Main { publi..

3) 자바 입출력문

목차 입출력을 위한 클래스 자바에서는 사용자가 프로그램과의 대화를 위해 프로그램에 세 입력을 주고 프로그램은 출력을 해주는 수단이 필요한데 C언어와 비슷하게 printf(), scanf() 함수처럼 System이라는 표준 입출력 클래스를 제공한다. 1. System.in System.in은 자바의 표준 입력 스트림입니다. 콘솔로부터 데이터를 입력받는 데 사용이 되며, System.in은 InputStream 클래스의 인스턴스이다. System.in을 사용하여 콘솔로부터 입력받는 방법은 다음과 같다. Scanner class import java.io.*; public class Main { public static void main(String[] args) throws IOException { // 가..

2) 자바 프로그램

자바 코드의 구성 자바는 한 개 이상의 클래스(class)로 구성이되고 이 클래스는 한 개 이상의 필드field나 메소드 method로 구성이 된다. 매우 간단하게 예를 들면 밑에 코드처럼 작성이 된 것을 보면 이해가 될 것이다. public class Study { // 필드 int field1; String field2; // 메소드 public void method(){ System.out.println("안녕!"); } } public class Main { // 필드 int field1; static String field2; public static void main(String[] args) { field2 = method_hello(); System.out.println(field2); }..

1) 자바 개념

Java 객체지향하면 대표적인 언어로 Java, C++, Python, C#, Swift 등 많은 언어를 생각할 것이다. 여기서 내가 공부하는 자바는 처음부터 객체지향 언어로 개발된 프로그래밍 언어로서 C언어에 객체지향 개념은 얹은 C++과는 사뭇 다르다. 이러한 자바는 자바 가상 머신 Java Virtual Machine, JVM을 사용하는데... C++은 자바와 다르게 컴파일된 코드가 특정한 플랫폼에 의존적인데, C++코드는 기계어로 직접 변환되며, 이는 특정 운영체제와 하드웨어 아키텍처에 맞춰져 있어 C++로 작성된 프로그램을 다른 운영체제에서 실행하려면 해당 운영체제에 맞게 다시 컴파일해야 한다. 하지만 자바는 "Write Once, Run Anywhere(WORA)"라는 개념을 지향해 특정 운영..

[알고리즘] 검색 2 - 해싱 + 단어 사전 프로그램

목차 해싱 Hashing 해싱은 키값을 비교하여 찾는 검색 방법이 아니라 산술적인 연산으로 키가 있는 위치를 계산하여 바로 찾아가는 방식이다. 키값을 원소 위치로 변환하는 함수를 해시 함수 Hash Function, 해시 함수로 계산된 주소 위치에 항목을 저장한 표를 해시 테이블 Hash Table이라고 한다. 이러한 해싱을 이용해서 유용하게 활용이 가능한 곳에는.... 데이터 무결성 확인: 해시 함수는 입력 데이터에 대해 고정된 크기의 해시 값을 생성한다. 이는 데이터의 무결성을 확인하는 데 사용될 수 있고 데이터가 변경되었을 때 해시 값도 변경되기 때문에 변경 여부를 쉽게 감지할 수 있다. 암호학: 해시 함수는 암호학에서도 중요한 역할을 하는데, 패스워드 저장 및 검증, 디지털 서명, 메시지 인증 등..

알고리즘 2023.12.09

[알고리즘] 검색 1 -순차 검색, 이진 검색, 트리 검색

목차 검색 말 그대로 무언가를 찾는 것인데 우리가 영어 사전에서 의미가 궁금한 단어를 검색하거나, 인터넷에서 맛집을 찾을 때 검색을 한다. 이러한 검색도 정렬처럼 자료구조를 활용하는데, 자료를 만들고 저장하고 정렬하는 이유는 자료를 사용하기 위해서이고, 사용하려면 자료 중에서도 원하는 항목을 찾아야 한다. 따라서 자료를 검색하는 것은 원하는 탐색 키를 가진 항목을 찾는 것이다. 저장한 자료는 그 자료를 구별하여 인식할 수 있는 키를 가지고 있는데, 이것을 탐색 키 Search Key라고 한다. 또한 자료 속에서 원하는 자료를 찾으면 성공 Hit이라고 하며, 실패한다면 검색 실패 Miss라고 한다. 이러한 검색 연산은 삽입 연산과 삭제 연산을 할 때도 필요하다. 원소를 삽입하거나 삭제하려면 먼저 그 위치를..

알고리즘 2023.12.09

[알고리즘] 정렬 6 - 히프 정렬 Heap Srot, 트리 정렬 Tree Sort

목차 정렬 히프 정렬 Heap Sort 히프 정렬은 히프 자료구조를 이용하여 정렬하는 방법이다. 히프에서는 항상 가 장 큰 원소가 루트 노드가 되고. 삭제 연산을 수행하면 항상 루트 노드의 원소를 삭제하여 반환하는 특징이 있다. 그러므로 최대 히프에 대해서 원소 개수만큼 삭제 연산을 수행하면 내림차순으로 정렬된 원소를 얻을 수 있고, 최소 히프에 대해서 원소 개수만큼 삭제 연산을 수행하면 오름차순으로 정렬된 원소를 얻을 수 있다. 히프 정렬은 정렬할 원소들을 하나씩 히프에 삽입하여 정렬할 n개의 원소를 가진 최대 히프를 구성한다. 히프에 삭제 연산을 수행하여 얻은 루트 원소를 저장하고, 히프를 다시 최대 히프가 되도록 재구성하는 작업을 원소의 개수만큼 반복하면 정렬을 완성할 수 있다. 2023.11.20..

알고리즘 2023.12.09

[알고리즘] 정렬 5 - 기수 정렬 Radix Sort

목차 정렬 기수 정렬 Radix Sort 기수 정렬은 분배 방식의 정렬 방법으로 정렬할 우너소의 키값에 해당하는 버켓에 원소를 분배하였다가 버켓(큐)의 순서대로 원소를 꺼내는 방법 반복한다. 기수 정렬은 원소의 키를 표현하는 값의 기수 Radix만큼 버켓이 필요하고, 키값의 자릿수만큼 정렬을 반복한다. 첫 번째 단계 (가장 낮은 자리의 숫자에 대한 정렬): 배열을 가장 낮은 자리의 숫자(1의 자리)에 따라 0부터 9까지의 버켓으로 나눈다. 버켓 0: {10, 30} 버켓 1: {31} 버켓 2: {2, 22} 버켓 3: {} 버켓 4: {} 버켓 5: {} 버켓 6: {16} 버켓 7: {} 버켓 8: {8} 버켓 9: {69} 버켓의 순서대로 배열을 업데이트한다: {10, 30, 31, 2, 22, 1..

알고리즘 2023.12.09

[알고리즘] 정렬 4 - 병합 정렬(2-way, n-way)

목차 정렬 병합 정렬 Merge Sort 병합 정렬은 여러 개의 정렬된 자료 집합을 병합하여 하나의 정렬된 집합으로 만드는 정렬 방법이다. 이러한 방법은 전체 원소에 대해 수행하지 않고 부분집합으로 분할 Divide 하고 각 부분 집합에 대해서 정렬 작업을 정복 Conquer 즉, 완성한 후에 정렬된 부분집합들을 다시 결합 Combine 하는 분할 정복 Divide and Conquer 기법을 사용한다. n개의 정렬된 자료 집합을 결합하여 하나의 집합으로 만드는 병합 방법을 n-way라고 한다. 여기서 우리는 두 개의 집합을 하나의 집합으로 만들기에 2-way 병합이라 한다. 다음 3가지의 작업을 반복한다. 분할 : 자료들을 두 개의 부분집합으로 분할한다 정복 : 부분집합에 있는 원소를 정렬한다. 결합 ..

알고리즘 2023.12.09