반응형

간단 지식 79

01. 파이썬 자료형

java나 c를 알면 이제 프로그래밍 언어가 갖는 공통적인 특징들에 대해선 감이 온다. 마찬가지로 파이썬은 그 형태가 비슷하며, 심지어 더 단순하다. 앞으로 딥러닝을 다루기 위해서는 파이썬이 필수이기 때문에 다시 기억을 되살려보자. 기본 자료형 파이썬의 기본 자료형에는 정수(int), 소수(float), 문자열(str)이 있다. 각 데이터의 자료형은 type()함수로 알아볼 수 있다. >>> type(10) >>> type(3.1) >>> type("a") >>> type("apple") 추가로 bool이라는 자료형이 있다. 참, 거짓이라는 값을 가지며 and, or, not 아니면 등호, 부등호 연산자를 활용할 수 있다. >>> happy = True >>> sad = False >>> happy an..

04. Linear Regression - How to minimize cost?

머신러닝의 분류도이다. 다시한번 복기해보자. 이번에는 회귀 중에서도 가장 기본인 선형 회귀(Linear Regression)에 대해 알아보자. 아래와 같이 data set(=train data)이 있다고 가정해보자. (독립변수x에 대해 종속변수y가 0~100 사이의 값을 가지면 회귀라고 부른다) x y 1 2 2 4 3 6 이에 따른 그래프는 다음과 같을 것이다. 여기서 H(x)는 가설을 의미하며, 위 데이터 셋으로부터 나올 수 있는 가장 이상적인 가설이다. 그러나 어떠한 연유로 H(n)과 같이 이상적이지 않은 결과 값이 나오는 가설이 만들어질수도 있다. 이때 가설과 실제값 간의 차이가 존재하는데 이를 구하는 방법을 cost function이라고 한다. 가장 기본적인 함수의 형태는 다음과 같다. 기본 형..

10. Oracle DB, sql developer 설치, scott 계정 생성, 에러 해결, sqlplus 명령어

일전에는 MySQL을 사용했었는데 언젠가 안드로이드 스튜디오랑 연동할 필요가 있는 작업을 할때 꽤나 불편했던 기억이 있다. 안드로이드 스튜디오랑 MySQL은 PHP를 이용해서 연동을 해야하는데 너무 과정이 복잡했고 똑같은 절차를 밟았는데도 결국에는 연동에 실패했다. 아직도 해결을 못해서 이참에 JSP를 이용하는 오라클 DB를 설치해봤다. 일단 오라클 계정이 있어야 한다. 없으면 생성하면 된다. 그리고 아래 링크를 타고 가서 자신의 운영체제에 해당하는 zip파일을 다운 받는다. www.oracle.com/database/technologies/oracle-database-software-downloads.html 압축 해제한 후 setup을 실행하면 인스톨러가 뜰텐데 따로 설정할 필요없이 next만 눌러주..

10. buffer overflow

버퍼 오버플로우란 프로세스가 데이터를 버퍼에 저장할 때 개발자가 지정한 곳 밖에 저장하여, 범위 밖의 데이터가 인접 메모리를 overwrite함으로써 오류가 발생하는 현상을 말한다. 여기서 버퍼란, 일시적으로 데이터를 보관하는 메모리의 영역이다. 대표적으로 버퍼 오버플로우를 일으키는 원인을 제공할 수 있는 함수가 하나 있다. 바로 gets()이다. 아래는 gets()의 원형코드이다. char *gets(char *dest){ int c = getchar(); char *p = dest;----------(1) while(c != EOF && c != '\n'){ *p++ = c; c = getchar(); } *p = '0'; return dest; } 코드라인 (1)에 따라 gets()는 버퍼의 시작주..

04. tree

트리는 상위에서 하위 노드로 확장되는 계층구조를 나타내는 비선형 자료구조이다. 아래는 트리 중에서 가장 일반적인 binary tree 구조이다. 이진 트리는 결정트리, 산술식 트리, 탐색 트리 등에 사용된다. term description root 부모 노드가 없는 최초의 노드 ex) A ancestor 자식 노드가 있는 노드 ex) A, B, C, D descendent 부모 노드가 있는 노드 ex) B, C, D, E, F, G, H, I sibling 동일한 부모 노드를 가진 노드 ex) B와 C, D와 E, F와 G, H와 I subtree 루트를 제거했을 때 생기는 하위 트리, 하위 트리의 집합을 forest라고 부른다. internal node 루트를 포함하여, 부모 노드와 자식 노드를 둘 다..

04. 구조체 - 포인터, malloc, 화살표연산자, 역참조

이전 글에서 구조체의 개념과 기본 예제, 그리고 구조체 배열에 대해서 설명했다. 이전 글: 2020/11/06 - [1학년/c언어] - 03. 구조체, 공용체, 열거형 03. 구조체, 공용체, 열거형 구조체 자바에 생성자가 있어 개발의 편의성, 다양성이 향상된다면 c언어에는 구조체가 있다. 구조체란, 서로 다른 변수의 형태를 하나의 block으로 묶는 기법이다. 이로 인해 함수에 데이터를 넘 20plus3.tistory.com 이번엔 좀 더 나아가 구조체 포인터와 malloc으로 메모리를 할당하는 방법을 알아보자. 구조체 포인터는 구조체의 주소를 갖는다. 아래 예제를 보자. typedef struct _student { char name[10]; int age; char grade; }student; v..

간단 지식/C 2020.12.02

09. stack frame, register saving convention

컴파일을 하면 스택에 코드가 쌓인다는 것은 우리가 다 아는 사실이다. 그렇다면 스택의 내부는 어떻게 생겼을까? 이 질문에 대한 해답을 얻기 전에 procedure의 data flow와 메커니즘 3가지에 대해 이해할 필요가 있다. procedure의 data flow는 저장되는 argument가 어디에 어떤 식으로 저장되는지를 말한다. procedure는 레지스터에 총 6개의 argument까지 저장할 수 있다. (저장 순서: %rdi -> %rsi -> %rdx -> %rcx -> %r8 -> %r9) 그리고 별도의 return 값을 저장하는 %rax를 제외하고 나머지 argument는 스택에 저장된다. 즉 인자값이 6개를 넘어가면 7번째 인자부터는 스택에 저장된다는 의미이다. procedure의 메커니..

03. stack, queue

스택은 LIFO, 큐는 FIFO 라는 것만 알아도 다 이해했다해도 무관할 정도로 스택과 큐는 구현도, 사용도 너무나 쉬운 자료구조이다. 그만큼 자주 쓰이기도 하니 꼭 알아두자. 스택은 Last in First out 으로, 후입선출의 구조이다. 아래 그림처럼 먼저 들어간 값이 가장 아래에 쌓이기 때문이다. 이러한 구조는 웹 브라우저의 뒤로가기, 텍스트 에디터의 ctrl+z, JVM의 chain of method call(ex. recursion call) 등에 사용이 된다. 스택을 사용하기 위해서 자바에서 제공해주는 클래스 java.util.stack을 사용하여도 좋다. 스택 클래스에서 제공하는 메소드는 아래와 같다. method description boolean isEmpty() 스택이 비었는지를 확..

08. conditional expression - using branch or move

어셈블러가 c코드로부터 jle, jne와 같은 명령어들을 산출해내는 이유는 변환하는 코드에 branch instruction이 있기 때문이다. 그러나 지금 이 시간은 개발자가 아니라 시스템 입장에서 코드를 봐야한다. 잦은 branch의 사용은 파이프라인 구조에 파괴적이기 때문에 CPU 관점에서 좋지 않다. 따라서 우리는 조건식을 branch가 아니라 move 명령어를 사용해서 동일한 효과를 낼 수 있다. 한가지 예제 코드를 보자. long test(long x, long y){ long result; if(x>y) result = x-y; else result = y-x; return result; } 지난 글에도 사용했던 if-else문 예제이다. 보이다 싶이 L2로 이동하는 branch 명령어가 보인..

07. condition code - 상태 레지스터, setX 명령어, jX 명령어

실행 중인 프로그램에 대한 정보(processor state)는 크게 아래 4개로 분리할 수 있다. 1. temporary data 2. location of runtime stack 3. location of current code control pointer 4. status of recent test 임시 데이터는 레지스터 %rax, %rbx 등에 저장되어있다. runtime stack의 위치는 스택포인터 %rsp에 저장된다. 현재 코드의 구조포인터는 %rip 에 저장된다. 최근 테스트에 대한 상태는 상태 레지스터를 조직하는 flag bit들에 저장된다. 이번 글에서 다룰 내용은 4번에 해당하는 상태 레지스터이다. 상태 레지스터는 status register 또는 flag register라고도 하며..

반응형