우분투, 파이썬, 텐서플로우, 넘파이, 도커, 통계, 컴퓨터구조 등 회사일을 하면서 얻은 모든 지식을 여기다가 정리한다.


Ubuntu 명령어 모음

:

du -sh * # 현재 폴더 용량 확인

FDISK

:



mount

:


달린 device list보는 법

parted -l

fdisk -l


mkdir /home/id/data

mount /dev/sdc1 /home/id/data

즉 폴더만들고 parted -l로 새로 단 장비의 device 이름(sda,sda,sdc)를 보고 그 내부에 partition번호(1,2,3,...)을 보고 해당 partition을 지정한 폴더(/home/id/data)에 mount시킨다. 



Vim 명령어 모음


정규표현식 모음





Discard Data or Fix Data


Feature Engineering은 다음으로 구성되어 있다.

feature selection, feature extraction, feature scaling, create new feature


No Free Lunch Theorem In Machine Learning

:데이터에 대한 어떠한 가설도 없다면, 어떤 모델을 다른 모델보다 더 좋아할 이유가 없다. 따라서 데이터에 대한 도메인 지식이 반드시 필요하다는 것.


Dropout시

tf.placeholder_with_default쓰기(값 안넘기면 default값(1로 두고)을 사용함으로써 test할 때랑 train할 떄 구분 지어줌)


SVM(Support Vector Machine)

:데이터를 뿌려놓고 확률을 생각하지 않고 decision boundary를 구하는 방법

decision boundary를 margin(decision boundary과 가장 가까운 점(a training instance)과의 거리)이 크게 찾고 싶은 것

decision boundary를 support하는 vector를 찾는 것이 목표(결국 너비가 가장 큰 road에 걸려져있는 vectors를 support vector라 한다.)

wx+b가 양수가 나오면 w방향으로의 점들임(w는 평면의 법선벡터)

confidence level = y_i(wx_i+b), y_i는 positive case에 1, negative case에 -1을 assign, 이렇게 함으로써 모든 training instances에 대해 confidence level은 항상 양수

confidence level이 최대가 되게하는 (w,b)를 찾는게 목표(임의의 training instance에 대해 모두다 wx+b=0인 평면에 정사영 시킨 벡터로 벡터를 분리해서 보면 바로 이해가 됨)

x_0와 decision boundary와의 거리는 (wx_0+b)/||w||가 된다. 

만약 decision boundary가 존재한다면, 그리고 그때 support vectors를 wx_1+b = a, wx_2 + b = -a라 하자. (a는 임의의 양수)

그럼 다음과 같은 optimization problem이 된다.

max over (w,b) 2a/||w|| s.t. (wx_j+b)y_j >= a for all j in training instance

a를 편의상 1로 두고 역수취해 min 문제로 바꾸면

min over (w,b) ||w|| s.t. (wx_j+b)y_j >= 1 for all j in training instance

즉 quadratic programming(w의 크기->2차)

Hard margin SVM이란, 어떠한 error case도 허용하지 않는 것

Soft margin SVM이란, error case에 penality를 줌(즉 허용하되 penalty를 부여, decision boundary와 떨어진 거리에 비례하게 혹은 error case의 개수만 고려)

Hard margin SVM은 현실에서 구현이 힘듦(대개는 에러가 생김), Hard나 Soft모두 linear decision boundary를 찾는게 목표, 어쨌든 선형 decision boundary를 찾아야하는데 error case가 생긴다면 Soft margin SVM써야함

Kernel Trick을 이용하면 Hard Margin이면서 nonlinear decision boundary를 찾을 수가 있음.(데이터의 원래 차원에선 nonlinear이지만, feature mapping에 의한 차원 확장 공간에선 linear decision boundary임)

Soft margin SVM에서 

penalty상수에다가 error case 개수를 min에 추가하는 방법이 있을 수 있다. 이건, 모든 error case가 동등하게 penalty줘야하는 경우

penalty상수에다가 support vector를 넘어서는 순간부터 penality를 주는 형태가 있다.

전자는 0/1 loss(decision boundary를 넘어서는 순간부터 error줌), 후자는 hinge loss(decision boundary를 넘지 않았어도 support vector를 넘어서면 penalty 부과)

0/1 loss인 경우가 잘 쓰이지 않는 2가지 이유, 형평성문제(아주 틀린놈이랑 조금 틀린놈이랑 같은 취급), quadratic programming 구현이 어려움

후자에서 hinge loss인 경우 optimization problem은 다음과 같다.

min over (w,b) (||w||+C*sum over all j ξ_j s.t. y_j(wx_j+b) >= 1- ξ_j and ξ_j >=0 for all j in training instances.

(여기서 1-ξ_j를 이해하는게 관건, 원래는 >=1이었는데, >=1-ξ_j란 원래 있어야할 >=1영역보다 떨어진 정도를 1-ξ_j 로 나타낸 것)

후자는 Quadratic Programming이 쉽게 풀림 ξ_j를 slack variable(부가변수)라 한다.

Constraints를 Soften했다고 해서 Soft margin SVM이라 하는 것

Kernel Trick이란, 다른 차원으로 보내서 내적으로 정의되어있지만, 다른 차원으로 보내는 feature mapping function을 구하지말고 구하는 방법을 가리킨다. lagrange multiplier를 구하는 dual

https://www.youtube.com/watch?v=dP9CDyR0L3E

이거부터 보면서 마무리 정리하면 됨



Quadratic Programming

:다변수, 차수는 최대 2차인 함수를 max/min optimization, constraint는 1차로 표현되는 형태릐 문제를 가리킨다.

nonlinear programming의 대표적인 예


Quadratic Residue

:이차잉여를 배우는 이유는 정수계수정수방정식을 풀 때 그냥 풀기는 어려워서 합동식으로 범위를 제한하고 Chinese Remainder Theorem를 써서 구하는게 큰 그림. 이를 위해 일차, 이차 등 합동방정식을 해결먼저하는게 필요하고 그 때 이차잉여, 르장드르 기호 도입 등이 필요함






Decision Tree

:

n:features 총 개수

m:training instances의 총 개수


Parameters(scikit learn기준)

max_depth:tree의 depth의 상한을 설정

presort:학습이전에 데이터를 sort를 먼저 할 지를 정한다. m이 천단위로 적을 땐 True, 만단위이상일 땐 False하는 것이 학습 속도에 도움이 된다.

criterion:gini or entropy, cost function을 계산하여 feature를 greedy하게 나눌 때, impurity를 gini value를 쓸 지 entropy를 쓸 지 정한다. gini와 entropy가 성능 차이가 뚜렷하지 않으므로 계산이 빠른 gini가 default, 두개가 만들어낸 tree가 다를 때를 보면은 gini가 the most frequent class를 독자적인 branch로 두는 경향이 있고 entropy는 balanced tree를 만들어 낸다.

min_samples_split:leaf가 아닌 node가 split될 후보가 되기위한 최소 samples개수, 즉 만약 node_k가 samples가 153인데 min_samples_split가 160이면 학습시 node_k에서 쪼개는 것은 더이상 생각 안함

min_samples_leaf:leaf가 가질 수 있는 최대 samples 개수, 만약 node_k가 samples=7이고 쪼개지면 1과 6으로 쪼개지는 상황인데 min_samples_leaf가 2이면 1<2이므로 쪼개지지 않게 함

max_leaf_nodes:leaf의 최대개수 상한

max_features:학습시 각 node에서 feature를 고르는데 feature 고려 후보 개수 상한, 즉 max_features=5이고 모든 feature개수가 50일 때, 각 node에서 50개 중 임의의 5개의 feature만 택해서 greedy하게 best feature, threshold를 찾아낸다. 적을수록 regularize하는 것이고 overfit risk 낮춤

splitter:각 node에서 greedy하게 택한 best feature를 쓸지, 아니면 random하게 feature택하고 threshold만 적절하게 학습으로 찾을 지 선택


학습과정

:

Cost(feature_name, threshold_value) = left_ratio * left_impurity + right_ratio * right_impurity 가 최소가 되게하는 feature_name과 threshold_value를 택한다. 

즉 the purest subsets(weighted by their size)가 되게끔

이후 각 node마다 위의 과정을 반복하여서 feature_name과 threshold_value를 차례로 설정해나간다. 더이상 training instance가 나눠지지 않을때까지 나누거나 max_depth로 설정한 값까지 나눈다. 즉 greedy하게 학습한다.

greedy하기 때문에 optimal solution인지는 알 수가 없다. optimal solution을 찾는 것은 NP-Complete로 알려져 있으며 O(exp(m))로 알려져 있다. 


regression의 경우

Cost(feature_name, threshold_value) = left_ratio * left_variance + right_ratio * right_variance 가 최소가 되게하는 feature_name과 threshold_value를 택한다.

여기서 left_variance란, left에 속하게 되는 instances의 y값의 편차를 가리킨다.


학습할 때의 계산복잡도는 O(n*m*log(m))이다.


restriction없이 그냥 decision tree를 학습한 후에 모든 children nodes가 leaf인 node중에서 chi-square test using p-value 해서 null hypothesis:이 node를 children과 두는게 성능 향상되는게 우연이다, 라고 둔 확률이 일정 threshold(hyperparameter)보다 크면 accept하고 node의 children를 삭제하는 형태의 constraint를 두기도 한다. pruning(가지치기)라고 한다.



학습후

:

각 node는 다음의 데이터를 갖는다. 

feature_i criteria, ex) length > 0.2, 통과되면 왼쪽 node로 감

gini value(1 - (a_1/samples)^2 - (a_2/samples)^2....), 즉 작을수록 좋고, impurity를 measure하는 metric중 1가지 or entropy (parameter인 criterion을 default가 gini)

(entropy는 각 class의 training instance분포를 기준으로 구함, training instance가 0인 class는 summand로 넣지 않음)

samples(통과된 training instance의 개수), 

value=[a_1,a_2,...a_class개수]로 각 training instances의 class별 개수, 

class(이 node에 있으면 predict한 class값)


tree_clf.predict_proba("feature value list")를 통해 임의의 instance(feature value list로 실현된)를 입력하면

instance가 도착한 node의 samples와 value를 이용하여 instance가 어떤 class인지 predict한 값과, 그 class일 확률을 계산한다.

그 class일 확률 및 다른 class일 확률은 samples와 value를 이용하여 a_1/samples, a_2/samples,...를 통해 계산한다. 즉 training instances들의 그 node에 분포한 확률을 뱉는 것일 뿐. 즉 test instance의 feature값이 무엇이든, 같은 node에 도착하면 class distribution은 같게 나온다.


predict할 때의 계산 복잡도는 O(log(m))이다. Worst case는 O(m), 즉 모든 leaf가 training instance를 1개씩만 갖는 상황. (꼭 한개의 node에 여러 samples가 있을 필요가 없음, 특정 class의 samples가 다 있어야 하는 것도 아님)

따라서 아무리 많은 training instance로 학습하였어도, prediction은 빠르다.





특징

:

데이터 전처리를 거의 필요로 하지 않는다. scaling, centering따위 필요하지 않음

nonparametric(parameter가 없다는 뜻이 아니라, 있지만, 학습 이전에 정하지 않는 다는 의미), 따라서 overfit위험이 크므로 max_depth같은걸 지정함

regularization은 hyperparameter(max*을 줄이거나 min*을 늘리거나 하여 overfit 예방)

decision tree는 기준을 orthogonal하게 잡아버림, 따라서 rotation된 data에 대해선 generalization performance가 약함->PCA쓰고 decision tree쓰면 해결됨

학습데이터의 small variance이 학습된 decision tree 모양을 크게 바꿀 수 있음->instable

scikit-learn의 경우 decision tree를 학습시킬 때마다 (max_features같은게 설정되어 있다면)같은 training data set이어도 다른 모델들이 나올 수 있다. 왜냐하면 random하게 feature를 택하기 때문->instable

이러한 instable문제 때문에 random forest(decision tree의 bagging version)이 등장함




Random Forest

:


Autoencoder

:input, hidden layers, output으로 구성

데이터의 효과적인 표현(coding)을 learning

대개는 더 작은 사이즈로 dimensionality reduction

알아서 적절한 features만 뽑아낼 것(without label and domain knowledge)

->Autoencoder


사용하는 곳

-feature detectors, feature extraction, dimensionality reduction

-generative model


Autoencoder가 단순히 identity가 아닌 이유

-사이즈를 줄여나간 latent feature space

-변형된 Autoencoders(input은 with noise, output은 without noise)



구성

encoder=recognition network

decoder=generative network

output=reconstructions

loss=reconstruction loss


internal representation=latent feature

internal representation < input

이 때 undercomplete autoencoder라 한다


Simple Autoencoder(즉 layer가 가장 적게)에서 

activation function을 안쓰면 PCA와 같다.


Deep Autoencoder

주의사항:너무 딥하게 만들면, 모든 training instance마다 1개의 숫자로 대응시켜버려서

training accuracy는 좋지만 generalize는 못할 수가 있음


전략1:Tying Weights

transpose를 활용하여 같은 weight를 둠으로써 학습할 weight개수를 낮추고 deep하게 가능

fully_connected쓰지말고 직접 행렬을 정의하는게 이때는 훨씬 간결하다

이 때 주의사항

weights1과 weights2만 regularizer에 넣고

weights3과 weights4는 넣으면 안됨

bias는 tied도 regul도 안했음


전략2:한번에 한개의 autoencoder학습시키기

매우 deep한 autoencoder에서 유용하다(효율적인 학습)

즉 한번에 2개의 weight와 2개의 bias를 학습시키자.(그동안 나머지 weight와 bias는 고정)

이때 phrase가 증가함에 따라 input을 매번계산하지않게 하기 위해

값을 저장해두고 쓰기


Visualizing Features

방법1: layer에서 각 뉴런마다 가장 값이 높게 나오는 training instance찾기, 이 때 layer가 top에 있을 때가 효율적임, lower에 있을 때는 매우 추상적이고 값도 적을 가능성이 높다. 예를 들면 first neuron이 가장 높은 값이 있을 때, 그 때의 training instance가 고양이 사진이라면 다른 고양이 사진에서도 first neuron값이 높게 나올 것이다.

방법2:각 뉴런마다 직전 웨이트값을 transpose하여 plot해보기, weight값의 크기를 통해 그 뉴런이 어떤 feature를 찾으려는지 시각화됨

방법3:임의의 랜덤 input(image)를 넣고 내가 관심있는 neuron이 좀 더 activate하게되게 이미지를 수정해나가기(backpropagation)

(Classification의 pretraining 으로 사용할 경우, 그냥 Classification의 성능을 볼 수도 있다.)


Regularization implement example

:

regularizer = tf.contrib.layers.l2_regularizer(l2_reg)

initializer = tf.contrib.layers.variance_scaling_initializer()

X = tf.placeholder(tf.float32, shape=[None, n_inputs])

weights1_init = initializer([n_inputs, n_hidden1])

weights2_init = initializer([n_hidden1, n_hidden2])

weights1 = tf.Variable(weights1_init, dtype=tf.float32, name="weights1")

weights2 = tf.Variable(weights2_init, dtype=tf.float32, name="weights2")

weights3 = tf.transpose(weights2, name="weights3") # tied weights

weights4 = tf.transpose(weights1, name="weights4") # tied weights

biases1 = tf.Variable(tf.zeros(n_hidden1), name="biases1")

biases2 = tf.Variable(tf.zeros(n_hidden2), name="biases2")

biases3 = tf.Variable(tf.zeros(n_hidden3), name="biases3")

biases4 = tf.Variable(tf.zeros(n_outputs), name="biases4")

hidden1 = activation(tf.matmul(X, weights1) + biases1)

hidden2 = activation(tf.matmul(hidden1, weights2) + biases2)

hidden3 = activation(tf.matmul(hidden2, weights3) + biases3)

outputs = tf.matmul(hidden3, weights4) + biases4

reconstruction_loss = tf.reduce_mean(tf.square(outputs - X))

reg_loss = regularizer(weights1) + regularizer(weights2)

loss = reconstruction_loss + reg_loss


Tensorboard

:

now = datetime.utcnow().strftime("%Y%m%d%H%M%S")

root_logdir = "tf_logs"

logdir = "{}/run-{}/".format(root_logdir, now)

mse_summary = tf.summary.scalar('MSE', mse)

file_writer = tf.summary.FileWriter(logdir, tf.get_default_graph())

이렇게 학습시마다 다른 텐서보드를 얻기위해 폴더명에 실행시간을 추가시켜버리는 테크닉가능

summary_str = mse_summary.eval(feed_dict={X: X_batch, y: y_batch})

step = epoch * n_batches + batch_index

file_writer.add_summary(summary_str, step)

이렇게 텐서보드에 표현하고 싶은 필요한 스칼라값을 (학습중에서도 생기는,배치나 에퐄사이에)추가하여 학습, 그러면 events파일로서 저장되어 텐서보드에 표현가능


ROC(Receiver Operating characteristic curve)와 AUC(Area Under Curve)

:

False Positive란 예측값이 Positive인데 틀린(False) case, 즉 실제론 Negative인데 Positive라고 예측한 경우, Type I error

False Negative란 예측값이 Negative인데 틀린(False) case, 즉 실제론 Positive인데 Negative라고 예측한 경우, Type II error

False Positive Rate란 FP/N, 즉 실제 Negative에서 False Positve의 비율, 낮을수록 Negative인 것을 Negative라고 잘 판단

True Positive Rate란 TP/P, 즉 실제 Positive에서 True Positive의 비율, Recall이라고도 불리며 높을 수록 Positive인 것을 Positive라고 잘 판단

ROC란 어떤 binary classifier의 threshold를 다양하게 하여 x축을 FPR, y축을 TPR으로 하여 그린 곡선이다. 해석은 다음과 같다.

-[0,1]x[0,1]에서 그린 곡선이다.

-y=x위의 점인 경우 accuracy가 50%이다.(단 FPR=TPR=0.9인 경우랑 FPR=TPR=0.1인 경우 전자는 그래도 Positive인 것을 Positive라 판단하는 성능은 좋으며, 후자는 Negative인 것을 Negative로 판단하는 성능은 좋음)

-같은 binary classification문제에서 2개의 모델을 threshold를 다양하게하여 ROC curve를 각각 그려 2개를 그린다. 이 때 두 모델중 어느 것이 성능이 더 좋은 지를 판단하는 것을 AUC를 사용하여 구한다. (즉 2개 모델에서 threshold를 뭘하든 모델자체의 성능을 평가하기 위함)

-(FPR, TPR)=(0.9, 0.1)인 경우 엄청 성능이 낮음, random보다도 성능이 낮은 경우

-AUC가 높다->(FPR,TPR)이 좌측 상단에 있다->Better Case->즉 2모델 중 AUC가 높은게 Better Case(threshold가 존재)한다.

-실제로 어떤 threshold hold를 쓸 지는 TPR와 FPR중 무엇이 더 중요한지(즉 Problem마다 다름)를 생각하고 정한다.


Ridge, Lasso, L1, L2, regularization

:

ridge regression이란 bias말고 weight를 l2 norm구해서 l2 norm자체를 loss에 추가한 것

lasso regression이란 bias말고 weight를 l1 norm구해서 l1 norm 자체를 loss에 추가한 것

lasso는 여러 feature중 의미없는 feature를 걸러내는 데 사용

ridge는 weight의 절댓값을 줄임으로써 모델의 generalization의 성능을 끌어올리고자 하는 것

특히 training data가 적을 때 사용


Docker

:

장점

-용량 줄이기. 가상머신은 운영체제를 하나 새로 까니까 용량이 더 든다.

-빠르다. 가상머신은 CPU를 쪼개서 쓰므로 느릴 수 밖에 없다. 프로세스 차원으로 격리시켜 사용하는 도커는 OS를 분리하진 않으므로 기존 자원을 그대로 사용하므로 빠르다.

-


특징

-리눅스 전용

-sudo로만 실행가능, 매번 sudo쓰기 싫으면 sudo usermod -aG docker egoing을 실행시켜 현재 계정을 도커계정에 추가시키면 된다.

-image와 container로 구성, image란 실행파일과 라이브러리의 총합, container란 image를 실행해둔 상태를 가리킨다.





설치하기

-sudo wget -qO- https://get.docker.com/ | sh


사용하기

어떠한 패키지를 사용하는데에 있어서 그것을 일일이 다 설치하기보단 그것을 미리 설치해둔 좀 더 큰 이미지를 받아 실행시킴으로써 패키지 관리자를 사용할 수가 있다.

-우분투 이미지 다운받아 실행하기


push

ex)docker push ~~~~

자기가 만든 이미지를 서버로 공유하는 것

docker와 dochub와의 관계는 git과 github와 비슷하다.


pull

ex)docker pull ubuntu:14.04

우분투 14.04 패키지 시스템이 구성된 이미지를 받아온다.

우분투의 커널을 제외한 모든 리눅스 배포판이 이미지안에 포함되어있다.

ex)docker pull nginx:latest

이처럼 버전을 latest라 두면 가장 최신버전의 이미지를 받아온다.


images

ex)docker images

현재 docker가 갖고 있는 이미지의 리스트를 반환한다.


search

ex)docker search ubuntu

현재 dochub에 있는 ubuntu가 포함된 이미지 리스트를 반환한다.

결과 리스트에서 앞에 아이디가 적혀져있지 않은 것은 도커에서 지원하는 공식 이미지들이다.

하지만 결과 리스트가 너무 많아서, docker.com에서 browse 탭에서 ubuntu라 검색하면 Tags에 버전들 목록이 있으며 그것을 참고해서 docker pull ubuntu:14.04 같이 입력하여 사용하면 된다.


run

ex)docker run -i -t ubuntu:14.04 /bin/bash

설치된 이미지를 통해 container를 실행시키고 들어가는 명령어

/bin/bash를 쳐줌으로써 이미지에 있던 bash파일을 실행하면서 container를 실행

docker는 기본적으로 실행할 메인 실행파일(현재는 /bin/bash)을 함께 실행시켜야 container가 유지되고, 이것을 종료함으로써 container를 종료한다.

-i:interactive환경을 제공

-t:가상터미널환경을 제공

이후 container 내에서 어떠한 패키지들을 설치하면 그것은 원래 운영체제에서는 설치되지않고 container 내에서만 설치가 된다. 마찬가지로 기존 운영체제에 설치된 패키지를 container 내에서 사용할 수가 없다. 완전 독립

ex)docker run -i -t --name bg ubuntu:14.04 /bin/bash

--name을 통해 container의 이름을 붙여 실행시킬 수 있으며, 이는 후에 container를 재실행하기 쉽게 만든다. 만약 name을 지정하지 않았다면 docker가 알아서 이름을 만든다.

container내에서의 패키지 설치 및 사용 등은 container-level에서 독립적이다. 즉 하나의 image로 여러개의 container를 만들어서 사용할 수가 있으며 각개의 container는 독립적으로 운용된다.

ex)docker run -d --name hello-nginx nginx:latest

-d:detached, 백그라운드로 실행, 그렇다보니 bash같은 실행파일을 지정해주지 않아도 된다.


start

ex)docker start "container id"

ex)docker start "container name"

ex)docker start bg

container의 id나 name을 이용하여 container를 실행시킨다. 이 경우 container가 실행되지만 안으로 들어가지는 않는 상태가 된다.


attach

ex)docker attach "container name"

start로 실행시켰던 container로 들어가는 명령어


ps

ex)docker ps

현재 실행중인 container 목록이 나온다.

ex)docker ps -a

과거에 종료했던 container까지도 포함해서 목록이 나온다.

ex)docker container rm "container id"

docker rmi "image_name" 했을 때 특정 container가 사용중이므로 삭제가 안될 때가 있다. 그 때 docker ps해도 container가 켜지지 않았음에도 에러가 날 때가 있는데, 그땐 docker ps -a로 과거 container history를 본 다음에, 확실히 container를 제거해줘야한다. 그때 docker container rm "container_id"가 필요하다.


ctrl+p+q

container 내에서 container를 종료시키지 않고 빠져나오는 명령어

만약 container를 종료시키면서 빠져나오고 싶다면 exit 혹은 ctrl+d를 써서 bash를 꺼주면 된다.


stop

ex)docker stop "container name"

container밖에서 현재 실행 중인 container를 종료시키고 싶을 때 사용하는 명령어


rm

ex)docker rm "container name"

특정 container가 관심없어서 지우고 싶을 때 사용


rmi

ex)docker rmi "image name"

docker가 갖고 있던 image중에서 image를 삭제하는 명령어


exec

ex)docker exec "container name" touch /hello.txt # touch란 파일 만들기 명령어이다.

밖에서 container의 우분투에서 명령을 실행시킬 수가 있다.


commit

ex)docker commit "container id" "image name"

만든 container를 image로 뜨는 명령어이다.


nvidia-docker2설치과정

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \

  sudo apt-key add -

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \

  sudo tee /etc/apt/sources.list.d/nvidia-docker.list

$ sudo apt-get update

$ sudo apt-get install -y nvidia-docker2

$ sudo docker pull nvidia/cuda:10.0-cudnn7-runtime-ubuntu16.04

$ sudo systemctl daemon-reload

$ sudo systemctl restart docker


cp

ex)docker cp "host파일경로" "container name":"container 내부경로" # host->container 파일복사

ex)docker cp "container name":"container 내부경로" "host파일경로" # container->host 파일복사

ex)docker cp docker-cp-test anchore:test



참고자료

http://pyrasis.com/docker.html

https://opentutorials.org/course/128/8657

https://nicewoong.github.io/development/2018/03/06/docker-commit-container/

https://hiseon.me/2018/02/19/install-docker/

https://github.com/NVIDIA/nvidia-docker/issues/838


Git

:

버전관리 시스템 중 하나(version control system)

파일이름을 바꾸지 않으면서도 버전관리, 즉 변경사항을 관리한다.

게다가 backup, recovery, collaboration(다른 사람과 협업) 등이 가능


설치방법

:

sudo apt-get install git

or

sudo yum install git


git init

ex)git init

프로젝트 폴더 내에서 실행하면 이 폴더를 버전관리를 하겠다고 git에게 알려주는 명령어

이후 프로젝트 폴더 내에 .git이란 폴더가 생기고 여기에 모든 작업 내역들이 저장된다.


git status

ex)git status

버전관리를 하겠다고한 폴더내에서 실행하면 현재 폴더 내에 파일들의 status를 알려준다.


git add "file명"

ex)git add f1.txt

git에게 파일을 관리(track)하라고 명령하는 명령어

git init하고나서 이후에 새로 추가된 파일들에게 주로 필요하며, init된 폴더내에 있다고해서 버전관리가 다 필요한 파일들이 아니기때문에, 새로 만들때마다 git add해주어야 한다.

최초 track을 하기 위해서도 git add를 쓰지만, 이후 파일을 수정하고나서 git status하고나면 "modified"가 나오는데, 이때 바로 git commit하여 새버전을 만드는게 안된다.

이때 새 버전을 만들때도 git add "file명" 해주어야 한다.

즉, git add는 1. track(변경이 된건지 아닌건지), 2. make new version, 2가지를 위함에 필요하다.

즉, git은 내가 commit하고 싶은 파일만 등록해서 commit할 수 있게 add를 둔 것, add를 통해서 stage(commit 대기파일들)에 파일을 등록시킨다.


작성자 profile 등록

git config --global user.name bg

git config --global user.name bg@gmail.com

이렇게 함으로써 버전에 작성자 profile을 등록할 수 있다.


git commit

실행하게되면 stage(commit 대기파일들)에 있는 것을 commit한다.

git status한 내용들이 하단에 주석으로 깔리고 상단에는 버전메시지를 입력하게끔 vim으로 .git/COMMIT_EDITMSG파일이 열린다.

버전메시지(commit message)란, 새 버전의 유의미한 변화를 적어주면 된다.

이후 commit하여 생성된 버전이 저장되는 곳을 repository라 한다.


git log

버전메시지들의 log가 남는다. 버전 작성자의 profile과 버전을 만든 data도 출력한다. 그리고 각 commit의 id도 출력한다.

git log -p

버전메시지들의 log와 함께 각 버전마다 직전버전과의 변화를 출력한다. 

기본적으로 버전관리라함은 git init한 폴더 자체를 1개의 버전으로 보기 때문에, 각 버전마다 새로생긴 파일, 수정된 파일 등의 변화를 볼 수가 있다.

git log "commit id"

해당 commit id의 이전 log만 출력한다.

git diff "commit id1".."commit id2"

commit id1과 commit id2 사이의 log -p만 출력, -는 commit id1의 내용, +는 commit id2의 내용을 출력한다.

git diff

작업한 변경사항들을 보여준다. 대개는 commit하기전에 확인차원에서 써본다. add하기 전의 파일들의 수정사항들을 확인하는 것이다. add한 파일들의 수정사항들은 나오지 않는다.


git reset

(버전을 되돌리는 방법이므로, 주의해서 사용해야함, 프로젝트 폴더 전체를 백업떠두고 하는 걸 추천)

git revert






Python3

:

sudo apt-get install python3-pip

pip3 freeze > requirements.txt

pip3 install -r requirements.txt


Numpy

:


Clustering

:


결과에 따른 종류:

Hard clustering:각 instance가 단일 cluster에 속하는 경우

Soft clustering:각 instance가 각 cluster에 속하는 정도를 나타낸 경우


알고리즘에 따른 종류:

K-means clustering:

n개의 instance를 m(<=n)개의 cluster에 속하게끔 분류를 한다. 이 때 C_1, C_2, ..., C_m개의 cluster에 속하는 instances의 평균을 μ1,μ2,...,μm이라 할 때 C_k에 속하는 임의의 instance와 평균사이의 거리제곱의 합이 최소가 되게하는 C_1,C_2,...,C_m을 설정하는 것을 목표로 한다. 방법은 Assignment Step과 Update Step을 반복적으로 시행하여 얻는다. 

먼저 initial values of means를 설정한다. 이후 Assignment(각 점마다 가장 가까운 mean의 cluster에 배정), Update(각 cluster의 새 mean을 구함)

이후 Assignment를 하여도 변함이 없을 때 종료한다. 

특징:


거리(distance)함수를 L2 외 다른 것을 씀으로써 변형 K-means clustering이 가능

만들어진 cluster가 convex하지 않으면 clustering이 실패하거나 means가 엉뚱한 값이 될 수가 있다.

초기 mean 설정에 대한 여러 방법들이 존재


최적 cluster 개수 k를 설정하는 여러 방법들이 존재(거리제곱의 합이 최소 중에 최소가 되는 k 선택, 물론 k=n이면 0이 되지만, k<<n인 k 중에서 거리제곱의 합이 급격히 변화하는 k를 택하거나, silhouette(각 점(i)마다 cluster 내의 다른 점들과의 평균거리(a(i))와 다른 cluster 각각의 평균거리(즉 다른 cluster 내의 점들과의 거리의 평균)의 최솟값 (b(i))를 구한다. 이렇게 각 데이터 i마다 a(i), b(i)를 바탕으로 silhouette score s(i)를 구하고 s(i)의 값에 따라 i가 cluster에 잘 배정됐는지를 해석한다. wiki에서 silhouette clustering을 검색, s(i)값이 높을 수록 좋으며, cluster 개수 k를 증가시키며 평균 silhouette score값이 최대가 되는 k를 택한다. 혹은 이전의 거리제곱의 합이 최소인 것과 동시에 silhouette score를 각 군집마다 결과를 내서 함께 고려하여 k를 결정하기도 한다. Calinski-Harabasz index(군집간 산포와 군집내 산포의 비율을 이용, https://scikit-learn.org/stable/modules/clustering.html#calinski-harabaz-index 참고)를 이용하여 k를 결정하기도 함(물론 silhouette, 거리제곱합 등도 함께 이용)


DBSCAN(Density-Based Spatial Clustering of Applications with Noise):


특징:

non-convex 문제를 해결할 수 있음

k를 먼저 선언하지 않아도 된다.


Ensemble

:

이론 배경은 Law of large number에 있다.


Pandas

:

















'글쓰기 > 진행중' 카테고리의 다른 글

가볼만한 여행지 정리해두기  (0) 2018.10.30
Kaggle 입문  (0) 2018.10.29
운동일기  (0) 2018.10.15
신기술들 요약  (0) 2018.07.09
영어정리  (0) 2018.07.08

국내


서울

-난지도



전라도

-장도(섬)(보성군 벌교읍)

-전라우수영(해남)

-낙안읍성(순천)

-선암사(순천)

-진도(4월에 바닷길 축제)

-




국외


싱가폴에서의 크리스마스? 더운 크리스마스?


'글쓰기 > 진행중' 카테고리의 다른 글

모든 컴퓨터 관련  (1) 2019.01.21
Kaggle 입문  (0) 2018.10.29
운동일기  (0) 2018.10.15
신기술들 요약  (0) 2018.07.09
영어정리  (0) 2018.07.08

1. 

'글쓰기 > 진행중' 카테고리의 다른 글

모든 컴퓨터 관련  (1) 2019.01.21
가볼만한 여행지 정리해두기  (0) 2018.10.30
운동일기  (0) 2018.10.15
신기술들 요약  (0) 2018.07.09
영어정리  (0) 2018.07.08

목표는 아래의 모든 머신기구들 max중량, 셋트당 10~20, 4셋트채우기


1일차

체프:65

팩머:20

숄프:40

렉익:35

레프:80

케프다:20


2일차

체프:75

팩머:20

숄프:40

레프:100

렉익:40

로프다:10

케프다:X


3일차

체프:75

팩머:20

숄프:50

렉익:X

레프:100

로프다:12.5

케프다:X


4일차

체프:80

팩머:25

숄프:50

렉익:45

레프:110

로프다:15

케프다:X



'글쓰기 > 진행중' 카테고리의 다른 글

가볼만한 여행지 정리해두기  (0) 2018.10.30
Kaggle 입문  (0) 2018.10.29
신기술들 요약  (0) 2018.07.09
영어정리  (0) 2018.07.08
좋았던 표현 모음  (0) 2014.08.25

for tensorflow 1.x 1080ti


[install graphic drivers]

$ sudo add-apt-repository ppa:graphics-drivers/ppa

$ sudo apt-get update

$ sudo apt-get install nvidia-390


$ sudo reboot


[check]

nvidia-smi


[install cuda]

sudo sh cuda_8.0.61_375.26_linux.run

### cuda 9.0으로 수정해서 깔아야함


Do you accept the previously read EULA?

accept/decline/quit: accept


Install NVIDIA Accelerated Graphics Driver for Linux?

(y)es/(n)o/(q)uit: n


Install the CUDA 9.0 Toolkit?  

(y)es/(n)o/(q)uit: y


Enter Toolkit Location  

 [ default is /usr/local/cuda-8.0 ]: 


Do you want to install a symbolic link at /usr/local/cuda?  

(y)es/(n)o/(q)uit: y


Install the CUDA 8.0 Samples?  

(y)es/(n)o/(q)uit: n


Enter CUDA Samples Location  

 [ default is /home/your_id ]: 




[set env]

$ echo -e "\n## CUDA and cuDNN paths"  >> ~/.bashrc

$ echo 'export PATH=/usr/local/cuda-9.0/bin:${PATH}' >> ~/.bashrc

$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:${LD_LIBRARY_PATH}' >> ~/.bashrc

$ source ~/.bashrc


[check]

$ nvcc --version

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2016 NVIDIA Corporation

Built on Tue_Jan_10_13:22:03_CST_2017

Cuda compilation tools, release 8.0, V8.0.61



[install cudnn]

### cuda 9.0에 맞게 깔아야


이후 pip를 install한 다음에

sudo pip install tensorflow

sudo pip install tensorflow-gpu

sudo pip3 install tensorflow

sudo pip3 install tensorflow-gpu


ubuntu 18.04사용하면서

python3에서 tensorflow를 불러오는게 안될 수 있음

이때 오류에 나온 pip.py인가를 띄워서 __internal을 추가하는거였나...(체크필요)





*우분투

GPU사용현황

-nvidia-smi

deb파일 설치 과정

-

home에서 vim .bashrc

-기본적인 환경변수들 지정가능, 우분투 기본 옵션 할당하는 것 인듯?

파일권한변경

-chmod 755 파일명




*파이썬

list합치기

-list1 + list2

FLAG사용하는 이유

-FLAG에 새로운 값 넣으면서 실행가능, 작성시 default값 줄 수 있음

-try, except, else, finally, pass, raise, 

몇가지 필요한 습관

-None이 return시 raise를 써서 에러, 주석, 처리해주어야 함(if none:)

-Naming Rule

-파일명은 소문자

-Class은 대문자로 시작

-상수는 올 대문자

-_Private 함수는 _로 시작

-Public함수는 그냥 시작

-하드코딩 금지(최대한 빨간글자 줄이기)

-가능한 요소들은 최대한 클래스화

-모든 함수, 클래스에 정해진 형식의 주석 삽입

-외부 설정파일은 하나로 공유

-중복 코드 금지

-긴 코드 최대한 모듈화

-테스트용 코드는 반드시 분리

-최대한 자주 Git활용

-getter, setter in python(인자 여부로 구분가능)

-Issue Tracking 남기기, 항상 Issue가 생기면 먼저 Trello같은 곳에 남기고, 해결되어도 issue 지우지말고 남겨두기

-모든 python process 종료, pkill -9 python

-pyc만들기, import py_compile 이후 py_compile.compile(file), pyc로 만들 file.py를 입력하면, 실행한 폴더에 __pycache__ 폴더가 새로 생기며 거기에 pyc생김

-//은 몫, %은 나머지, /은 나누기(정수로가 아니라 그냥 나누기 연산, 예를 들면 10/4 = 2.5)

-


*numpy관련

np.array(list, dtype= ) # list 를 np array 클래스로 만듦

np.array[np.array([2,1])] 이렇게 np.array에 np.array를 넣어서(index) 해당 index의 값과 순서를 고려해서 array를 slicing 및 수정 가능

np.array[2:23]으로 slicing도 가능

np.arange(10) # 0부터 시작해 10이전까지 등차가 1인 np array를 출력

np.arange(3, 21, 2) # 3부터 시작해서 등차가 2이고 21이전까지 등차수열 np array를 출력

np.random.permutation(np.array) # np.array를 임의로 섞어 은 np.array를 출력





*Tensorflow

tf.Variable

tf.constant

tf.placeholder

3개의 구분

Variable은 Variable

나머지 둘은 tensor

Variable은 학습하여 얻은 행렬 및 값에 쓰임, 왜냐하면 저장 및 복구가 가능

constant는 w2v.npy불러와서 쓰이듯 고정값으로만 씀

placeholder는 같은 연산, 행위를 반복하되 변수를 바꿔서 넣어야할 때 쓰임, 따라서 입력벡터, 라벨링벡터 등에 쓰임


tf.one_hot(indices, depth, on_value, off_value, axis, dtype, name) # depth길이 만큼의 벡터들로 index에 해당하는 위치에 on_value, 아닌 위치엔 off_value를 넣는 벡터들을 출력


tf.Session() # tensorflow 연산들을 실행하기 위한 클래스

with tf.device(장치명): # 특정 작업을 특정 device에 배치

tf.ConfigProto(...)

  device_count = {'GPU' :0} # 지정한 장치(GPU/CPU)의 사용할 최대 개수 정하기

  log_device_placement = T/F # 연산이나 텐서가 어떤 device를 쓰는 지 log해줌

  gpu_options.allow_growth = T/F # 필요한 만큼만 GPU메모리 할당 하였다가 이후 더 필요하면 증가, 하지만 증가된게 줄어들진 않음

  gpu_options.per_process_gpu_memory_fraction = 0~1 # GPU의 메모리의 일정 부분만 할당

  allow_soft_placement = T/F # 명시된 device가 없어서 작동안될 시에 tensorflow가 자동으로 존재하는 device중 선택


tf.nn.embedding_lookup

tf.nn.bidirectional_dynamic_rnn

tf.contrib.rnn.BasicLSTMCell

tf.contrib.rnn.DropoutWrapper

tf.contrib.rnn.MultiRNNCell

tf.concat


*git

git clone -b name url

-복사하라(clone), -b(branch하나파서), name란 브랜치로, url의 파일을

git add main.py

-git이 변경사항을 알아처먹을 파일 지정

git status

-내가 수정한 내용들을 알려줌

git config

??

git commit -m "[TST] commit test"

-commit하라, -m(message)를 던지겠다, [xxx]에 대한 규칙은 git.md참고

git push

-git웹사이트에 commit 내용 반영



'컴퓨터과학 > 기본' 카테고리의 다른 글

컴퓨터공학  (0) 2018.03.20

주기동:주간기술동향, 정보통신기술진흥센터


180704 주기동


블록체인 기반의 탈중앙화 사례분석

단계별 제공가치 및 내용

1단계, 공유성, 모든 노드(사용자) 간에 정보를 공유함

2단계, 투명성, 정보 공유로 인해서, 숨기는 항목이 거의 사라짐

2단계, 무결성, '증명 알고리즘' 사용에 의해 공유 정보의 무결성 보장

3단계, 신뢰성, 믿을 수 있는 정보 공유로 노드 사이에 신뢰가 형성됨

4단계, 탈중앙화, 중개 비용 감소, 공유 비용 절감, 개인 권리 강화


GPS 전파교란 동향 및 대응 기술

GPS란, 위성항법시스템(Navigation Satellite System)중 Global, Regional 두가지로 분류할 수가 있는데, Global 중에서도 미국의 Global Positioning System을 GPS라 한다.

GPS 위성에서 송신하는 송출 신호의 세기는 25W로 강한 수준이지만, 지상까지의 거리가 멀어서, 약 20,000km, 지상에서의 수신 신호세기는 휴대전화 최소 수신 전력의 1/300 수준인 -160dBW로 약하다.

교란방법으로 잡음기법(위성 신호보다 40dB 이상의 강한 잡음 신호를 방출하여 수신기가 GPS 신호를 제대로 수신하지 못하게 방해하는 기법)과 기만기법(Meaconing(재머가 위성항법 신호를 수신하여 일정시간 동안 지연시킨 후 재방출하여 근처의 수신기로 하여금 재머 위치를 자신의 현 위치로 착각하게 만드는 방법)과 Spoofing(위성항법 정보를 열어서 내부 정보를 다른 정보로 조작하여 재방출함으로써 수신기로 하여금 재머가 보낸 엉뚱한 위치를 자신의 현 위치로 착각하게 만드는 방법))이 있다.


ICT로 고도화된 월드컵, 실시간 전술 변화 지원과 비디오 판정 도입

트래킹 시스템, 각 팀에 태블릿2개, 선수와 공의 위치 데이터, 각 선수의 달리기 속도, 패스와 압박, 태클 등의 통계데이터 제공 및 경기 영상 전달(30초 정도 딜레이)

VAR(Video Assistant Referee)


제2회 스타트업 월드컵

1위, 류코 랩스, 암 환자의 백혈구 수치를 신체에 의료 기기를 삽입하지 않는 비침습적 방법으로 모니터링하는 기술

2위, 플리토, 실시간 소셜 번역 앱

공동 3위, 스트랩, 시각장애인 지원 웨어러블 기기

공동 3위, 월박스, 전기자동차의 충전 효율 향상 기술

심사기준:임팩트가 강한 하나의 제품을 보유하고 있는가, 이미 사업화가 진행되어 어느 정도의 매출이 있는지


아마존의 인공지능 개발 플랫폼 개방을 통한 AI 생태계 확대 전략

2018년 5월 인공지능 알렉사 활용 앱 플랫폼인 스킬(Skill)에 유료 앱 등록을 모든 개발자에게 오픈함으로써 아마존의 음성 인공지능 생태계가 폭발적으로 확대될 것으로 예상

유어 보이스(Υοur Voice)라는 화자인식 기능도 개방함

이를 통해 하드웨어 제조사들에게 자사의 제품에 알렉사를 쉽게 탑재할 수 있는 기회를 제공, 인공지능 스피커 에코의 가치 상승, 많은 IoT상품들의 출현

Kohler의 Numi라는 인공지능 변, 음성명령에 따라 커버여닫기, 비데 강도 조절, 음악 재생, 물사용량 통계 등 가능


180711 주기동


인공지능의 창업 분야와 기회

1. 인공지능 기반 커머스에서 찾는 창업의 기회, Curation Commerce, 인공지능 기반의 맞춤형 추천, 개인화, 고객들의 특성, 과거 구매 내역 등 기반, Amazon Go는 무인 매장, 소비자는 스마트폰에 앱을 내려 받은 후, 매장에 들어가 계싼대에 줄을 설 필요 없이 원하는 상품을 들고 나오기만 하면 된다. 수백 대의 카메라와 센서들이 소비자가 어떤 물건을 골랐는지 자동으로 인식하고 연결된 신용카드로 결제까지 완료하기 때문

2. 미래 인공지능 챗봇에서 찾는 창업의 기회, 챗봇 자체를 서비스의 중심으로 이끌어가고 싶다면, Nadia와 같이 인간의 감정을 어루만져 줄 수 있는 친구 서비스로 가야한다. 혹은 B2B 형태의 창업으로 다른 서비스에 도움을 주는 형태로 가야한다. 챗봇 비즈니스를 시작할 땐 챗센터(chat Center), 즉 고객이 묻는 채팅 질문에 사람이 직접 대응하는 시스템을 동시에 운영해야 한다. 초기 오픈 단계에서는 90%에 가까운 예외사항들이 발생하고 이러한 예외사항에 대한 데이터를 빠르게 수집하여 적용해야 한다.

3. 인공지능 통번역에서 찾는 창업의 기회

4. 헬스케어 IoT와 인공지능의 결합에서 찾는 창업의 기회, 문신, 렌즈 형태의 센서들이 등장, 정신과 치료는 매일매일 환자의 상태를 파악해야만 좀 더 정밀하고 정확한 진료 가능, 챗봇을 통해 하루3번 상담, 구글 컨택트 렌즈를 통해 당뇨 진단도 가능, 

5. 패션과 인공지능의 결합에서 찾는 창업의 기회, 3D 패션 분야 가상현실을 통해 원단의 재질과 물리적 특성을 구현해 실물같은 옷을 보여줄 수 있다. 옷(티셔츠)에 센서를 달아 VR성능을 키우기도 가능, 자켓에 센서를 달아 스마트폰 제어가능(주요 수요층이 자전거로 출퇴하는 사람)

6. 인공지능 서비스 로봇에서 찾는 창업의 기회, 인공지능 면접관 서비스, 지원자의 얼굴 표정, 음성 등을 모니터링해서 지원자의 성향과 업무 능력 파악, 명품 진위여부 서비스도 가능(Entrupy가 개발한)

7. 가정용 로봇에서 찾는 인공지능 기술창업의 기회, 감정 표현, 소통, 개인 비서, 가전기기 제어, 집안 모니터링, 음악 스트리밍, 영화 재생, 교육(아이들의 질문에 대답과 재미있을만한 이야기를 들려주고 농담도 건넴), 약먹을 시간 알려주기, 담당 의사와 화상통신, 

7가지의 공통점은, '개인화'

IBM 왓슨, 구글 등의 원천 기술을 사용할 것을 추천하며, 대신 자신의 전문 분야(domain)에 노력을 쏟기를 바란다.


기업에서 사용되는 전력의 100%를 재생에너지로 충당하자는 'RE 100' 캠페인에 참여하는 글로벌 대기업들이 늘어나고 있음. (Renewable Energy)


구글 액션 카메라 '클립스clips', 가족이나 애완동물 등을 가르쳐두면, 그 인물을 중심으로 촬영, 미소 혹은 춤, 포옹 등을 스스로 파악해 사진작가처럼 비디오 및 사진을 찍음, 피사체와 1~2미터 거리가 적절, 최고의 씬 6초 정도 클립을 찍음, 


AI 민족주의 우려, 미-중 위주로 AI기술이 집중 발전하여 유전국/비유전국 처럼 지정학 요소가 될 수 있다.


180718 주기동

DQN(Deep Q-network)을 자율주행자동차에 적용하는 시도들이 있었지만 성공하지는 못하였다. 그 이유는 DQN은 ATARI 게임처럼 불연속적인 행동을 처리하는 조작이 간단한 문제에 적합하기 때문이다. 또한 DQN은 시뮬레이션 크기를 조금만 키워도 현재의 컴퓨터 계산 용량으로 처리할 수 없는 "차원의 저주"라는 컴퓨팅 자원의 한계도 가지고 있다. Deep Deterministic Policy Gradient, DDPG가 최근에 개발되었다. 연속적인 행동을 제어할 수 있다.


강화학습 기반 자율주행차량의 제어를 위해서 DQN을 적용하면, 차량의 3가지 행동 즉, 브레이크, 핸들, 가속페달의 값이 연속적이라서 계싼량이 기하급수적으로 증가하여 차원의 저주 문제에 봉착한다.


2017년 7월에는 일본 유명 영어학습 서비스 회사인 '이온(AEON)'이 영어학습용 가상현실 콘텐츠 "영어로 대접 가이드"를 출시하고 이를 애플리케이션으로 제공하여 스마트폰용 HMD를 사용하여 VR형태로 학습이 가능하도록 하였다. 즉, 단어와 예문을 사전 학습하고 대화 상대가 나타나면 배운 것을 토대로 대화를 이어나가는 방식으로 학습, 답변에 따라 달라지는 스토리텔링 콘텐츠를 VR기술을 활용하여 서비스하고 있다.


180725 주기동


딥러닝 기법을 이용한 인공지능 기반의 소비자 선호도 분석 시스템(짬뽕라면 A,B의 고객들의 리뷰를 통해 선호도 및 특성 조사를 딥러닝 기법을 이용하였을 때와 대면 조사(관능평가)의 성능 비교 및 장점이 있다.)

대면 조사의 단점:

-표본 집단의 구성 문제

-사이즈 증가에 따른 비용 문제

-취향 평가를 위한 적합한 질문 만드는 과정 및 평가를 위한 툴만드는 게 어려움

딥러닝 결과가 실제 대면조사와 비슷하게 나옴


허마시엔셩, new retail, 

new retail전략은 2016년 10월 마윈 회장이 제시한 것으로, 온 오프라인의 벽을 허무는 onmi channel 소매와 스마트 물류를 융합한 미래형 소비유통 모델이며, ICT를 활용하여 공급망을 혁신하고 빅데이터 분석에 따라 소비자의 요구를 만족시킨다는 것이 핵심

특히 육류, 야채 등의 코너에서 정확한 수요 예측을 통해 당일 생산과 당일 판매를 함으로써 최고의 신선도를 추구하는 것이 특징

육류와 야채 등 신선식품의 수요를 높은 정확도로 예측하고 당일 판매의 신뢰성을 보장할 수 있는 것은 철저한 고객 데이터 분석과 상품 추적 시스템을 활용하고 있기 때문

회원제를 택함, 반드시 스마트폰 전용 앱이 깔려야 쇼핑가능, 알리페이를 사용해야함, 이를 통해 방문 내역, 구매 내역 데이터 축적

전체 고객 ID를 부여하고 모든 판매 기록을 사용자마다 분석하여서 POS(계산대) 데이터 분석보다 정확도 높일 수 있음

스마트폰 앱으로 상품 포장과 가격표에 붙어있는 바코드 및 QR코드를 읽으면 상품에 관한 설명을 얻을 수 있음(생산지, 수확일, 가공일, 매장까지의 배송내역 등) 심지어 물고기 한마리마다 QR코드가 붙어있음

구매 후 현장에서 즉석 조리가 가능, 고객이 해산물을 수조에서 꺼내 결제한 다음, 조리 카운터에서 조리법과 양념을 지정하면 매장 내 상주 요리사가 즉석에서 요리를 해옴, 이걸 grocery + restaurant = grocerant라 한다. (미국, 유럽, 중국에서 유행)

스마트폰으로 주문하고 배송 받는 것이 가능, 30분 내에 배송해줌, 매장에서 대략 3km 이내 거리인 경우, 앱으로 매장에 있는 상품을 주문하면 30분 이내에 받을 수 있으며, 주문이 들어가면 점원이 매장에서 상품을 선택하고 허마시엔셩의 오토바이 퀵서비스를 이용해 배송함

경쟁업체 7Fresh는 허마시엔셩과 유사하되, 차별성으로는 고객을 자동으로 따라다니는 무인 자율 주행 쇼핑 카트, 셀프 계산대에서 얼굴 인식 인증 결제 도입 등이 있음

showrooming족, 즉 매장에서는 상품만 체크하고 실제 구매는 인터넷에서 하는 사람들, 쇼루밍 족을 위해 매장에는 재고가 있지만 쇼핑몰 사이트에서는 품절인 상품이 있다면 그 사실이 가격표에 표시되게하여 낭패를 보지않게 해주며, 각 가격표는 온라인과 연동하여 온라인 쇼핑몰의 가격과 실시간 연동되어 있다.


유튜버들의 축제, 비드콘(VidCon)

유튜버는 동영상 UCC(User Created Contents) 사이트인 유튜브에서 인기를 얻고 있고 영향력이 있는 인플루언서(influencer)들을 총칭하는 말

2018년 축제에 어린이와 청소년, 그리고 여성참가자가 많음

주최하는 곳은 유튜브나 모회사인 구글이 아니라, 컨퍼런스 이름과 같은 비드콘이라는 기업이고 올해로 9번째 행사를 주최함


안내 로봇, 아이들의 집단 괴롭힘을 피할 방법 학습

아이들의 경우 로봇의 길을 비켜달란 부탁에 무시하거나 여러 명의 어린이가 로봇을 둘러싸고 발로 차거나 공을 던지는 등의 폭력적 행동을 보이기도 함

이를 해결하기 위해 아이들의 행동 패턴 및 폭력 행위 모델을 포함한 시뮬레이션 학습용 알고리즘 '회피 기동 시스템(Escape Maneuver System)을 개발함

알고리즘의 핵심은 폭력이 발생할 가능성이 높은 상황이라고 판단되면, 로봇이 원래의 경로를 변경하거나 목적지를 변경하도록 하는 것임(사람과 조우했을 때, 상호작용 시간, 인구 밀도, 1.4m 이하의 사람이 있는지 등을 감지하며, 위험이 감지될 경우 1.4m 이하의 사람들로부터 달아나 키가 큰 사람의 그룹이나 인구밀도가 높은 장소로 이동함)








'글쓰기 > 진행중' 카테고리의 다른 글

가볼만한 여행지 정리해두기  (0) 2018.10.30
Kaggle 입문  (0) 2018.10.29
운동일기  (0) 2018.10.15
영어정리  (0) 2018.07.08
좋았던 표현 모음  (0) 2014.08.25

날짜+영어표현

주말에 총정리

(내일은 켜자마자영단어에있는거 옮기기)


cortically

sensualism

phubbing

coital

assertive

supine

panacea

kindergartener

gossamer

meridian

voiceover

devolve

heist

dachshund

cynic

live a decadent life

make biased calls

swoon

humongous

arable

agnostic

pawn off

fine-grained

circumplex

latch

in hidsight

fete

fiddle

melt away

window pane

polysemy

invariably

syntactical

cold start

legend

granularity

factoid

multiple hops

prune

downstream

grid-search

out of the box

nil

hapax legomenon

gestapo

scaffold

mescaline

ad hoc

topical

leapfrog effect

tendril

tush

shook(shake)

cheek

drool

lightsaber

faint

mermaid

bang(앞머리)

jack o lantern(할로윈 호박)

I pity the fool(난 그 어리석은 놈을 동정하지(나에게 잘못한 그새끼 걸리면 뒈진다 류의 catchphrase))

I forgot my combination(combination은 열쇠 비밀번호)

late pass(초중고딩들 지각사유서)

killer handshake(악수할때 특이하게 하는 방법 중 하나)

electives(선택과목들)

emasculate(무기력하게 느끼게 만들다)

giggly(낄낄거리는)

imputation

futuristic

WBS(Work Breakdown Structure, 소프트웨어 공학 쪽 용어)

SOW(Statement of Work, Scope of Work)

IR(Investor Relations)

PR(Public Relations)

HIS(Hospital Information System)

EMR(Electronic Medical Record)

PHR(Personal Health Record)

replenishment

rosary

faint music

chit chat

dork

tantalize

kindred spirits

wrecks it for me

RV(recreational vehicle)

play dead

admission by that name

cog in a network

barrel of a gun

wasp

feisty

dysfunctional family

acrimonious

extubate

right wing extremist

huckleberry

cock a gun

splinter

leg up

sea change

use it or lose it

intrepid

collar

anaphora

fleece

surf and turf

snippet

wide berth

irons in the fire

bipolar

vaping
pecking order
up-and-coming
literary cottage
snot
antelope
gullet
foray
ostensibly


'글쓰기 > 진행중' 카테고리의 다른 글

가볼만한 여행지 정리해두기  (0) 2018.10.30
Kaggle 입문  (0) 2018.10.29
운동일기  (0) 2018.10.15
신기술들 요약  (0) 2018.07.09
좋았던 표현 모음  (0) 2014.08.25

머신러닝 기본 정리(각 키워드 핵심 내용 말할 수 있어야)

Learning, cost-sensitive learning, 

Inference

open-set protocol/closed-set protocol

hard (negative) mining

Logistic Regression

Naive Bayes

holdout method(non-exhaustive), k-fold cross-validation(non-exhaustive), leave p out cross validation(exhaustive), stratification, 

DB(Data Base), ElasticSearch, 

NLP(Natural Language Processing), LSI(Latent Semantic Indexing), LDA(Latent Dirichlet Allocation), CBOW(Continuous Bag Of Words), Skip-gram(Hiererchical Softmax, Negative Sampling, Subsampling frequent words), FastText(Subword-Information Skip-Gram), IF-IDF, Skip-thought, Co-occurence matrix

(Directed/Undirected)Graphical Model, CRF(Conditional Random Field), HMM(Hidden Markov Method), 

Generative/Discriminative Model

Kernel Method(Positive-Definite Kernel, RKHS(Reproducing Kernel Hilbert Space), Representer Theorem)

Production Quantization

SIFT(Scale-Invariant Feature Transform)

Deep Residual Learning

k-means clustering

k-nearest neighbors

instance-based, model-based,

GAN(Generative Adversarial Network), 

Robo-Advisor

Deep Taylor Decomposition

self-attentive sentence embedding


EM algorithm

Gibbs Sampling

topic model에서의 perplexity, coherence

ReLU, Swish, 

learning rate, iteration, batch size, epoch

batch/standard gradient descent, stochastic gradient descent, mini-batch gradient descent

batch normalization??

unsupervised learning, supervised learning, semi-supervised learning(PU learning)

macro-averaging, micro-averaging,


uniform distribution

hypergeometric(N개 중 M개가 빨간거, K개를 뽑는데 빨간것의 개수가 x일 확률, 정상/불량으로도 가능)

bernoulli(1번 시도 중 성공(x=1)확률)

binomial(N번 시도 중 x번 성공할 확률)

negative binomial(K번째 성공까지 시도한 횟수가 x번일 확률)

geometric(1번째 성공까지 시도한 횟수가 x일 확률)

poisson(주어진 시간 구간 동안 사건이 일어난 횟수)


gamma(sub:chi-squared with degree p of freedom, exponential, related:Weibull, inverse-gamma)

Normal(related:lognormal, cauchy)

(beta부터정리)


Kuller Leibler Divergence(DL(P||Q))

Frobenius norm

textual entailment

self-attention

scikit-learn tokenizer


Pearson Correlation Coefficient, Spearman's Correlation Coefficient

Deep Taylor Decomposition

A Structured Self-attentive Sentence Embedding




논문정리

2018, Multi-task learning for author profiling with Hierarchical Features


내용:

character-level feature representation, 한 word w당, char sequence얻고, 각 char마다 one-hot encoding한 다음에 weight W 곱, 이후 각 char마다 얻어진 representation을 LSTM1 input으로 사용, 이후 각 char마다 얻어진 LSTM hidden state 중 마지막 char에 해당하는 state를 word의 representation으로 보고, 각 word의 representation들을 다시 LSTM2에 넣고 LSTM2의 마지막 word에 해당하는 hidden state를 non-linear layer 하나 통과 시킨 것을 document의 character-level feature로 사용(T-dim)

word-level feature representation, 한 document x당, 여러 filter, 여러 window size로 CNN을 돌려 여러 features를 얻은 다음 max-over-time pooling사용하여 얻은 것을 fully connected non-linear layer 통과시킨 것을 document의 word-level feature로 사용(T-dim)

topic-level feature representation, 구축한 LDA를 바탕으로, 한 document의 topic distribution을 non-linear layer 통과시킨 것은 document의 topic-level feature로 사용(T-dim)

이후 3개의 representations을 pointwise multiplication한 결과를 softmax에 넣어 classification(남자/여자, 나이, job), multi-task

학습은 cross-entropy 함수를 각 task마다 L_age, L_gender, L_job 설정한 뒤, L=L_age + L_gender + L_job한 L을 minimize하게 learning


의의:

topic level representation없이 했을 때가 성능이 가장 떨어짐, 따라서 topic level feature의 영향력이 크다

multimodal, early fusion을 사용한 것이고, pointwise multiplication이용


2015, A Review and Meta-Analysis of Multimodal Affect Detection Systems

핵심:

MM과 UM의 90가지 결과들을 비교해서, 언제 MM쓰는게 좋은지 안좋은지 분석


Research Questions:

2015년 당시 MM의 trends?(training data로 뭘 쓰는지, fusion은 어케하는지, 등)

MM을 써서 나타난 효과가 무엇인지?

시스템레벨로봤을 때, MM의 구체적형태를 보고 accuracies를 predict할 순 없는지


결론:

MM쓰면 modest하게 improvement가 보통 있더라

왜 modest정도밖에 안되냐?

multimodal data를 활용을 덜해서? 

multimodal model이 덜 complicated해서?

애초에 애매하게정의된 emotion이라는 것에 대한 연구가 부족해서?


recommendations for future work

1. 높은 정확도의 nonauthentic context, person dependent 보다는 naturalistic context의 낮은 정확도가 훨씬 값어치가 있다.

2. 아무리 좋은 결과라도 비교가 없으면 덜 중요해진다.

3. 혼동 및 좌절 같은 감정에 대한 탐색해보기

4. model-fusion with time-varying relationships among different modalities

5. crowd-sourcing 혹은 적은 annotated data만으로도 가능한 semisupervised learning 이용


2018, Multimodal Machine Learning:A Survey and Taxonomy


2018, Efficient Large-Scale Multi-Modal Classification


2017, Deep Multimodal Learning, A survey on recent advanced and trends


2018, Deep Imbalanced Learning for Face Recognition and Attribute Prediction


2018, Recent Trends in Deep Learning Based Natural Language Processing


2017, A Structured Self-attentive Sentence Embedding


2017, Distance measures in author profiling


2018, Emphasizing personal information for Author Profiling_ New approaches for term selection and weighting


2009, LDA를 이용한 대용량 블로그 문서 처리


총 데이터 개수 1000

A인 경우 20

B인 경우 980

따라서 Event Rate(A) = 2%


이럴 때 쓸 수 있는 방법이 무엇이 있을까?


1. Data level에서


Random Under-Sampling

:B를 다 쓰는게 아니라, 비복원으로 몇개만 뽑아쓰기(ex:10%), 

A인 경우 20

B인 경우 98

Event Rate(A) = 20/118 = 17%

장점:데이터를 적게 사용하므로 run time과 storage prob을 improve

단점:

정보 손실

10%만 뽑은 98개가 980개를 대표하지 않은 biased sample이 될 수도 있다.


Random Over-Sampling

:A를 다 복사해서 쓰기(ex 20배)

A인 경우 400

B인 경우 980

Event Rate(A) = 400/1380 = 28.9%

장점:

정보 손실이 없다

Random Under-Sampling보다 성능이 좋을 때가 많다

단점:overfitting이 일어날 확률이 높아짐


Cluster-Based Over Sampling

:A를 KNN, B를 KNN 각각 clustering한 다음에 each cluster of A의 개수가 다 같게 oversampled, each cluster of B의 개수가 다같게, A의 size와 B의 size가 같게 oversampled한다.

장점:each cluster의 크기가 다를 때 좋음

단점:overfitting이 일어날 확률이 높아짐


Informed Over Sampling:Synthetic Minority Over-sampling technique(SMOTE)

:A에서 몇개를 뽑아 사용하되, 걔를 완전히 복사하기보다 Synthetic Instance(합성 유사 사례)를 만들어 사용한다.

장점:

Random Over-sampling할 때 생기는 overfitting 문제를 완화시킨다.

정보 손실이 적음

단점:

Synthetic Instance를 만들 때 다른 class와 overlapping할 것을 고려하지않고 진행될 때가 생겨서 overlapping가능성이 더 늘어난다.

데이터가 high dimensional인 경우 효과적이지 못하다


Modified Synthetic Minority Over-Sampling Technique(MSMOTE)

:A에서 몇개를 뽑아 Safe samples/Border samples/Noise samples로 분류한다. (Safe는 classifier의 성능을 높혀줄, Noise는 classifier의 성능을 낮게만드는, Border는 Safe와 Noise에 넣기 애매한 놈들), 이후 synthetic Instance를 만든 다음에 Safe sample은 kNN중 택해 사용하고, Border Sample은 가장 가까운 것만 synthetic으로, Noise sample의 경우에선 뽑지 않는 방법을 이용한다.


2. Algorithmic Ensemble Techniques

Bagging Based

:전체 데이터에서 복원추출로 Sample을 N개 만들고, 각 Sample마다 Classifier를 만들어서, Classifier를 10개 사용한 Classifier를 만드는 것이다.

장점:

Stability와 accuracy 상승

variance를 낮춤

overfitting 가능성 낮춤

misclassification rate를 낮춤

noisy data인 경우 boosting보다 성능 좋음

단점:각각의 classifier들이 성능이 어느정도 괜찮아야만 효과가 있음










'MachineLearning > 기본' 카테고리의 다른 글

Speech Recognition  (0) 2018.03.28
신호분석 정리  (0) 2018.03.22
[First Edition]머신러닝 기본  (0) 2016.05.11

1. [내 집 짓기] 내 손으로 내 집 짓기 꿈 실현 …황토·볏짚·소금집…자연에 한발 더

http://news.mk.co.kr/newsRead.php?year=2012&no=351879


2. 전국흙집짓기운동본부

http://ecovillage.or.kr/index.php?mm_code=166&sm_code=180


3. [동영상] 목조주택 시공과정 기초공사부터 완공까지

http://www.archros.net/woodenhouse_building_process/


4. 와타나베의 건물탐방

https://www.youtube.com/watch?v=uezuzEQYj7w&list=PLwmX4V11kWD5hajwQX79VdTMvVqH--rrM


5. 윤세상의 집짓는 이야기

https://m.blog.naver.com/PostList.nhn?blogId=dabinyss




시공사도 건축가도 안 알려주는 건축주만이 알려줄 수 있는 집짓기 진실


와타나베의 건물탐방


아파트에서 살았던 기억은 꿈에 안 나오지만, 단독주택에서 살았던 기억은 꿈에 나온다고 한다.


32평형 아파트의 실사용 면적은 25평 정도인 데 반해, 단독 주택은 분양면적이 실사용면적과 동일했다.


건축주가 가장 빠지기 쉬운 오류는 시공에 대한 지식이 해박해야 시공자에게 당하지 않는다고 생각하는 것이다. ... 건축주가 시공상의 잘못된 점을 하나하나 찾고 따지는 데 에너지를 쓰는 것보다 스위치나 조명의 위치, 타일 등 내가 지금 선택해야할 것에 집중하는 것이 좋은 집을 만드는 지름길이다.


건축주로서 어떠한 책을 먼저 읽는 것이 좋을까? 가장 먼저 읽어야할 책은 '집에 대한 철학을 담은 책'이다. 그 이유는 살고 싶은 집이 어떠한 집인지에 관한 확고한 생각이 있어야 성공한 건축주가 될 수 있기 때문이다. 


공간만으로도 인간의 감정에 직접적인 영향을 미친다. ... 살던 집에서 생각의 틀이 만들어진다고 했다. ... 천장이 30cm 높아지면 창의적 문제 해결 능력이 2배 높아진다고 한다. ... 이렇게 천장의 높낮이와 빛이 들어오는 양에 따라 완전히 다른 분위기와 감정을 느낄 수 있다. 


같은 건축가에게 설계를 맡겼더라도 건축주에 따라 집의 퀄리티가 매우 달라질 수 있다. ... 사람, 특히 자신과 가족에게 이로운 공간인지를 판단할 수 있는 능력을 말한다. ... 명작 주택들은 사진으로 봤던 것과 실제로 가서 느껴지는 것들이 완전히 달랐다.


건축 작품 감상법

1. 건축 작품이 앉혀진 대지를 둘러본다. 해가 떠있는 위치, 대지의 크기, 어떠한 방향으로 어떻게 앉혀 있는지를 파악한다.

2. 건축물의 외관을 한바퀴 돌며 감상한다. 외장재는 어떤 재료인지, 색은 어떠한지를 보고 그 색이 나의 취향에 맞는지를 본다.

3. 현관부터 주방과 거실과 각 방의 동선과 거리, 관계성을 직접 걸어 다녀보고 발걸음을 재어본다. 실제로 산다고 생각해보고 시뮬레이션을 해본다. 예를 들면 아침에 일어나 씻고 주방과 식당에 가 밥을 먹고 밖으로 나가는 동선, 빨래를 해 널고 개서 옷장에 집어넣는 동선 등을 공간별로 돌아다니면서 직접 경험하는 것이다.

4. 층고와 폭 등의 치수는 어느 정도가 좋은 지를 본다. 

5. 내부 각 공간에서 창으로 보이는 풍경, 시간대별로 들어오는 빛을 체감해 본다. ... 아침, 오후, 노을이 질 무렵 등 세 가지 시간대를 모두 볼 수 있으면 가장 좋다.

6. 인테리어 자재의 색과 마감 방식, 가구 및 액세서리의 형태와 종류를 본다. 바닥재, 벽의 색상, 타일의 종류, 가구, 조명, 손잡이, 수전, 스위치 등 내부 마감의 디테일을 관찰해 보는 것이 필요하다. 

이렇게 하면 건축가에게 무엇을 요청해야 할지 알 수 있고 건축가가 이야기하고 제시하는 공간을 이해하는 데 큰 도움이 된다. ... '로망'인 공간은 굳이 넣어봤자 그만큼 자주 사용하기 어렵다. 지하를 파서 영화관을 만들면 평생 영화관에서 신작 영화를 볼 수 있을 만큼 이상의 돈이 들어간다. 수영장 또한 개인이 관리하기 여간 까다롭지 않아 인근 풀빌라나 워터파크에 가는 것이 훨씬 나을 수 있다.















'기타 > 기타' 카테고리의 다른 글

논문작성법및연구윤리, 노상도  (0) 2016.10.23
현대대수학2 조교  (0) 2016.10.19
프랑스 대입시험 바칼로레아 기출문제  (0) 2014.02.07

2018.03.29

Question:

자연수 n을 입력받아, n의 각 자릿수의 합을 출력하게 하세요. Ex) n=123이면 출력값은 1+2+3=6


import java.util.*;


public class Solution {

    public static int solution(int n) {

        int answer = 0;

        int tmp;

        int c = (int) Math.log10(n);

        for (int j = 1 ; j<=c+1 ; j++) {

            tmp = n%10;

            answer += tmp;

            n = n/10;

        }

        return answer;

    }

    public static void main(String args[]) {

    System.out.println("n의 각자릿수의 합은 : " + Solution.solution(123));

    }

}


혹은


import java.util.*;


public class Solution {

    public static int solution(int n) {

        if (n == 0) {

         return 0;

        }

        else {

     return n%10 + solution((n - n%10)/10);

     }

    }


    public static void main(String args[]) {

     System.out.println("n의 각자릿수의 합은 : " + Solution.solution(123));

    }

}



알 수 있었던 점:

1. 메소드를 static으로 선언하면 객체생성없이 사용할 수 있다.

2. (int) double하면 double의 정수부분만 남게 된다.(-2.3은 -2로, 2.3은 2로)

3. main함수는 반드시 static void가 붙는다. static은 JVM에서 main함수를 찾기 위함이고, void는 프로그램 끝으론 그 출력값을 사용하지 않으므로

4. tmp는 사실상 필요없고 answer += n%10;해도 됐었다.

5. 자연수의 자릿수를 알아내는 데에 로그(log)를 사용하지 않고도 가능한 방법으로는

String[] arr = Integer.toString(n).split(""); // 즉 n을 str으로 만들었다가 그것을 split해서 str 배열로 만들어서 arr의 length를 세기

String nStr = String.valueOf(n); // n을 str으로 만들어서 str의 length를 세기, 이후 Integer.parseInt사용해서 str을 int로

6. main함수의 위치는 가독성을 위해 제일 하단에 둔다. 클래스 내에 어디다 두든 상관은 없음

7. 모든 반복문은 순환문(recursion)으로 바꿀 수 있다. 순환문으로도 써보았다.


2018.03.30

Question:

길이가 n인 배열에 1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는지를 확인하려고 합니다.

1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는 경우 true를, 아닌 경우 false를 반환하도록 함수 solution을 완성해주세요.


import java.util.*;


public class Solution {

   public static boolean solution(int[] arr) {

      boolean answer = true;

      Arrays.sort(arr);

      answer = Solution.src(arr, arr.length);

      return answer;

   }

   

   public static boolean src(int[] arr, int i) {

      if(i==0) {

         return true;

      }

      else {

         if(Arrays.binarySearch(arr, i) < 0) {

            return false;

         }

         else

            i -= 1;

            return true&Solution.src(arr, i);

      }

   }

   public static void main(String args[]) {

      int[] a= {1,2,4,5};

      System.out.println(Solution.solution(a));

   }

}


혹은


import java.util.*;


class Solution {

    public boolean solution(int[] arr) {

        boolean answer = true;

        Arrays.sort(arr);

        if (arr[0]==1 && arr[arr.length-1]==arr.length)

            answer=true;

        else

            answer=false;

        return answer;

    }

}


혹은

(sort를 쓰지않고)


import java.util.*;


class Solution {

    public boolean solution(int[] arr) {      

        int k = arr.length;

        int[] temp_arr = new int[k+1];

        for(int i = 0 ; i<arr.length ; i++) { 

            if(arr[i]>arr.length) {

               return false;

            }

            else {

                temp_arr[arr[i]]++;

            }

        }

        for(int j =1 ; j<=arr.length ; j++) {

            if (temp_arr[j] != 1)

                return false;

        }

        return true;

    }

}


알 수 있었던 점:

1. 만약 필요조건인, int[] arr의 각 정수의 모든 합 == (arr.length*(arr.length+1))/2 를 넣어서할 수도 있지만, 그렇게 효율성이 늘어나는건 아닌듯 하다.

2. Arrays.binarSearch(arr, int k), k가 arr에 없을 때 음수가 나오며 어떤 음수가 나오는 지도 알 수 있었다. 

예를 들면 {1,2,3,4}와 k=6이라면, k가 1보다 왼쪽인 수면 -1, 1과 2사이 수면 -2, 2와 3사이 수면 -3, 3과 4사이수면 -4, 4초과이면 -5

3. 첫번째 방법은 sort에 binarySearch까지 반복으로 쓰니까, 효율성이 굉장히 떨어져서 통과하지 못했다.

4. 재귀함수를 쓰게되면, 함수호출이 잦아지고, 그럼 효율성이 떨어진다고한다. 아직까진 구체적인 그 의미를 모르겠다. 함수호출시 컴퓨터의 자원이 어떻게 쓰이는 지를 모르기 때문이다.

5. 마지막으로 가장 최적화시킨 방법, index를 활용하는 방법이다. 배열의 index에 자연수를 포함하므로, for문을 2번 써서 가능했다.

6. 기본적으로 Arrays.sort(arr)는 input array의 size에 따라 size가 적을 땐 Insertion Sort, 클 땐 Merge Sort를 사용한다. 각각의 방법을 공부해야할 필요가 있다.

 

2018.03.31

Question:

(1) 임의의 자연수n에 대해 n을 소인수분해하는 알고리즘을 조사하여라.

(2) 완전수 구하기. 자연수 n을 input으로 넣고, 그것보다 같거나 작은 자연수 중에서 완전수들을 output으로

https://www.alpertron.com.ar/ECM.HTM // elliptic curve method와 self-initializing quadratic sieve를 써서 계산해주는 웹사이트


speaker independent:training이 필요없는 음성인식

speaker dependent:training을 필요로하고 그럼 정확도가 더 올라가는 음성인식

 

DTW(Dynamic Time Warping)

LPC(Linear Predictive Coding)

Cepstrum

HMM(Hidden Markov Model)

n-gram language model

back-off model(multiple length n-gram model)

maximum likelihood estimation

generative model:(input,output)의 joint distribution을 모델링하고 goal로 삼는 방법

discriminative mode:(output|input)의 conditional distribution을 모델링하고 goal로 삼는 방법

feedforward ANN

RNN

LSTM(Long short-term memory)

vanishing gradient problem이 없으며

discrete time steps의 수천번 이전의 내용을 기억하는 효과가 있어서 speech recognition에 유용

acoustic model:audio signal과 phonemes(음소)사이의 관계를 밝히는 모델링

language model:words의 sequence에 해당하는 distribution model

In the long history of speech recognition, both shallow form and deep form (e.g. recurrent nets) of artificial neural networks had been explored for many years during 1980s, 1990s and a few years into the 2000s.[47][48][49] But these methods never won over the non-uniform internal-handcrafting Gaussian mixture model/Hidden Markov model (GMM-HMM) technology based on generative models of speech trained discriminatively.

GMM(Gaussian mixture model)

TDNN(Time Delay Neural Networks)

Autoencoder

RNN-CTC model

LAS(Listen, Attend and Spell, Attention-based ASR model)

LSD(Latent Sequence Decomposition)

WLAS(Watch, Listen, Attend and Spell)

MD-LSTEM(2D-LSTM, Multidimensional LSTM)

 

'MachineLearning > 기본' 카테고리의 다른 글

How to handle imbalanced classification problems  (0) 2018.05.23
신호분석 정리  (0) 2018.03.22
[First Edition]머신러닝 기본  (0) 2016.05.11

일단 머신런이에 싹다 넣고 다 이해되면 정리



'MachineLearning > 기본' 카테고리의 다른 글

How to handle imbalanced classification problems  (0) 2018.05.23
Speech Recognition  (0) 2018.03.28
[First Edition]머신러닝 기본  (0) 2016.05.11

시간 복잡도(time complexity)

실행 시간은 실행환경에 따라 달라진다.(하드웨어, 운영체제, 언어, 컴파일러 등)

따라서 실행 시간을 측정하는 대신 연산의 실행 횟수를 카운트

연산의 실행 횟수는 입력 데이터의 크기에 관한 함수로 표현

데이터의 크기가 같더라도 실제 데이터에 따라서 달라짐

최악의 경우의 시간 복잡도 (worse-case analysis)

평균 시간 복잡도 (average-case analysis)


점근적 분석(Asymptotic analysis)

데이터의 개수 n->inf일 때 수행시간이 증가하는 growth rate로 시간 복잡도를 표현하는 기법

유일한 분석법도 아니고 가장 좋은 분석법도 아니지만, 상대적으로 간단하고 알고리즘의 실행환경에 비의존적이어서 많이 사용됨

가장 자주 실행되는 연산 혹은 문장의 실행횟수를 고려하는 것으로 충분하다.

Ο 표기법은 upper bound를 표현

Ω 표기법은 lower bound를 표현

Θ 표기법은 upper and lower bound를 표현


이진 검색(Binary Search)와 정렬(Sort)

이진 검색

오름차순으로 미리 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 

중앙값을 선택하여 target과 맞는지 비교후

맞으면 끝

중앙값>target이면 중앙값을 새로운 최댓값으로 택한다.

중앙값<target이면 중앙값을 새로운 최솟값으로 택한다.

정렬된 리스트에만 사용할 수 있다는 단점이 있지만 검색이 반복될 때마다 목표값을 찾을 확률은 두 배가 되므로 속도가 빠르다 Ο(log_2 (n))

순차 검색과 비교하면 순차 검색은 Ο(n)으로 이진 검색이 훨씬 빠르다.


정렬

버블 정렬 혹은 거품 정렬(bubble sort)

가장 왼쪽(l)과 인접한 오른쪽(r)과 비교후 l>r이면 l<->r

이후 2번째 원소와 3번째 원소를 비교후 같은 방법

한차례 지나고나서 다시 또 한다. (다만 첫포문을 마치고나면 가장 오른쪽엔 가장 큰것이 이미 와있으므로 두번째 포문부터는 n-1까지만 하면된다.)

원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다.

시간 복잡도가 최선/평균/최악=Ο(n)/Ο(n^2)/Ο(n^2)

삽입 정렬(Insertion sort)

index 1의 데이터를 0과 비교해 제자리에 둔다

index 2의 데이터를 0과 1과 비교해 제자리에 둔다.

...

index k의 데이터를 0~k-1까지의 데이터와 비교해 제자리(맞는 자리에) 둔다.

시간 복잡도가 최선/평균/최악=Ο(n)/Ο(n^2)/Ο(n^2)이다.

기타 정렬

퀵소트(quicksort)

합병(merger sort)

힙(heap sort)

등이 있다.

*code review부터 다시보고 정리











순환(Recursion)

순환(재귀함수)이란, 자기 자신을 호출하는 함수(메소드)를 가리킨다.

순환이 무한루프에 빠지지 않기 위한 조건이 있다.

적어도 하나의 recursion에 빠지지 않는 경우가 존재해야 한다. 이것을 base case라 한다. 

recursion을 반복하다보면 결국 base case로 수렴하게 recursive case를 둬야 한다.

가능하면 암시적(implict) 매개변수를 명시적(explicit)매개변수로 표현하라.

예제)(Hello를 n번 출력하는 형태)

public class Code02 { 

public static void main(String [] args) {

int n = 4;

func(n);

}


public static void func(int k) {

if (k<=0)  // base case

return;

else {

System.out.println("Hello");

func(k-1);  //recursive case

}

}

}

예제)(n까지의 합을 출력하는 형태)

public class Code03 {

public static void main(String [] args) {

int result = func(4);

}


public static int func(int n) {

if (n==0)

return 0;

else

return n + func(n-1);

}

}

예제)(실수 x의 n승 구하기)

public static double power(double x, int n) {

if (n==0)

return 1;

else

return x*power(x, n-1);

}

예제(피보나치 수열 구하기)

public int fibonacci(int) {

if (n<2)

return n; // f_0 =0, f_1 =1인 피보나치의 경우

else 

return fibonacci(n-1) + fibonacci(n-2);

}

예제(Euclid algorithm을 이용한 최대공약수 구하는 예제)

public static double gcd(int m, int n) {

if (m<n) {

int tmp = m;

m = n;

n = tmp; // swap m and n(즉 항상 first argument가 더 크거나 같게)

}

if (m%n == 0)

return n;

else 

return gcd(n, m%n);

}

예제(Euclid algorithm을 이용한 최대공약수 구하는 더 간단한 예제)

public static int gcd(int p, int q) {

if ( q==0 )

return p;

else

return gcd(q, p%q);

}

수학함수뿐 아니라 다른 많은 문제들을 순환을 이용하여 해결할 수 있다. 특히 for문, while문을 대신할 수 있다.

순환<->반복문(즉 모든 반복문도 순환으로 만들 수 있다.)

순환함수는 복잡한 알고리즘을 단순하고 알기쉽게 표현하는 것을 가능하게 한다.

하지만 함수 호출에 따른 오버해드가 있다.(매개변수 전달, 액티베이션 프레임 생성 등), 즉 순환은 프로그래밍 실행 속도에 단점이 있긴 있다.

예제(문자열의 길이 계산)

public static int length(String str) {

if (str.equals(""))

return 0;

else

return 1 + length(str.substring(1));  // str.substring(1)이란 str의 첫번째 문자를 제거한 substring을 가리킨다.

}

예제(문자열의 출력)

public static void printChars(String str) {

if (str.length() == 0)

return;

else {

System.out.print(str.charAt(0)); // str.charAt(0)란, str의 첫 문자를 리턴하는 메소드이다.

printChars(str.substring(1));

}

}

예제(문자열을 순서를 뒤집어 프린트)

public static void printCharsReverse(String str) {

if (str.length() == 0)

return;

else {

printCharsReverse(str.substring(1));

System.out.print(str.charAt(0));

}

}

(문자열의 출력 예제와 달라진 것은 else내에 출력과 호출의 순서만 바꼈을 뿐이다.)

예제(자연수를 2진수로 변환하여 출력)

public void printInBinary(int n) {

if (n<2)

System.out.print(n);

else {

printInBinary(n/2);

System.out.print(n%2);

}

}

예제(정수 배열(Array)의 합 구하기, data[0]에서 data[n-1]까지의 합)

public static int sum(int n, int [] data) {

if (n<=0)

return 0;

else

return sum(n-1, data) + data[n-1];

}

}

암시적(implicit)매개변수를 명시적(explicit)매개변수로 바꾸어라.

예제(순차 탐색, sequential search)

int search(int [] data, int n, int target) {

for (int i=0; i<n ; i++)

if (data[i]==target)

return i;

return -1;

}

(여기서 n은 명시적인데, search의 시작 인덱스인 0은 암시적 매개변수이다. 하지만 순환을 사용시 시작인덱스도 명시적으로 하자.)

예제(순차 탐색, 매개변수의 명시화)

int search(int [] data, int begin, int end, int target) {

if (begin > end)

return -1;

else if (target==data[begin])

return begin;

else

return search(data, begin+1, end, target);

}

(이렇게 시작 index를 begin으로 명시화하자. search(data, begin, end, target)으로하면 begin index부터 end index까지 target이 있는지 확인)

예제(최대값 찾기)

int findMax(int [] data, int begin, int end) {

if (begin==end)

return data[begin];

else

return Math.max(data[begin], findMaxt(data, begin+1, end));

}

예제(이진 검색, binary search)

public static int binarySearch(String[] items, String target, int begin, int end) {

if (begin>end)

return -1;

else {

int middle = (begin+end)/2;

int compResult = target.compareTo(items[middle]); // string 비교시 자바에서는 compareTo를 사용한다. target이 items[middle]보다 크면 양수, 작으면 음수, 같으면 0을 return한다. //

if (compResult == 0)

return middle;

else if (compResult < 0)

return binarySearch(items, target, begin, middle-1);

else

return binarySearch(items, target, middle+1, end);

}

}

예제(미로찾기)

Recursive한 생각

현재 위치에서 출구까지 가는 경로가 있으려면

1) 현재 위치가 출구이거나 혹은

2) 이웃한 셀들 중 하나에서 현재 위치를 지나지 않고 출구까지 가는 경로가 있거나

예제(미로찾기의 슈도코드1)

boolean findpath(x,y)

if (x,y) is the exit

return true;

else

mark (x,y) as a visited cell; //visited cell개념을 넣지 않으면 무한 루프에 빠질 수 있다.

for each neighbouring cell (x',y') of (x,y) do

if (x',y') is on the pathway and not visited

if findpath(x',y')

return true;

return false;

예제(미로찾기의 슈도코드2)

boolean findpath(x,y)

if (x,y) is either on the wall or a visited cell

return false;

else if (x,y) is the exit

return true;

else

mark (x,y) as a visited cell;

for each neighbouring cell (x',y') of (x,y) do

if findpath(x',y')

return true;

return false;

예제(미로찾기의 실제 자바 코드)

public class Maze {

private static int N=8;

private static int [][] maze = {

{0, 0, 0, 0, 0, 0, 0, 1},

{0, 1, 1, 0, 1, 1, 0, 1},

{0, 0, 0, 1, 0, 0, 0, 1},

{0, 1, 0, 0, 1, 1, 0, 0},

{0, 1, 1, 1, 0, 0, 1, 1},

{0, 1, 0, 0, 0, 1, 0, 1},

{0, 0, 0, 1, 0, 0, 0, 1},

{0, 1, 1, 1, 0, 1, 0, 0},

};


private static final int PATHWAY_COLOUR = 0; // white

private static final int WALL_COLOUR = 1; // blue

private static final int BLOCKED_COLOUR = 2; // red

private static final int PATH_COLOUR = 3; // green


public static boolean findMazePath(int x, int y) {

if (x<0 || y<0 || x>=N || y>=N)

return false;

else if (maze[x][y] != PATHWAY_COLOUR)

return false;

else if (x==N-1 && y==N-1) {

maze[x][y] = PATH_COLOUR;

return true;

}

else {

maze[x][y] = PATH_COLOUR ;

if (findMazePath(x-1,y) || findMazePath(x,y+1) || findMazePath(x+1,y) || findMazePath(x,y-1)) {

return true;

}

maze[x][y] = BLOCKED_COLOUR; // dead end

return false;

}

}


public static void main(String [] args) {

printMaze();

findMazePath(0,0);

printMaze();

}

}

예제(Counting cells in a Blob)

상황:

입력으로 binary image를 받는다. 그리고 하나의 좌표(x,y)도 받는다.

각 픽셀은 background pixel이거나 혹은 image pixel

서로 연결된 image pixel들의 집합을 blob이라고 부름

상하좌우 및 대각방향으로도 연결된 것으로 간주

(x,y)가 image pixel로서 택해졌다면, 그 pixel이 속한 blob의 총 image pixel의 개수를 return하는 문제이다.

(x,y)가 background pixel이면 0을 return

슈도코드:

if (x,y)가 이미지 밖이면 

결과는 0

else if (x,y)가 image pixel이 아니거나 already counted면

결과는 0

else

(x,y)를 다른 색(예를 들면 빨강)으로 색칠하라; // 이미 카운트 됐음을 표시

1+(인접한 영역의 count값);

실제 코드

private static int BACKGROUND_COLOR = 0;

private static int IMAGE_COLOR = 1;

private static int ALREADY_COUNTED = 2;


public int countCells(int x, int y) {

if (x<0 || x>=N || y<0 || y>=N)

return 0;

else if (grid[x][y] != IMAGE_COLOR)

return 0;

else {

grid[x][y] = ALREADY_COUNTED;

return 1 + countCells(x-1, y+1) + countCells(x, y+1)

+ countCells(x+1, y+1) + countCells(x-1, y) 

+ countCells(x+1, y) + countCells(x-1, y-1)

+ countCells(x, y-1) + countCells(x+1, y-1)

}

}

예제(N-queens problems)

상황:

NxN 체스판에 N개의 말을 놓는다. 

이때 각 말은 같은 행, 같은 열, 같은 대각선 상에 놓이지 않게 N개의 말을 놓을 수 있는지?에 대한 대답

Backtracking이용

일련의 선택을 하다가 조건에 부합하지 않게 되면, 그 이전의 선택으로 거슬러 올라가 번복하는 방법

각 행에는 1개의 말만 올 수 있음을 인지하고

0행에서 (0,0)에 말을 놓은 뒤

1행에서 (1,2)에 말을 놓은 뒤..... 쭉 하다가 안된다는 것을 깨달으면 그 이전의 행에서 놓은 말을 이동시킨다.(열을 증가하는 방향으로)

상태공간트리(State Space Tree)이용

뿌리에 Start를 두고

뿌리와 거리가 1인 노드들에는 0행에 놓일 0번 말의 가능한 좌표를 vertex에 표시하여 둔다

뿌리와 거리가 2인 노드들에는 이전 vertex(좌표)에서 1행에 놓일 1번 말의 가능한 좌표를 vertex에 표시하여 둔다.

.... 반복

해가 존재한다면 그것은 반드시 이 트리의 어떤 한 노드sequence에 해당한다. 따라서 이 트리를 체계적으로 탐색하면 해를 구할 수 있음

트리를 탐색하는 기법들

깊이 우선 탐색, (이후에 정확한 정의를 파악), 일단 위의 예제에서 backtracking을 상태공간트리에 적용하면 그게 깊이 우선 탐색

실제코드(recursion과 stack을 사용할 수도 있다. 아래는 recursion을 이용한 코드이다.)

int [] cols = new int [N+1]; // 매개변수 level은 현재 노드의 level(트리의 root에서 떨어진 길이)을 표현, cols[i]=j 는 i번째 말이 (i행,j열)에 놓였음을 의미

boolean queens(int level) { // 매개변수는 내가 현재 트리의 어떤 노드에 있는지를 지정, level을 넣음으로써 정확한 위치는 아니지만 몇행인지는 앎

if (!promising(level))

return false;

else if (level==N) { // level이 N인데 promising(level)이 true가 나왔으니까 끝난것

for (int i=1 ; i<=N ; i++)

System.out.println("(" + i + ", " + cols[i] + ")");

return true;

}

for (int i=1 ; i<=N ; i++) {

cols[level+1] = i;

if (queens(level+1))

return true;

}

return false;

}

boolean promising(int level) {

for (int i=1 ; i<level ; i++) {

if (cols[i]==cols[level]) // level번째 말이 이전의 말들과 같은 열에 있는 경우를 검사

return false;

else if (level - i==Math.abs(cols[level] - cols[i]) // level번째 말이 이전의 말들의 영향받는 대각선에 있는 경우를 검사

return false;

}

return true;

}

(실제 사용시 queens(0)으로 호출하면 된다.)

(이해를 하기위해 queens(0)을 생각해보기)

예제(powerset 출력하기)

상황:

주어진 집합의 모든 부분집합을 출력하는 문제

전략:

만약 {a,b,c,d,e,f}라면 

a를 포함하지 않는 부분집합을 나열한 후,

각각의 부분집합마다 a를 포함시켜 나열하면 된다.

(b를 포함하지 않는){c,d,e,f}의 모든 부분집합들에 a를 추가한 집합들을 나열하고

(b를 포함하는){c,d,e,f}의 모든 부분집합에 {a,b}를 추가한 집합들을 나열

....

즉 recursion을 해나간다.

powerSet이란 함수를 설정하는데에 있어서 argument를 집합1개만 받게 설정하면 recursion과정에서 각각의 부분집합마다 포함시켜 나열하는 경우가 해결이 안된다. 


실제 코드:

private static char data[] = {'a', 'b', 'c', 'd', 'e', 'f'};

private static int n=data.length;

private static boolean [] include = new boolean [n];


public static void powerSet(int k) { // k와 include를 통해 상태공간트리에서 현재 위치를 알려주는 것이다.

if (k==n) { // 상태공간 트리에서 현재위치가 가장 밑인 경우

for (int i=0 ; i<n ; i++)

if (include[i]) System.out.print(data[i] + " "); // P를 출력

System.out.println();

return;

}

include[k]=false; // data[k]를 포함하지 않는 경우

powerSet(k+1);

include[k]=true; // data[k]를 포함하는 경우

powerSet(k+1);

}

(data[k], ..., data[n-1]의 멱집합을 구한 후 각각에 include[i]=true, i=0,...,k-1인 원소를 추가하여 출력하라는 mission)

(처음 이 함수를 호출할 때는 powerSet(0)로 호출한다.)

상태공간트리 활용

해를 찾기 위해 탐색할 필요가 있는 모든 후보들을 포함하는 트리

트리의 모든 노드들을 방문하면 해를 찾을 수 있다.

루트에서 출발하여 체계적으로 모든 노드를 방문하는 절차를 기술한다.

k=0일땐 공집합

k=1일땐 공집합이거나 a만 있거나(k=0일때의 집합에 a를 안넣거나 넣거나)

k=2일땐 k=1에서의 각각의 집합에서 b를 넣거나 안 넣거나를 만듦

k=3일땐 k=2에서의 각각의 집합에서 c를 넣거나 안 넣거나를 만듦


정렬

종류:

Simple하고 slow:Bubble sort, Insertion sort, Selection sort, 

조금 복잡하지만 fast한:Quick sort, Merge sort, Heap sort, 

그 외:Radix sort

기본적인 정렬 algorithm

Selection Sort:

1. 가장 큰 값(M)을 찾는다.

2. 가장 오른쪽 값(R)과 exchange(정렬한다.)

3. 가장 오른쪽 값을 제외하고 1,2를 다시 한다.

시간복잡도 : O(n^2) = 1부터 n-1까지의 합, 최선/평균/최악 모두 정확히 n(n-1)/2이다.

for 루프가 n-1번 반복, 가장 큰 수를 찾기 위한 비교 횟수:n-1, n-2, ..., 2, 1, 그리고 교환은 상수시간

Bubble Sort

1. 첫번째 값과 두번재값과 비교

2. 정렬(교환or유지)한다.

3. 두번째값과 세번째값과 비교

4. 정렬한다.

...반복

결과적으로 가장 큰 값이 가장 오른쪽에 오게 된다.

5. 이후 가장 오른쪽 값을 제외하고 다시 1~4를 한다.

시간복잡도 : O(n^2) = 1부터 n-1까지의 합, 최선/평균/최악 모두 정확히 n(n-1)/2이다.

for 루프가 n-1번 반복, 안쪽 for문이 n-1,n-2,...,1번 반복, 교환은 상수시간 작업

Insertion Sort

1. 첫번째 값에 두번째 값을 끼워 넣는다.

2. 세번째 값을 이전 결과에 끼워 넣는다.

3. 네번째 값을 이전 결과에 끼워 넣는다.

...반복

즉 k-1개가 이미 정렬되어 있고 k번째 item을 끼워넣는 것을 반복하는 것

구체적으로

copy the k번째 item to tmp

k번째 item이랑 k-1번쨰 item이랑 비교, k번째가 k-1번째보다 크면 끝, 작으면 k-1번째 아이템을 오른쪽으로 덮어쓰기(shift), 

그리고 k번째 item이랑 k-2번째 item비교,... 이것을 반복

(만약 k번째 item을 k-1, k-2, k-3,...순으로비교할게 아니라, 1,2,3,...으로 비교한다면 대칭이므로 차이가 없어보이지만, 주어진게 배열이라면, 오른쪽에서부터 비교하는, 즉 k-1,k-2,k-3,...순으로 비교하는게 효율적이다. 왜냐하면 대상이 배열이기때문에 결국 k번째 item을 k-1개의 item들 사이에 끼워넣기 위해선, k번째 item보다 큰 녀석들을 결국 오른쪽으로 옮겨야하고, k번째 item보다 큰 값을 가진애들을 한번씩은 접근을 해야하기 때문이다. 즉 1,2,3,...순은 총 k-1개의 데이터를 결국 다 접근해야하는 것이고, k-1,k-2,k-3,... 순은 접근해야할 개수가 k-1개 전체가 되진 않을 수도 있다. 그래서 k-1,k-2,...순으로 비교하는 것이다.)

시간복잡도 : 최악이 O(n^2) = n(n-1)/2, 최선이 O(n) = n-1, 평균도 O(n^2)

for 루프는 n-1번 반복, i번째 item을삽입(Insertion)하는 최악의 경우 i-1번 비교

Merge Sort

Divide and conquer(본질적으론 recursion과 유사)

분할정복법):예전에 로마 제국이 주변 나라를 정복할 때, 전체를 통채로 정복하기 보다는 작은 것으로 분할하여 정복한 것과 유사함

분할:해결하고자 하는 문제를 작은 크기의 "동일한" 문제들로 분할(recursion할 때와 비슷)

정복:각각의 작은 문제를 순환적으로 해결

합병:작은 문제의 해를 합하여(merge) 원래 문제에 대한 해를 구함

     Merge sort    

데이터가 저장된 배열을 절반으로 나눔

각각을 순환적으로 정렬

정렬된 두 개의 배열을 합쳐 전체를 정렬<<<이게 가장 중요, 관건

9개 데이터있는 1개의 배열이 있다면, 절반으로 나누는 과정을 몇번하면 정렬된 9개의 배열을 갖게 된다.

그리고 다시 2개씩 합쳐주며 merge하는 것이다.

Merge를 하는 방법(a1<a2<a3, b1<b2<b3인 경우)

추가 배열을 만든다.

a1과 b1 중 작은 것을 추가배열의 왼쪽에 둔다.(a1<b1이라하자)

a2과 b1 중 작은 것을 추가배열의 왼쪽에 둔다(a2<b1이라하자)

a3와 b1 중 작은 것을 추가배열의 왼쪽에 둔다(b1<a3이라하자)

...이하 반복

(a배열의 index i, b배열의 index j, 추가배열의 index k중 k는 항상 +1, i는 a가 작을때 +1, j는 b가 작을 때 +1)

(sub배열중 1개가 완료되면 나머지 sub배열을 그대로 가져오면된다.)

알고리즘:

mergeSort(A[], p, r) { // 배열 A[]을 index p에서 index r까지 배열

if (p<r) then {

q = (p+q)/2 ; // p, q의 중간 선택

mergeSort(A, p, q); // 전반부 정렬

mergeSort(A, q+1, r); // 후반부 정렬

merge(A, p, q, r); // 합병

}

}


merge(A[], p, q, r) {

정렬되어 있는 두 배열 A[p,...q]와 A[q+1,...,r]을 합하여 정렬된 하나의 배열 A[p,...,r]을 만든다.

}

(merge부분을 실제 자바 코드로 써보면)

void merge(int data[], int p, int q, int r) {

int i = p; // 앞 배열 index

int j = q+1; // 뒤 배열 index

int k =p; // 도움배열의 index

int tmp[data.length()]; // 도움을 줄 추가배열을 만듦

while(i<=q && j<=r) {

if (data[i] <= data[j]) {

tmp[k++] = data[i++];

}

else {

tmp[k++]=data[j++]; // k는 항상 증가, i,j는 비교해서 작을때만 증가

}

}

while ( i <= q)

tmp[k++]=data[i++]; // 남은 것들 추가로 가져오는 과정

while (j <= r)

tmp[k++]=data[j++]; // 이 2개의 while문 중 1개만 사실 실행됨

for (int i = p ; i<=r ; i++)

data[i] =tmp[i] // 원래 데이터에 도움배열 정보를 넣는 과정

}

Merge Sort의 유일한 단점:추가배열을 잡아둬야한다는 것

시간복잡도:

T(n)

=0 (n=1일때)

=T(ceil(n/2)) + T(floor(n/2)) + n (n>=2) // n은 merge하는데 비교연산의 최대횟수가 n, 사실 ceil, floor는 필요없음, n->inf일때 고려하므로

=O(n*logn))

Quick Sort

마찬가지로 Divide and Conquer

다만, divide가 다름

pivot 선택하기

어떤 값을 pivot을 선택할 지는 나중에 배우기

현재 강의 내용에선 배열의 가장 오른쪽 값을 pivot으로 선택

알고리즘 개요

1. "pivot보다 작은 것, pivot, pivot보다 큰 것"으로 분할(분할하면서 좌, 우가 정렬하지는 않음)

2. pivot 기준으로 나뉘어진 좌, 우의 부분들에 다시 recursion으로 분할

3. "합병"단계가 필요가 없다.

알고리즘

quicksort(A[], p, r) { // A[p,...,r]을 정렬한다.

if (p<r) then {

q=partition(A, p, r);

quicksort(A, p, q-1);

quicksort(A, q+1, r);

}

}

partition(A[], p. r) {

x = A[r]; // pivot넣기

i = p-1 // 작은 애들 index

j = p // 큰 애들 index

for j to r-1 {

if A[j]<=x {

i++;

exchange A[i] and A[j];

}

}

exchange A[i+1] and A[r]

return i+1;

(배열 A[p,...,r]의 원소들을 A[r]을 기준으로 양쪽으로 재배치하고 A[r]이 자리한 위치를 return한다.)

(작/큰/x로 만든 다음, 큰애들 중 가장 왼쪽인 애를 x와 exchange할 것이다.)

(작은 애들 중 마지막 값 index i, 검사하려는 값 index j, A[j]와 pivot과 비교하여 A[j]가 x보다 같거나 크면 그냥 j++(다음꺼 검사), A[j]가 x보다 작으면 A[j]와 A[i+1]과 exchange하고 i++ 그리고 j++(다음꺼 검사))

(제일 마지막에 i+1과 pivot의 exchange, 그리고 i+1을 return)

}

복잡도

partition 한번 하는데 걸리는 시간은 O(n) // 정확히는 n-1번의 비교연산

T(n)

최악의 경우는 아이러니하게, pivot이 가장 큰 값일 때, 즉 이미 정렬된 배열인 경우이다. (pivot을 항상 가장 오른쪽 값을 갖는 상황이라 한다면)

T(n) 

= T(0) + T(n-1) + Θ(n-1) = T(n-1) + Θ(n-1)

= T(n-2) + Θ(n-1) + Θ(n-2)

...

=Θ(1) + Θ(2) + ... + Θ(n-1) 

= Θ(n^2)

항상 절반으로 분할되는 경우(최선의 경우)

T(n)

=2*T(n/2) + Θ(n-1)

...

=Θ(n*logn)

항상 한쪽이 적어도 1/9이상이 되도록 분할된다면(편의상 항상 1:9일때를 고려)

T(n)

= T(n/10) + T(9n/10) + Θ(n-1) 

...

= k * Θ(n) = Θ(n*logn)

(이때 (9/10)^k * n = 1, k=log_(10/9) n )

(따라서 분할이 아주 극단적으로 일어나지 않는다면, Quick Sort는 빠르다.)

평균 시간 복잡도

A(n) = sum over all input I of size n P(I)*T(I), where P(I):I가 일어날 확률, T(I):I의 시간복잡도

P(I)를 구하기가 힘드므로 가정을 한다. P(I)=1/n!이라 가정(즉, 서로 다른 값을 갖는 배열만 고려)

A(n) 

= 2/n * sum from i=0 to i=n-1 {A(i) + Θ(n)} // pivot의 rank가 1,2,.i..,n 일 확률이 각각이 모두 1/n, 그때마다 A(i-1) + A(n-i) + Θ(n)

= Θ(n*logn)

pivot 선택하는 기준

첫번째 값이나 마지막 값을 pivot으로 선택

이미 정렬된 데이터 혹은 거꾸로 정렬된 데이터가 최악의 경우

현실의 데이터는 랜덤하지 않으므로 정렬/거꾸로 정렬 된 데이터가 입력으로 들어올 가능성은 매우 높음

따라서 좋은 방법이라고 할 수 없음

"Median of Three"

첫번째 값과 마지막 값, 그리고 가운데 값 중에서 중간값(median)을 pivot으로 선택

최악의 경우 시간 복잡도가 달라지지는 않음, but 현실적인 방법이긴 함

Randomized Quick Sort

pivot을 랜덤하게 선택

no worst case instance(즉 최악의 입력은 없음), but worst case execution(즉 최악의 실행은 가능함)

(다른 방법들은 최악의 입력이 존재하지만, 이 경우는 최악의 입력이 아니라 최악의 주사위(랜덤)에 의해 최악의 실행이 가능)

평균 시간복잡도 Θ(n*logn)












그래프

개체(object)들 간의 이진관계(binary relation)를 표현하는데 사용한다.

vertex의 개수를 n, edge의 개수를 m

undirected graph, directed graph, weighted graph 등이 있다.

별말없으면 simple undirected graph를 다룬다,

그래프의 표현

undirected simple의 경우

인접행렬(Adjacency Matrix)

저장 공간:Ο(n^2)

어떤 v에 인접한 모든 노드 찾기:Ο(n)

어떤 에지 (u,v)가 존재하는지 검사:Ο(1)

Symmetric Matrix가 된다.

인접리스트(Adjacency List)

V집합을 표현하는 하나의 배열과 각 v마다 인접한 정점들의 연결 리스트

노드개수:2m(edge 하나당 2번세니까)

저장 공간:Ο(n+m)

어떤 노트 v에 인접한 모든 노드 찾기:O(d(v)) // d(v)란 degree of v 라 하자

어떤 에지 (u,v)가 존재하는 지 검사:Ο(d(u)) // u에 해당하는 배열에 있는 리스트를 다 읽어봐야 하므로

directed의 경우

인접행렬

비대칭행렬

인접리스트

m개의 노드를 가짐

weighted의 경우

인접행렬

에지의 존재를 나타내는 값으로 1대신 에지의 가중치를 저장

에지가 없을 때 혹은 대각선

특별히 정해진 규칙은 없으며, 그래프와 가중치가 의미하는 바에 따라서

예:가중치가 거리 혹은 비용을 의미하는 경우라면 에지가 없으면 inf, 대각선은 0

예:가중치가 용량을 의미한다면 에지가 없을 때 0, 대각선은 inf

그래프의 순회(traversal)

모든 v를 방문하는 작업

대표적인 방법

BFS(Breadth-First search, 너비우선순회)

L_0 = {v_0} //출발노드 선택

L_1 = L_0의 모든 이웃 노드들

L_2 = L_1의 이웃들 중에서 L_0에 속하지 않는 노드들

...

L_i = L_(i-1)의 이웃들 중에서 L_(i-2)에 속하지 않는 노드들

(순회 그래프에서의 BFS, 6분40초부터 다시보기)

DFS(Depth-First search, 깊이우선순회)











































'제거된 것' 카테고리의 다른 글

TA과목들  (0) 2016.11.17
[한능검중급]근현대사  (0) 2016.10.20
화음인식의 모든 것  (0) 2016.04.15
[수학]Machine Learning:An Algorithmic Perspective, 2nd Edition  (0) 2016.03.20
[삭제예정]150906(일?)텝스대비  (0) 2015.09.02

컴퓨터 구조(Computer Architecture)


컴퓨터 시스템의 기본 구성:하드웨어, 소프트웨어(정보들이 이동하는 방향을 지정, 정보 처리의 종류를 지정, 이러한 동작들이 일어나는 시간을 지정해주는 명령(command)들의 집합으로, 시스템 소프트웨어(OS), 응용 소프트웨어(application software)가 있다.)


컴퓨터의 기본 구조:data read->processing->store


CPU(Central Processing Unit):data processing의 처리 길이에 따라 32bit, 64bit로 나뉨

Memory

-Cache Memory:CPU와 main memory간의 속도차 보정(즉 고속)

-Main Memory:반도체 기억장치 칩들로 구성, 가격 비싸고 면적 많이 차지, 휘발성, 최근에는 비휘발성 고속 액세스 메모리 SCM(Storage Class Memory)가 있음)

-Auxiliary Storage Device:저속 액세스, 저장밀도 높음, 비휘발성

I/O device:각 I/O device는 사용 data 다르고 명령어도 달라서 CPU와 직접 연결 안하고 각 I/O device별로 제어기(controller)가 있음

제어기

-상태 레지스터:I/O 장치의 현재 상태를 나타내는 비트들을 저장하는 레지스터로 준비 상태 비트, 데이터 전송확인 비트 등을 저장하는 레지스터

-데이터 레지스터:CPU와 I/O장치 사이 이동되는 데이터를 일시적으로 저장하는 레지스터, 데이터 버퍼라고도 불림


System Bus:CPU와 다른 요소들 정보 교환 통로

-Address Bus:CPU가 다른 요소들에게 주소 정보를 쏘는 통로, 일방통행

-Data Bus:CPU가 I/O장치와 데이터 전송 통로, 쌍방향

-Control Bus:제어신호선들의 집합, 일방통행, 제어신호(memory read/write, I/O read/write)


메모리 영역을 Command와 Data를 공유해서 사용 여부로 나눈 컴퓨터 구조

폰노이만 아키텍처(Von Neumann Architecture)

-하나의 메모리에 Command와 Data가 모두 저장, CPU는 한 번에 하나의 명령어만 실행가능(SISD:Single Instruction Single Data)

-명령어 처리 순서:fetch(CPU에 명령어 전달)->decode->execute->stored

-병목현상(Command읽을 때 Data못 읽음) 발생

-상대적으로 빠른 CPU의 속도를 효율적으로 사용안함

-Stored Programed 방식의 메모리 중심 구조(Stored Program:고수준 프로그래밍 언어(C 등)로 작성->컴파일->기계어 방식)

-고성능 CPU에 사용, 특히 인텔

-Cache Memory의 크기, CPU Prediction 알고리즘 등에 따라 성능 차이 큼

-저비용 소형 MCU(Micro Controller Unit, 집적 회로 안에 프로세서와 메모리, 입출력 버스 등 최소한의 컴퓨팅 요소를 내장한 초소형 컨트롤러)에 유리

하버드 아키텍처(Harvard Architecture)

-서로 다른 메모리에 Command와 Data를 각각 저장

-병목현상 없음(Command 읽기, 쓰기 병행 가능)

-하버드 마크 I의 릴레이를 사용한 극히 작은 메모리 영역으로 인한 버스 분리가 가능한 구조

-Harvard Architecture + RISC(Reduced Instruction Set Computer, ~~~)으로 성능향상

-임베디드 소형 프로세서에 사용, 특히 ARM(ARM Holdings에서 설계하는 Command set와 ISA(Instruction Set Architecture)의 총칭)계열에 사용

-2010년 이후 스마트폰이 대세->스마트폰의 CPU인 AP(Application Processor)가 확산->ARM 및 하버드 아키텍처 유명해짐

-고성능 DSP(Digital Signal Processor, 디지털 신호 처리를 위해 특별히 제작된 micro processor)개발에 유리


폰노이만 아키텍처의 문제점 해결방안

-병렬처리개념 도입(병렬처리기법(Pipeline, Super Pipeline, Super Scalar, VLIW(Very Long Instruction Word), EPIC(Explicitly Parallel Instruction Computing))

-Pipeline(한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조, 각 단계 사이의 입출력을 중계하기 위해 버퍼가 사용될 수 있다.)

-Super Pipeline(파이프라인의 일종, 어떤 동작이 실행될 때, 그 클럭을 나누어서 다음 명령어에 대한 동작을 수행한다. 클럭이 높아짐에 따라서 나누기가 힘들어져서 잘사용안함)

(클럭(Clock):컴퓨터의 CPU 또는 디지털 회로가 일정한 속도로 작동하기 위해서는 일정한 간격으로 전기적 진동(pulse)을 공급받아야 하는데, 이 전기적 진동을 클럭이라 한다. 클럭 스피드는 Hz를 이용, 4.2GHz라 하면 초당 42억번의 사이클로 0과 1의 디지털 신호를 발생시킨다는 것을 의미, I7-7700k가 4.2GHz)

(순차회로/로직(Sequential Circuit/Logic):현재의 입력 뿐 아니라 과거의 입력 혹은 출력 값들도 함께 고려하여 현재의 출력값을 결정하는 논리회로이다, 조합회로와 기억 소자(memory element)들로 구성)

(논리회로(Logic Circuit):부울 대수(Boolean Algebra)를 이용하여 1개 이상의 논리 입력을 일정한 논리 연상에 의해 1개의 논리 출력을 얻는 회로)

(조합회로/로직(Combinational Circuit/Logic):현재 입력에만 의존하여 출력이 결정되는 논리 회로)

(기억 소자(Memory Element/Cell):기억 장치의 가장 최소 단위. 보통 한 비트를 기억할 수 있는 플립플롭이나 자기 코어, 축전기 하나를 가리킨다.)

(플립플롭(Flip-Flop) or 래치(latch):1비트의 정보를 보관, 유지할 수 있는 회로이며 순차 회로의 기본 요소이다.)

-Super Scalar(Pipeline을 여러 개 두어 명령어를 동시에 실행하는 기술, 동시에 처리(투입/완료)가 가능한 명령어 개수(N)에 따라 N-issue, N-wide, N-way super scalar로 불린다.)

-VLIW(Very Long Instruction Word, 여러 opcode 필드가 있는 긴 명령어 하나에 독립적인 연산 여러개를 정의하고 이들을 한꺼번에 내보내는 명령어 구조 집합의 종류이다.)

(opcode, operation code:연산(operation)종류를 나타내기 위한 코드, 즉 덧셈을 ADD, 제곱근을 SQR 등으로 기억에 편리하도록 기호화한 것을 가리킨다.)

-EPIC(Explicitly Parallel Instruction Computing, 사용자의 컴파일러가 소스 코드로부터 병렬성을 찾아내고 병렬처리용 기계어 코드를 생성하여 수행하는 방식, VLIW 방식에 기반을 둠)

-병렬처리개념 도입(멀티프로세서(SMP(Symmetric Multi Processor), MPP(Massively Parallel Processor))

-SMP(Symmetric Multi Processor, 두 개 이상의 프로세서가 한 개의 공유된 메모리를 사용하는 멀티 프로세서 컴퓨터 아키텍처)

-MPP(Massively Parallel Processor, 두 개 이상의 프로세서가 각각 전용의 메모리를 사용하는 멀티 프로세서 컴퓨터 아키텍처)

-Main Memory 병목 해결

-버스분리(명령어와 데이터용 버스 분리)

-CPU에 Memory Controller를 내장

-Cache Memory를 계층적으로 구성(Intel의 L1/L2/L3 캐시 구성)

-L1/L2/L3란, L은 Level을 가리키고, CPU가 L1확인하고 없으면 L2를 확인, L3는 멀티 코어 CPU에서 각 코어와 L2 캐시 사이의 버퍼역할

(L1은 Command Cache와 Data Cache로 나누어져있음, L2는 나누어져 있지 않음)

(코어:CPU에서 다이(die, 실리콘 위에 반도체 회로를 만들어서 사각형으로 잘라낸 것, CPU의 밑판)에서 Cache Memory를 제외한 회로부분)

-구조적 해결:최근에는 CPU<->Cache Memory는 하버드 아키텍처, CPU<->Main Memory는 폰노이만 아키텍처를 통해 병목현상을 개선하여 사용)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


자료구조

배열(Array)

-데이터가 많아서 그룹핑(grouping)을 해야할 필요가 있을 때 사용한다.

-배열의 구성요소

배열생성

배열의 index

value

element(index+value 합쳐서 element라 함)

-주로 사용하는 기능

-반복문

-Java에서 사용법

-생성

int[] numbers1 = new int[4];

element의 자료형, []은 배열임을 표시, 배열의 이름, = new(객체생성키워드), int[4](배열의 크기 지정

String[] strings = new String[4];

-배열에 데이터 입력

numbers1[0]=10;

numbers1[1]=20;

numbers1[2]=30;

(아무것도 입력안한 numbers1[3]에는 처음 생성시 디폴트값으로 0이 들어가있다. 만약 배열의 자료형이 객체였다면 디폴트로 null이 들어감)

-배열의 생성과 입력을 한번에 해결하기(배열의 생성시점에 배열에 들어갈 values를 이미 알 때 주로 사용)

int[] number2 = {10, 20, 30, 40};

int[] number3 = new int[]{10, 20, 30, 40};

-배열의 값을 가져오기(get)

System.out.println(number1[0]);  //10이 나옴

System.out.println(numbers1[3]); //0이 나옴

-배열의 크기(size)가져오기

System.out.println(numbers1.length);  //4가 나옴(element의 개수가 나옴, 값을 지정한 개수가 나오는게 아니다.)

-배열과 반복문(Iteration)

int i = 0;

while(number1.length > i){

System.out.println(number1[i]);

i++;

}

(while문의 단점은 int i = 0;과 조건문 그리고 반복문 의 i들이 멀리 떨어져있을 수 있어서 가독성이 떨어지고 중간에 버그가 있을 수 있다.)

(그럴땐 for문을 사용)

for(i=0;numbers1.length > i;i++){

System.out.println(numbers1[i]);

}

-배열의 단점

-크기가 정해져있어서, 데이터를 추가해야할 때 오류가 발생한다.

-기능이 없다.

-배열의 장점

-크기가 정해있어서, 작고 가볍고 단순하다.

-기능이 없다. 그래서 이후에 부품으로 이용되기가 좋다.


리스트(List)

중요 키워드:순서, 중복허용

array와 list

array도 순서와 중복허용 둘 다 가능하다

list가 array보다 기능이 더 많다.

array는 주소(index)가 중요

list는 A다음에 B가, B다음에 C가, 등 순서가 더 중요하다

데이터를 추가할 때의 array와 list의 차이가 두드러진다.

array는 덮어쓰기

list는 정말 추가가 가능, 기존 데이터는 한칸씩 밀려난다.

데이터를 삭제할 때는

array는 그 index의 데이터가 사라지지만 그 공간은 남아 있고 비어있게 된다

list는 그 index의 데이터가 사라짐과 공간도 사라지고, 그 이후의 element가 앞당겨오게 된다.

즉 list는 비어있는 데이터가 없다. 따라서 데이터 삭제를 한 이후에도 반복문 사용시 데이터의 유무를 판단하지 않아도 되며, 빈 데이터가 없으므로 메모리를 덜 차지하게 된다.

list의 기능

처음, 끝, 중간에 element를 추가/삭제하는 기능

모든 데이터에 접근할 수 있는 기능

데이터의 존재유무를 판단할 수 있는 기능

언어별 특징(데이터 스트럭쳐는 언어마다 다르지만, 본질적 개념을 알아야 한다.)

C에서는 list가 없다, 자신이 만들거나 다른 사람이 만든 것을 가져와서 사용함

JavaScript에서는 list가 있다. 

ex)

numbers = [10, 20, 30, 40, 50];

numbers.splice(3,1); //numbers라는 array의 index 3에서부터 1개의 데이터를 삭제하라(splice)

(그러면 위에 설명한 list에서처럼 삭제하고 한칸씩 앞당겨온다. 따라서 JavaScript에서는 array가 list처럼 동작하는 부분이 있다는 것을 알 수 있다.)

Python에서는 array가 기본적으론 없고 list가 기본적으로 제공됨

ex)

numbers = [10, 20, 30, 40, 50]; //5개의 element를 갖고 있는 list

numbers.pop(3); // index 3에 해당하는 40이란 data를 삭제하고 뒤 데이터를 한칸씩 앞으로 당김

numbers[0]; //0번째 데이터에 접근 가능

(Python에서는 list가 array처럼 활용되기도 한다(number[0]보면은))

Java에서는 array와 list가 각기 다른 문법으로 제공된다.

int[] numbers = {10, 20, 30, 40, 50}; //array

ArrayList numbers = new ArrayList();

numbers.add(10);

numbers.add(20);

numbers.add(30);

numbers.add(40);

numbers.add(50);

numbers.remove(3); // 40을 제거하고 밀려서 10,20,30,50이 됨

(Java에서는 array와 list가 모두 지원)

LikedList, ArrayList, 2가지의 list를 지원한다. 

ArrayList는 데이터의 추가/삭제가 느리지만 인덱스 조회는 빠르다.

LikedList는 인덱스 조회는 느리지만 데이터의 추가/삭제가 빠르다.

(따라서 개발자가 장단점을 생각해서 사용하게끔 해줌)

ArrayList는 Array를 이용하여 List를 만든다.

데이터를 추가할 때, 그 위치의 데이터의 오른쪽에 있는 모든 데이터를 오른쪽으로 1칸씩 미리 옮긴다음에 추가한다.

데이터를 삭제할 때는, 바로 삭제후 그 이후 데이터를 왼쪽으로 한칸씩 모두 옮겨주어야 한다.

index를 이용해서 데이터를 가져오기(get)가 굉장히 효율적이다.

size라는 것을 이용해서 ArrayList의 데이터의 개수(size)를 쉽게 알 수 있다.

장점:

데이터의 가져오기가 빠르다.

단점:

데이터의 추가/삭제가 오래걸린다.(비효율적이다.)

예제)(ArrayList의 생성, 데이터 추가/삭제, size, 데이터 조회, 반복문)

import java.util.ArrayList;  //import를 먼저 하고 사용해야 한다. ArrayList는 java.util 패키지에 있다.

import java.util.Iterator;


public class Main { 

public static void main(String[] args) { 

ArrayList<Integer> numbers = new ArrayList<>(); //<>이란 generic을 사용하여 ArrayList 내에 있을 데이터의 자료형을 미리 지정해서 만들 수가 있다.//

numbers.add(10); //데이터의 추가(insert)

numbers.add(20);

numbers.add(30);

numbers.add(40); //[10, 20, 30, 40]이 된다.

numbers.add(1,50); //numbers내의 index 1의 위치 오른쪽것을 모두 오른쪽으로 이동후 1의 위치에 50을 끼워넣게 된다. [10, 50, 20, 30, 40]이 나옴

numbers.remove(2); // numbers내의 index 2의 데이터를 삭제후 오른쪽 데이터를 모두 왼쪽으로 옮긴다. [10, 50, 30, 40]이 나옴

numbers.get(2); // numbers내의 index 2의 데이터를 가져온다.

numbers.size(); // numbers의 size가 나온다.

Iterator it = numbers.iterator(); // Iterator란 interface를 사용

while(it.hasNext()){ 

int value = (int)it.next();

if(value == 30){

it.remove();

}

System.out.println(value);

}

}

//혹은 다음 방법도 가능//

for(int value : numbers){ //numbers의 값들을 하나씩 value에 넣어 처리 가능

System.out.println(value);

}

for(int i=0; i < numbers.size(), i++){

System.out.println(numbers.get(i));

}

}

}

예제)(ArrayList의 객체 생성하기)

new->package

new->class(객체 실행을 위해, public main void체크해서)Main만들기

new->class(ArrayList)

Main.java에 들어가서

ArrayList numbers = new ArrayList(); // instance를 만듦

numbers.addLast(10); // 가장 마지막에 10을 추가

numbers.addLast(20); 

numbers.addLast(30);

numbers.addLast(40);

ArrayList.java에 들어가서

public class ArrayList {

private int size = 0; // ArrayList의 size를 측정하기위해 변수 정의

private Object[] elementData = new Object[100]; //private으로 이 내부에서만 사용하게, 이해하기 쉬운 Object형을 사용, 100개의 데이터만을 수용할 수 있게 만듦, 실제 자바내 있는 collection primework?에 있는 것은 ArrayList가 크기가 유동적임//

public boolean addLast(Object element){ // 가장 마지막에 데이터를 추가할 메소드(함수)를 만들기

elementData[size] = element;

size++;


return true;

------------------------------------------------------------------------------------------------------------------------------------------------------------

다시 정리

1. 언어랑은 상관없이

2. 각 자료 구조 형태마다의 특징을 정리, 그 '구조'를 써야하는 적절한 예제를 함께 정리한다.


1. Array, 배열

배열의 구성 요소:index, value, element(index+value를 함께 element라 한다.)

사용하는 상황:반복문

장점:배열의 크기가 정해져 있어서 작고 가볍고 단순하다.

단점:배열의 크기가 정해져있어서 데이터를 추가할 때 오류가 발생한다.


2. List, 리스트

리스트는 Order가 중요하다. 

-데이터를 추가할 때 Array는 덮어쓰기, List는 끼워넣기(이후 데이터는 한칸씩 밀려난다.)

-데이터를 삭제할 때 Array는 그 index의 value가 사라지지만 그 공간은 남아 있고 비어있게 된다. List는 그 index의 value가 사라짐과 함께 공간도 사라지고, 그 이후의 element가 앞당겨 온다. 따라서 List는 비어있는 데이터가 없으며 삭제를 한 이후에도 반복문 사용시 데이터의 존재유무를 판단하지 않아도 되며, 빈 데이터가 없으므로 메모리를 덜 차지하게 된다.

ArrayList

-사용하는 상황:데이터 조회(index 조회)가 자주일어나되 처음/중간/끝 등에 데이터를 추가/삭제는 자주 하지 않는 상황(전자가 빠르고 후자는 느리기때문에)

-데이터를 추가/삭제를 생각하면 나머지 우측 데이터들의 한칸씩 이동이 걸리기 때문에 ArrayList는 데이터를 추가/삭제를 자주하는 경우에는 사용을 기피

-메모리상에 데이터들이 연속적으로 붙어 있음

Linked List

-Linked List의 구성요소:HEAD+data field+link field(link field는 다음 node가 무엇인지에 대한 정보를 갖고 있음, 따라서 HEAD(첫번째 node가 무엇인지에 대한 정보를 갖고 있음)

-사용하는 상황:처음/중간/끝 등에 데이터를 추가/삭제가 자주일어나는 상황, 데이터 조회(index 조회)는 자주 하지 않는 상황

-데이터 조회할 때 메모리를 일일이 찾아 HEAD를 찾아야하기때문에 데이터 조회에는 느린 속도를 갖는다.

-데이터를 추가/삭제시 메모리상에 임의의 위치에 추가/삭제 하고 기존의 link field만 수정하는 형태이므로 데이터를 추가/삭제는 빠른편이다.(ArrayList에 비해)

-메모리상에 데이터들이 흩어져있지만 연결되어 있음(link field 정보)

Doubly Linked List

-Linked List에서 link field가 양방향으로 확장된 형태(Previous link field와 Next link field가 있는 형태)

-사용하는 상황:데이터 조회시 크기의 절반보다 큰 index를 자주 조회하는 경우이면서 데이터를 추가/삭제가 자주 있는 상황

-메모리를 Linked List보다 더 많이 사용한다.

-Linked List보다 조금 더 복잡하다

정리 1.

Array:데이터의 크기가 정해져있고 수정이 없고 가벼운 형태

ArrayList:데이터의 추가/삭제가 빈번하지 않고 조회가 주로 이뤄질 때

Linked List:데이터의 추가/삭제가 빈번하고 조회는 비교적 적게 할 때

Doubly Linked List:데이터의 추가/삭제가 빈번하면서 조회가 앞 뒤로 양방향이 자주 일어날 때



3. Stack, 스택

한쪽 끝(top)에서만 삽입(push)과 제거(pop, 정확하게는 출력하면서 제거)가 일어남, LIFO(Last-In-First-Out), 스택은 엘리베이터!, peek은 pop과 유사하지만, 출력만 하고 제거는 하지 않음

구현은 Array를 이용하거나 Linked List를 이용한다.

Array를 이용하는 경우, 스택을 위한 배열을 하나 잡고, index 값을 0으로 잡는다. index가 0이면 스택이 비어있는 것, 스택에 뭔가를 집어넣을 때는 Index의 자리에 집어넣고 index를 하나 올린다. index가 초기 배열 크기 이상이면 스택이 꽉 찬 것, 스택에서 뭔가를 뺄 때는 index에 있던 값을 돌려주고 index를 하나 뺀다.

사용하는 상황:

연산 구현시 stack(아래 함수의 호출 참고)

함수의 호출에 관여, 기본적으로 함수 f를 호출하면 먼저 f가 받는 인수들이 push되고 그다음 f가 리턴값을 받을 공간이 push된다. 그다음 f에 해당하는 stack frame이 할당 되고 그 stack frame내부에 f의 내부 변수들이 push된다. 이후 f에 해당하는 연산이 종료되고 f의 stack frame 내부의 값들이 빠져나오면서 최종적으로 리턴값을 받기 위한 공간으로 들어오게 된다. 

f를 호출한 상황에서 다른 함수 g를 호출하는 상황을 생각하면, 스택내부에 스택이 또 쌓이는 것이다. 이 개념을 이해하면 recursion이 연산속도에서 불리한 점이 이해된다. recursion할 때마다 스택을 자꾸 쌓아서, 결국 최종값을 얻기 위해서는 쌓인 스택을 전부 다시 빼내야하기 때문이다. 따라서 recursion을 쓰기 전, recursion이 필요한지 설계를 먼저 정확히 이해하는 것이 필요하다.


4. Queue, 큐

한쪽 끝에서는 삽입/제거만 일어나고 다른쪽 끝에는 제거/삽입만 일어남

제거 되는 곳을 Front, 삽입되는 곳을 Rear라고 함, FIFO(First-In-First-Out)

배열의 양끝이 맞물린 것처럼 가정하여 구현

사용하는 상황:CPU 스케쥴링, 디스크 스케쥴링, 버퍼(buffer)로 producer, consumer 사이의 완충 역할, 트리 및 이진트리의 레벨순서(level-order) 방문(탐색) 및 그래프의 너비우선(breadth-first) 방문(탐색)



5. Tree, 트리


6. Graph, 그래프

Directed Graph, 유향그래프

Undirected Graph, 무향그래프


7. Set, 집합













알고리즘

시간 복잡도(time complexity)

실행 시간은 실행환경에 따라 달라진다.(하드웨어, 운영체제, 언어, 컴파일러 등)

따라서 실행 시간을 측정하는 대신 연산의 실행 횟수를 카운트

연산의 실행 횟수는 입력 데이터의 크기에 관한 함수로 표현

데이터의 크기가 같더라도 실제 데이터에 따라서 달라짐

최악의 경우의 시간 복잡도 (worse-case analysis)

평균 시간 복잡도 (average-case analysis)


점근적 분석(Asymptotic analysis)

데이터의 개수 n->inf일 때 수행시간이 증가하는 growth rate로 시간 복잡도를 표현하는 기법

유일한 분석법도 아니고 가장 좋은 분석법도 아니지만, 상대적으로 간단하고 알고리즘의 실행환경에 비의존적이어서 많이 사용됨

가장 자주 실행되는 연산 혹은 문장의 실행횟수를 고려하는 것으로 충분하다.

Ο 표기법은 upper bound를 표현

Ω 표기법은 lower bound를 표현

Θ 표기법은 upper and lower bound를 표현


이진 검색(Binary Search)와 정렬(Sort)

이진 검색

오름차순으로 미리 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 

중앙값을 선택하여 target과 맞는지 비교후

맞으면 끝

중앙값>target이면 중앙값을 새로운 최댓값으로 택한다.

중앙값<target이면 중앙값을 새로운 최솟값으로 택한다.

정렬된 리스트에만 사용할 수 있다는 단점이 있지만 검색이 반복될 때마다 목표값을 찾을 확률은 두 배가 되므로 속도가 빠르다 Ο(log_2 (n))

순차 검색과 비교하면 순차 검색은 Ο(n)으로 이진 검색이 훨씬 빠르다.


정렬

버블 정렬 혹은 거품 정렬(bubble sort)

가장 왼쪽(l)과 인접한 오른쪽(r)과 비교후 l>r이면 l<->r

이후 2번째 원소와 3번째 원소를 비교후 같은 방법

한차례 지나고나서 다시 또 한다. (다만 첫포문을 마치고나면 가장 오른쪽엔 가장 큰것이 이미 와있으므로 두번째 포문부터는 n-1까지만 하면된다.)

원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다.

시간 복잡도가 최선/평균/최악=Ο(n)/Ο(n^2)/Ο(n^2)

삽입 정렬(Insertion sort)

index 1의 데이터를 0과 비교해 제자리에 둔다

index 2의 데이터를 0과 1과 비교해 제자리에 둔다.

...

index k의 데이터를 0~k-1까지의 데이터와 비교해 제자리(맞는 자리에) 둔다.

시간 복잡도가 최선/평균/최악=Ο(n)/Ο(n^2)/Ο(n^2)이다.

기타 정렬

퀵소트(quicksort)

합병(merger sort)

힙(heap sort)

등이 있다.

*code review부터 다시보고 정리











순환(Recursion)

순환(재귀함수)이란, 자기 자신을 호출하는 함수(메소드)를 가리킨다.

순환이 무한루프에 빠지지 않기 위한 조건이 있다.

적어도 하나의 recursion에 빠지지 않는 경우가 존재해야 한다. 이것을 base case라 한다. 

recursion을 반복하다보면 결국 base case로 수렴하게 recursive case를 둬야 한다.

가능하면 암시적(implict) 매개변수를 명시적(explicit)매개변수로 표현하라.

예제)(Hello를 n번 출력하는 형태)

public class Code02 { 

public static void main(String [] args) {

int n = 4;

func(n);

}


public static void func(int k) {

if (k<=0)  // base case

return;

else {

System.out.println("Hello");

func(k-1);  //recursive case

}

}

}

예제)(n까지의 합을 출력하는 형태)

public class Code03 {

public static void main(String [] args) {

int result = func(4);

}


public static int func(int n) {

if (n==0)

return 0;

else

return n + func(n-1);

}

}

예제)(실수 x의 n승 구하기)

public static double power(double x, int n) {

if (n==0)

return 1;

else

return x*power(x, n-1);

}

예제(피보나치 수열 구하기)

public int fibonacci(int) {

if (n<2)

return n; // f_0 =0, f_1 =1인 피보나치의 경우

else 

return fibonacci(n-1) + fibonacci(n-2);

}

예제(Euclid algorithm을 이용한 최대공약수 구하는 예제)

public static double gcd(int m, int n) {

if (m<n) {

int tmp = m;

m = n;

n = tmp; // swap m and n(즉 항상 first argument가 더 크거나 같게)

}

if (m%n == 0)

return n;

else 

return gcd(n, m%n);

}

예제(Euclid algorithm을 이용한 최대공약수 구하는 더 간단한 예제)

public static int gcd(int p, int q) {

if ( q==0 )

return p;

else

return gcd(q, p%q);

}

수학함수뿐 아니라 다른 많은 문제들을 순환을 이용하여 해결할 수 있다. 특히 for문, while문을 대신할 수 있다.

순환<->반복문(즉 모든 반복문도 순환으로 만들 수 있다.)

순환함수는 복잡한 알고리즘을 단순하고 알기쉽게 표현하는 것을 가능하게 한다.

하지만 함수 호출에 따른 오버해드가 있다.(매개변수 전달, 액티베이션 프레임 생성 등), 즉 순환은 프로그래밍 실행 속도에 단점이 있긴 있다.

예제(문자열의 길이 계산)

public static int length(String str) {

if (str.equals(""))

return 0;

else

return 1 + length(str.substring(1));  // str.substring(1)이란 str의 첫번째 문자를 제거한 substring을 가리킨다.

}

예제(문자열의 출력)

public static void printChars(String str) {

if (str.length() == 0)

return;

else {

System.out.print(str.charAt(0)); // str.charAt(0)란, str의 첫 문자를 리턴하는 메소드이다.

printChars(str.substring(1));

}

}

예제(문자열을 순서를 뒤집어 프린트)

public static void printCharsReverse(String str) {

if (str.length() == 0)

return;

else {

printCharsReverse(str.substring(1));

System.out.print(str.charAt(0));

}

}

(문자열의 출력 예제와 달라진 것은 else내에 출력과 호출의 순서만 바꼈을 뿐이다.)

예제(자연수를 2진수로 변환하여 출력)

public void printInBinary(int n) {

if (n<2)

System.out.print(n);

else {

printInBinary(n/2);

System.out.print(n%2);

}

}

예제(정수 배열(Array)의 합 구하기, data[0]에서 data[n-1]까지의 합)

public static int sum(int n, int [] data) {

if (n<=0)

return 0;

else

return sum(n-1, data) + data[n-1];

}

}

암시적(implicit)매개변수를 명시적(explicit)매개변수로 바꾸어라.

예제(순차 탐색, sequential search)

int search(int [] data, int n, int target) {

for (int i=0; i<n ; i++)

if (data[i]==target)

return i;

return -1;

}

(여기서 n은 명시적인데, search의 시작 인덱스인 0은 암시적 매개변수이다. 하지만 순환을 사용시 시작인덱스도 명시적으로 하자.)

예제(순차 탐색, 매개변수의 명시화)

int search(int [] data, int begin, int end, int target) {

if (begin > end)

return -1;

else if (target==data[begin])

return begin;

else

return search(data, begin+1, end, target);

}

(이렇게 시작 index를 begin으로 명시화하자. search(data, begin, end, target)으로하면 begin index부터 end index까지 target이 있는지 확인)

예제(최대값 찾기)

int findMax(int [] data, int begin, int end) {

if (begin==end)

return data[begin];

else

return Math.max(data[begin], findMaxt(data, begin+1, end));

}

예제(이진 검색, binary search)

public static int binarySearch(String[] items, String target, int begin, int end) {

if (begin>end)

return -1;

else {

int middle = (begin+end)/2;

int compResult = target.compareTo(items[middle]); // string 비교시 자바에서는 compareTo를 사용한다. target이 items[middle]보다 크면 양수, 작으면 음수, 같으면 0을 return한다. //

if (compResult == 0)

return middle;

else if (compResult < 0)

return binarySearch(items, target, begin, middle-1);

else

return binarySearch(items, target, middle+1, end);

}

}

예제(미로찾기)

Recursive한 생각

현재 위치에서 출구까지 가는 경로가 있으려면

1) 현재 위치가 출구이거나 혹은

2) 이웃한 셀들 중 하나에서 현재 위치를 지나지 않고 출구까지 가는 경로가 있거나

예제(미로찾기의 슈도코드1)

boolean findpath(x,y)

if (x,y) is the exit

return true;

else

mark (x,y) as a visited cell; //visited cell개념을 넣지 않으면 무한 루프에 빠질 수 있다.

for each neighbouring cell (x',y') of (x,y) do

if (x',y') is on the pathway and not visited

if findpath(x',y')

return true;

return false;

예제(미로찾기의 슈도코드2)

boolean findpath(x,y)

if (x,y) is either on the wall or a visited cell

return false;

else if (x,y) is the exit

return true;

else

mark (x,y) as a visited cell;

for each neighbouring cell (x',y') of (x,y) do

if findpath(x',y')

return true;

return false;

예제(미로찾기의 실제 자바 코드)

public class Maze {

private static int N=8;

private static int [][] maze = {

{0, 0, 0, 0, 0, 0, 0, 1},

{0, 1, 1, 0, 1, 1, 0, 1},

{0, 0, 0, 1, 0, 0, 0, 1},

{0, 1, 0, 0, 1, 1, 0, 0},

{0, 1, 1, 1, 0, 0, 1, 1},

{0, 1, 0, 0, 0, 1, 0, 1},

{0, 0, 0, 1, 0, 0, 0, 1},

{0, 1, 1, 1, 0, 1, 0, 0},

};


private static final int PATHWAY_COLOUR = 0; // white

private static final int WALL_COLOUR = 1; // blue

private static final int BLOCKED_COLOUR = 2; // red

private static final int PATH_COLOUR = 3; // green


public static boolean findMazePath(int x, int y) {

if (x<0 || y<0 || x>=N || y>=N)

return false;

else if (maze[x][y] != PATHWAY_COLOUR)

return false;

else if (x==N-1 && y==N-1) {

maze[x][y] = PATH_COLOUR;

return true;

}

else {

maze[x][y] = PATH_COLOUR ;

if (findMazePath(x-1,y) || findMazePath(x,y+1) || findMazePath(x+1,y) || findMazePath(x,y-1)) {

return true;

}

maze[x][y] = BLOCKED_COLOUR; // dead end

return false;

}

}


public static void main(String [] args) {

printMaze();

findMazePath(0,0);

printMaze();

}

}

예제(Counting cells in a Blob)

상황:

입력으로 binary image를 받는다. 그리고 하나의 좌표(x,y)도 받는다.

각 픽셀은 background pixel이거나 혹은 image pixel

서로 연결된 image pixel들의 집합을 blob이라고 부름

상하좌우 및 대각방향으로도 연결된 것으로 간주

(x,y)가 image pixel로서 택해졌다면, 그 pixel이 속한 blob의 총 image pixel의 개수를 return하는 문제이다.

(x,y)가 background pixel이면 0을 return

슈도코드:

if (x,y)가 이미지 밖이면 

결과는 0

else if (x,y)가 image pixel이 아니거나 already counted면

결과는 0

else

(x,y)를 다른 색(예를 들면 빨강)으로 색칠하라; // 이미 카운트 됐음을 표시

1+(인접한 영역의 count값);

실제 코드

private static int BACKGROUND_COLOR = 0;

private static int IMAGE_COLOR = 1;

private static int ALREADY_COUNTED = 2;


public int countCells(int x, int y) {

if (x<0 || x>=N || y<0 || y>=N)

return 0;

else if (grid[x][y] != IMAGE_COLOR)

return 0;

else {

grid[x][y] = ALREADY_COUNTED;

return 1 + countCells(x-1, y+1) + countCells(x, y+1)

+ countCells(x+1, y+1) + countCells(x-1, y) 

+ countCells(x+1, y) + countCells(x-1, y-1)

+ countCells(x, y-1) + countCells(x+1, y-1)

}

}

예제(N-queens problems)

상황:

NxN 체스판에 N개의 말을 놓는다. 

이때 각 말은 같은 행, 같은 열, 같은 대각선 상에 놓이지 않게 N개의 말을 놓을 수 있는지?에 대한 대답

Backtracking이용

일련의 선택을 하다가 조건에 부합하지 않게 되면, 그 이전의 선택으로 거슬러 올라가 번복하는 방법

각 행에는 1개의 말만 올 수 있음을 인지하고

0행에서 (0,0)에 말을 놓은 뒤

1행에서 (1,2)에 말을 놓은 뒤..... 쭉 하다가 안된다는 것을 깨달으면 그 이전의 행에서 놓은 말을 이동시킨다.(열을 증가하는 방향으로)

상태공간트리(State Space Tree)이용

뿌리에 Start를 두고

뿌리와 거리가 1인 노드들에는 0행에 놓일 0번 말의 가능한 좌표를 vertex에 표시하여 둔다

뿌리와 거리가 2인 노드들에는 이전 vertex(좌표)에서 1행에 놓일 1번 말의 가능한 좌표를 vertex에 표시하여 둔다.

.... 반복

해가 존재한다면 그것은 반드시 이 트리의 어떤 한 노드sequence에 해당한다. 따라서 이 트리를 체계적으로 탐색하면 해를 구할 수 있음

트리를 탐색하는 기법들

깊이 우선 탐색, (이후에 정확한 정의를 파악), 일단 위의 예제에서 backtracking을 상태공간트리에 적용하면 그게 깊이 우선 탐색

실제코드(recursion과 stack을 사용할 수도 있다. 아래는 recursion을 이용한 코드이다.)

int [] cols = new int [N+1]; // 매개변수 level은 현재 노드의 level(트리의 root에서 떨어진 길이)을 표현, cols[i]=j 는 i번째 말이 (i행,j열)에 놓였음을 의미

boolean queens(int level) { // 매개변수는 내가 현재 트리의 어떤 노드에 있는지를 지정, level을 넣음으로써 정확한 위치는 아니지만 몇행인지는 앎

if (!promising(level))

return false;

else if (level==N) { // level이 N인데 promising(level)이 true가 나왔으니까 끝난것

for (int i=1 ; i<=N ; i++)

System.out.println("(" + i + ", " + cols[i] + ")");

return true;

}

for (int i=1 ; i<=N ; i++) {

cols[level+1] = i;

if (queens(level+1))

return true;

}

return false;

}

boolean promising(int level) {

for (int i=1 ; i<level ; i++) {

if (cols[i]==cols[level]) // level번째 말이 이전의 말들과 같은 열에 있는 경우를 검사

return false;

else if (level - i==Math.abs(cols[level] - cols[i]) // level번째 말이 이전의 말들의 영향받는 대각선에 있는 경우를 검사

return false;

}

return true;

}

(실제 사용시 queens(0)으로 호출하면 된다.)

(이해를 하기위해 queens(0)을 생각해보기)

예제(powerset 출력하기)

상황:

주어진 집합의 모든 부분집합을 출력하는 문제

전략:

만약 {a,b,c,d,e,f}라면 

a를 포함하지 않는 부분집합을 나열한 후,

각각의 부분집합마다 a를 포함시켜 나열하면 된다.

(b를 포함하지 않는){c,d,e,f}의 모든 부분집합들에 a를 추가한 집합들을 나열하고

(b를 포함하는){c,d,e,f}의 모든 부분집합에 {a,b}를 추가한 집합들을 나열

....

즉 recursion을 해나간다.

powerSet이란 함수를 설정하는데에 있어서 argument를 집합1개만 받게 설정하면 recursion과정에서 각각의 부분집합마다 포함시켜 나열하는 경우가 해결이 안된다. 


실제 코드:

private static char data[] = {'a', 'b', 'c', 'd', 'e', 'f'};

private static int n=data.length;

private static boolean [] include = new boolean [n];


public static void powerSet(int k) { // k와 include를 통해 상태공간트리에서 현재 위치를 알려주는 것이다.

if (k==n) { // 상태공간 트리에서 현재위치가 가장 밑인 경우

for (int i=0 ; i<n ; i++)

if (include[i]) System.out.print(data[i] + " "); // P를 출력

System.out.println();

return;

}

include[k]=false; // data[k]를 포함하지 않는 경우

powerSet(k+1);

include[k]=true; // data[k]를 포함하는 경우

powerSet(k+1);

}

(data[k], ..., data[n-1]의 멱집합을 구한 후 각각에 include[i]=true, i=0,...,k-1인 원소를 추가하여 출력하라는 mission)

(처음 이 함수를 호출할 때는 powerSet(0)로 호출한다.)

상태공간트리 활용

해를 찾기 위해 탐색할 필요가 있는 모든 후보들을 포함하는 트리

트리의 모든 노드들을 방문하면 해를 찾을 수 있다.

루트에서 출발하여 체계적으로 모든 노드를 방문하는 절차를 기술한다.

k=0일땐 공집합

k=1일땐 공집합이거나 a만 있거나(k=0일때의 집합에 a를 안넣거나 넣거나)

k=2일땐 k=1에서의 각각의 집합에서 b를 넣거나 안 넣거나를 만듦

k=3일땐 k=2에서의 각각의 집합에서 c를 넣거나 안 넣거나를 만듦


정렬

종류:

Simple하고 slow:Bubble sort, Insertion sort, Selection sort, 

조금 복잡하지만 fast한:Quick sort, Merge sort, Heap sort, 

그 외:Radix sort

기본적인 정렬 algorithm

Selection Sort:

1. 가장 큰 값(M)을 찾는다.

2. 가장 오른쪽 값(R)과 exchange(정렬한다.)

3. 가장 오른쪽 값을 제외하고 1,2를 다시 한다.

시간복잡도 : O(n^2) = 1부터 n-1까지의 합, 최선/평균/최악 모두 정확히 n(n-1)/2이다.

for 루프가 n-1번 반복, 가장 큰 수를 찾기 위한 비교 횟수:n-1, n-2, ..., 2, 1, 그리고 교환은 상수시간

Bubble Sort

1. 첫번째 값과 두번재값과 비교

2. 정렬(교환or유지)한다.

3. 두번째값과 세번째값과 비교

4. 정렬한다.

...반복

결과적으로 가장 큰 값이 가장 오른쪽에 오게 된다.

5. 이후 가장 오른쪽 값을 제외하고 다시 1~4를 한다.

시간복잡도 : O(n^2) = 1부터 n-1까지의 합, 최선/평균/최악 모두 정확히 n(n-1)/2이다.

for 루프가 n-1번 반복, 안쪽 for문이 n-1,n-2,...,1번 반복, 교환은 상수시간 작업

Insertion Sort

1. 첫번째 값에 두번째 값을 끼워 넣는다.

2. 세번째 값을 이전 결과에 끼워 넣는다.

3. 네번째 값을 이전 결과에 끼워 넣는다.

...반복

즉 k-1개가 이미 정렬되어 있고 k번째 item을 끼워넣는 것을 반복하는 것

구체적으로

copy the k번째 item to tmp

k번째 item이랑 k-1번쨰 item이랑 비교, k번째가 k-1번째보다 크면 끝, 작으면 k-1번째 아이템을 오른쪽으로 덮어쓰기(shift), 

그리고 k번째 item이랑 k-2번째 item비교,... 이것을 반복

(만약 k번째 item을 k-1, k-2, k-3,...순으로비교할게 아니라, 1,2,3,...으로 비교한다면 대칭이므로 차이가 없어보이지만, 주어진게 배열이라면, 오른쪽에서부터 비교하는, 즉 k-1,k-2,k-3,...순으로 비교하는게 효율적이다. 왜냐하면 대상이 배열이기때문에 결국 k번째 item을 k-1개의 item들 사이에 끼워넣기 위해선, k번째 item보다 큰 녀석들을 결국 오른쪽으로 옮겨야하고, k번째 item보다 큰 값을 가진애들을 한번씩은 접근을 해야하기 때문이다. 즉 1,2,3,...순은 총 k-1개의 데이터를 결국 다 접근해야하는 것이고, k-1,k-2,k-3,... 순은 접근해야할 개수가 k-1개 전체가 되진 않을 수도 있다. 그래서 k-1,k-2,...순으로 비교하는 것이다.)

시간복잡도 : 최악이 O(n^2) = n(n-1)/2, 최선이 O(n) = n-1, 평균도 O(n^2)

for 루프는 n-1번 반복, i번째 item을삽입(Insertion)하는 최악의 경우 i-1번 비교

Merge Sort

Divide and conquer(본질적으론 recursion과 유사)

분할정복법):예전에 로마 제국이 주변 나라를 정복할 때, 전체를 통채로 정복하기 보다는 작은 것으로 분할하여 정복한 것과 유사함

분할:해결하고자 하는 문제를 작은 크기의 "동일한" 문제들로 분할(recursion할 때와 비슷)

정복:각각의 작은 문제를 순환적으로 해결

합병:작은 문제의 해를 합하여(merge) 원래 문제에 대한 해를 구함

     Merge sort    

데이터가 저장된 배열을 절반으로 나눔

각각을 순환적으로 정렬

정렬된 두 개의 배열을 합쳐 전체를 정렬<<<이게 가장 중요, 관건

9개 데이터있는 1개의 배열이 있다면, 절반으로 나누는 과정을 몇번하면 정렬된 9개의 배열을 갖게 된다.

그리고 다시 2개씩 합쳐주며 merge하는 것이다.

Merge를 하는 방법(a1<a2<a3, b1<b2<b3인 경우)

추가 배열을 만든다.

a1과 b1 중 작은 것을 추가배열의 왼쪽에 둔다.(a1<b1이라하자)

a2과 b1 중 작은 것을 추가배열의 왼쪽에 둔다(a2<b1이라하자)

a3와 b1 중 작은 것을 추가배열의 왼쪽에 둔다(b1<a3이라하자)

...이하 반복

(a배열의 index i, b배열의 index j, 추가배열의 index k중 k는 항상 +1, i는 a가 작을때 +1, j는 b가 작을 때 +1)

(sub배열중 1개가 완료되면 나머지 sub배열을 그대로 가져오면된다.)

알고리즘:

mergeSort(A[], p, r) { // 배열 A[]을 index p에서 index r까지 배열

if (p<r) then {

q = (p+q)/2 ; // p, q의 중간 선택

mergeSort(A, p, q); // 전반부 정렬

mergeSort(A, q+1, r); // 후반부 정렬

merge(A, p, q, r); // 합병

}

}


merge(A[], p, q, r) {

정렬되어 있는 두 배열 A[p,...q]와 A[q+1,...,r]을 합하여 정렬된 하나의 배열 A[p,...,r]을 만든다.

}

(merge부분을 실제 자바 코드로 써보면)

void merge(int data[], int p, int q, int r) {

int i = p; // 앞 배열 index

int j = q+1; // 뒤 배열 index

int k =p; // 도움배열의 index

int tmp[data.length()]; // 도움을 줄 추가배열을 만듦

while(i<=q && j<=r) {

if (data[i] <= data[j]) {

tmp[k++] = data[i++];

}

else {

tmp[k++]=data[j++]; // k는 항상 증가, i,j는 비교해서 작을때만 증가

}

}

while ( i <= q)

tmp[k++]=data[i++]; // 남은 것들 추가로 가져오는 과정

while (j <= r)

tmp[k++]=data[j++]; // 이 2개의 while문 중 1개만 사실 실행됨

for (int i = p ; i<=r ; i++)

data[i] =tmp[i] // 원래 데이터에 도움배열 정보를 넣는 과정

}

Merge Sort의 유일한 단점:추가배열을 잡아둬야한다는 것

시간복잡도:

T(n)

=0 (n=1일때)

=T(ceil(n/2)) + T(floor(n/2)) + n (n>=2) // n은 merge하는데 비교연산의 최대횟수가 n, 사실 ceil, floor는 필요없음, n->inf일때 고려하므로

=O(n*logn))

Quick Sort

마찬가지로 Divide and Conquer

다만, divide가 다름

pivot 선택하기

어떤 값을 pivot을 선택할 지는 나중에 배우기

현재 강의 내용에선 배열의 가장 오른쪽 값을 pivot으로 선택

알고리즘 개요

1. "pivot보다 작은 것, pivot, pivot보다 큰 것"으로 분할(분할하면서 좌, 우가 정렬하지는 않음)

2. pivot 기준으로 나뉘어진 좌, 우의 부분들에 다시 recursion으로 분할

3. "합병"단계가 필요가 없다.

알고리즘

quicksort(A[], p, r) { // A[p,...,r]을 정렬한다.

if (p<r) then {

q=partition(A, p, r);

quicksort(A, p, q-1);

quicksort(A, q+1, r);

}

}

partition(A[], p. r) {

x = A[r]; // pivot넣기

i = p-1 // 작은 애들 index

j = p // 큰 애들 index

for j to r-1 {

if A[j]<=x {

i++;

exchange A[i] and A[j];

}

}

exchange A[i+1] and A[r]

return i+1;

(배열 A[p,...,r]의 원소들을 A[r]을 기준으로 양쪽으로 재배치하고 A[r]이 자리한 위치를 return한다.)

(작/큰/x로 만든 다음, 큰애들 중 가장 왼쪽인 애를 x와 exchange할 것이다.)

(작은 애들 중 마지막 값 index i, 검사하려는 값 index j, A[j]와 pivot과 비교하여 A[j]가 x보다 같거나 크면 그냥 j++(다음꺼 검사), A[j]가 x보다 작으면 A[j]와 A[i+1]과 exchange하고 i++ 그리고 j++(다음꺼 검사))

(제일 마지막에 i+1과 pivot의 exchange, 그리고 i+1을 return)

}

복잡도

partition 한번 하는데 걸리는 시간은 O(n) // 정확히는 n-1번의 비교연산

T(n)

최악의 경우는 아이러니하게, pivot이 가장 큰 값일 때, 즉 이미 정렬된 배열인 경우이다. (pivot을 항상 가장 오른쪽 값을 갖는 상황이라 한다면)

T(n) 

= T(0) + T(n-1) + Θ(n-1) = T(n-1) + Θ(n-1)

= T(n-2) + Θ(n-1) + Θ(n-2)

...

=Θ(1) + Θ(2) + ... + Θ(n-1) 

= Θ(n^2)

항상 절반으로 분할되는 경우(최선의 경우)

T(n)

=2*T(n/2) + Θ(n-1)

...

=Θ(n*logn)

항상 한쪽이 적어도 1/9이상이 되도록 분할된다면(편의상 항상 1:9일때를 고려)

T(n)

= T(n/10) + T(9n/10) + Θ(n-1) 

...

= k * Θ(n) = Θ(n*logn)

(이때 (9/10)^k * n = 1, k=log_(10/9) n )

(따라서 분할이 아주 극단적으로 일어나지 않는다면, Quick Sort는 빠르다.)

평균 시간 복잡도

A(n) = sum over all input I of size n P(I)*T(I), where P(I):I가 일어날 확률, T(I):I의 시간복잡도

P(I)를 구하기가 힘드므로 가정을 한다. P(I)=1/n!이라 가정(즉, 서로 다른 값을 갖는 배열만 고려)

A(n) 

= 2/n * sum from i=0 to i=n-1 {A(i) + Θ(n)} // pivot의 rank가 1,2,.i..,n 일 확률이 각각이 모두 1/n, 그때마다 A(i-1) + A(n-i) + Θ(n)

= Θ(n*logn)

pivot 선택하는 기준

첫번째 값이나 마지막 값을 pivot으로 선택

이미 정렬된 데이터 혹은 거꾸로 정렬된 데이터가 최악의 경우

현실의 데이터는 랜덤하지 않으므로 정렬/거꾸로 정렬 된 데이터가 입력으로 들어올 가능성은 매우 높음

따라서 좋은 방법이라고 할 수 없음

"Median of Three"

첫번째 값과 마지막 값, 그리고 가운데 값 중에서 중간값(median)을 pivot으로 선택

최악의 경우 시간 복잡도가 달라지지는 않음, but 현실적인 방법이긴 함

Randomized Quick Sort

pivot을 랜덤하게 선택

no worst case instance(즉 최악의 입력은 없음), but worst case execution(즉 최악의 실행은 가능함)

(다른 방법들은 최악의 입력이 존재하지만, 이 경우는 최악의 입력이 아니라 최악의 주사위(랜덤)에 의해 최악의 실행이 가능)

평균 시간복잡도 Θ(n*logn)












그래프

개체(object)들 간의 이진관계(binary relation)를 표현하는데 사용한다.

vertex의 개수를 n, edge의 개수를 m

undirected graph, directed graph, weighted graph 등이 있다.

별말없으면 simple undirected graph를 다룬다,

그래프의 표현

undirected simple의 경우

인접행렬(Adjacency Matrix)

저장 공간:Ο(n^2)

어떤 v에 인접한 모든 노드 찾기:Ο(n)

어떤 에지 (u,v)가 존재하는지 검사:Ο(1)

Symmetric Matrix가 된다.

인접리스트(Adjacency List)

V집합을 표현하는 하나의 배열과 각 v마다 인접한 정점들의 연결 리스트

노드개수:2m(edge 하나당 2번세니까)

저장 공간:Ο(n+m)

어떤 노트 v에 인접한 모든 노드 찾기:O(d(v)) // d(v)란 degree of v 라 하자

어떤 에지 (u,v)가 존재하는 지 검사:Ο(d(u)) // u에 해당하는 배열에 있는 리스트를 다 읽어봐야 하므로

directed의 경우

인접행렬

비대칭행렬

인접리스트

m개의 노드를 가짐

weighted의 경우

인접행렬

에지의 존재를 나타내는 값으로 1대신 에지의 가중치를 저장

에지가 없을 때 혹은 대각선

특별히 정해진 규칙은 없으며, 그래프와 가중치가 의미하는 바에 따라서

예:가중치가 거리 혹은 비용을 의미하는 경우라면 에지가 없으면 inf, 대각선은 0

예:가중치가 용량을 의미한다면 에지가 없을 때 0, 대각선은 inf

그래프의 순회(traversal)

모든 v를 방문하는 작업

대표적인 방법

BFS(Breadth-First search, 너비우선순회)

L_0 = {v_0} //출발노드 선택

L_1 = L_0의 모든 이웃 노드들

L_2 = L_1의 이웃들 중에서 L_0에 속하지 않는 노드들

...

L_i = L_(i-1)의 이웃들 중에서 L_(i-2)에 속하지 않는 노드들

(순회 그래프에서의 BFS, 6분40초부터 다시보기)

DFS(Depth-First search, 깊이우선순회)
































































'컴퓨터과학 > 기본' 카테고리의 다른 글

각종 명령어 모음  (0) 2018.08.10

프로그래밍 기법

-compile 기법(통 번역후 실행)

-interpret 기법(바로바로 번역해서 실행, 실행파일을 만들지 않는다.)

-Hybrid 기법(중간코드 사용)


객체지향언어(Object Oriented Language)란?

-클래스, 상속(상위개념의 정의를 따름), 캡슐화(incapsulation), 다형성 등 객체지향의 개념이 잘 적용된 언어

-예전에는 동사의 개념, 객체지향은 명사의 개념, 명사의 성향을 반영하여 실행

(객체지향은 프로그램 규모가 커질 시 유지보수가 쉽다. 하지만 같은 수준(level)의 프로그래머라면 객체지향이 아닌게 훨씬 프로그램의 속도가 빠르나, 하드웨어의 발전으로 그리 큰 차이가 아니므로 객체지향의 사용 추세가 늘고 있다.)


자바언어의 특징

-운영체제에 독립적이다. 윈도든 리눅스든 가능

-JVM을 사용하여 한번 작성된 프로그램은 어떠한 운영체제에서도 실행이 가능

-자바의 모든 개발환경은 open source


자바 프로그램은 사용 형태에 따라 구분

-자바 응용 프로그램:일반 응용 프로그램

-자바 애플릿:웹 검색기 상에서 작동하는 프로그램

-자바 서블릿:웹 환경에서 실행되는 자바 프로그램

-JSP(Java Server Page):서블릿과 비슷하나 HTML 속에 자바 코드를 삽입하여 사용

-Java Beans:자바로 작성된 프로그램(컴포넌트)을 부품처럼 사용하여 프로그래밍 하는 방법


자바 프로그램 실행방법

-운영체제(32bit, 64bit에 맞는 JDK(Java Development Kit)를 받아 설치한다.

-IDE(Integrated Development Environment)로서 이클립스 같은 것을 받아 설치한다.(운영체제에 맞는)


이클립스의 기본 구조

-window->show view에서 뷰 선택가능, 위치이동 가능

-view의 종류

package explorer(프로젝트 중심으로 자바 패키지와 클래스 관리), 

Navigator(package explorer와 비슷하나 실제 디렉터리의 구조를 보여주는 것), 

Outline(편집기에서 편집 중인 프로그램의 트리구조를 보여주는 뷰), 

Console(자바 프로그램에서 출력되는 메시지를 보여주는 뷰), 

Problems(소스에 문제가 있는 부분을 목록으로 보여주는 뷰), 

Javadoc(자바 API문서를 보여주는 뷰이다. 자바 소스가 포함되어 있다면 사용하는 클래스 라이브러리의 설명 문서를 참조할 수 있음)


이클립스의 프로그램 작성 순서

-file->new->project-> 프로젝트명 입력

-file->new->class-> class명 입력, public static void main을 항상 선택하기

-프로그램 실행시 매개변수가 없는 경우 run->run

-프로그램 실행시 매개변수가 있는 경우 run->run configurations을 이용


프로그래밍 오류의 종류

-구분(syntax)오류, compiler가 번역할 때 오류를 잡아줌

(타이핑 오류, 예약어의 잘못 사용, 닫는 괄호 생략, 구분 종료 기호(;) 생략, 구문 구조 오류 등)

-실행시간(runtime)오류, 말은 맞는데 0으로 나누라거나 등의 불가능한 것을 지시할 때, compiler가 잡아줌

(0으로 나누는 것, 배열의 첨자 범위를 벗어난 접근, 실행시 입력받은 데이터의 오류 등)

-논리(logic)오류, 애초에 프로그램 작성한 사람이 논리적인 오류를 범함, 즉 algorithm이 틀린 것


몇가지 용어들

식별자, 예약어, 클래스, 멤버변수, 변수, 상수, 자료형, 생성자, 메소드, 


식별자(identifier, 변수, 상수, 메소드, 배열, 문자열, 사용자가 정의하는 클래스나 메소드 등을 구분할 수 있는 "이름"을 의미)

식별자의 사용 원칙

문자, 숫자, 특수문자(_,$)가능

첫문자는 숫자가 불가능

예약어를 식별자로 불가능

true,false,null은 식별자로 불가능

길이제한없음

대소문자 구분함

식별자 사용의 관례

클래스 이름은 첫문자를 대문자로하고 space를 사용하지 않고 명사구는 붙여서 짓되 각 명사의 첫문자 대문자(ex:JavaTest1)

메소드, 변수, 배열, 문자열의 이름, 모두 붙여서, 명사의 첫문자는 대문자, 단 가장 첫문자는 소문자(ex:nameAddress)

상수, 모두 대문자로 사용, 만약 space처럼 띄운 느낌이 필요하면 _를 사용한다.(ex:MAX_NUMBER)


예약어(Reserved word)

미리 정해진 함수같은 것들이다.


코드내에 주석문 넣는 방법

// 주석문 : // 표시부터 그 줄의 끝까지 위치한 모든 문자를 주석으로 간주한다.

/* 주석문 */ : 줄 수와 상관없이 “/*” 시작과 “*/” 끝 사이에 있는 모든 문자를 주석으로 간주한다. 여러 줄의 주석이 가능하므로 긴 설명을 하거나 많은 양의 소스를 주석으로 처리하고 싶을 때 이용한다.

/** 주석문 */ : 줄 수와 상관없이 “/**” 시작과 “*/” 끝 사이에 있는 모든 문자를 주석으로 간주한다. 클래스의 선언부, 멤버, 생성자 등 클래스 인터페이스 시작 부분에 사용해야 한다. 이 주석은 소스를 라이브러리로 만들 때 공식 문서용으로 뽑아 사용할 수 있다. javadoc 시스템을 사용하여 API 문서나 도움말 등에 이용된다.


자료형(Data type)(주의:Java에서는 String은 자료형이 아니라 클래스이다.)

기본자료형(primitive type)

-정수형:byte(8비트), short(16비트), int(32비트), long(64비트)

-최상위비트(most significant bit, 줄여서 MSB)를 부호결정비트로 사용한다(0은+, 1은 -)

-묵시적인 정수형은 모두 int형

-연산 후 주어진 할당된 비트수보다 큰 값이 되면 오바된 앞자리들을 버린다.

-2의 보수법을 따른다.

장점:

-MSB가 0/1 = 양/음 성질 유지

-음수를 더하는 방식으로 뺄셈을 할 수 있다.

-음수의 비교연산에서 발생하는 모순이 해결된다.

-0이 두개나 존재하는 모순이 해결된다(1의 보수법 사용시 문제점)

-덧셈과 뺄셈을 구현할 때 캐리(가용비트수보다 한자리 커지는 현상)를 처리하지 않아도 된다.(1의 보수법 사용시 문제점)

 (1의 보수에서는 캐리발생시 LSB에 +1해줘서 해결한다. 이러면 매 계산마다 캐리가 발생하는지도 체크해야되서 효율성 떨어짐)

ex:

01000100=68

68의 덧셈 역원을 얻기 위해 0<->1을 바꿔서 10111011을 얻은 다음에 00000001을 더한다. 

10111100이 나오고 이것이 (-68)이다. (10111100을 MSB가 1이니 -, 나머지 1들을 2^n의 계수로보고 십진수로 바꾸면 -60이 나오는데 2의 보수법이란 이것을 -60이 아닌 -68로 보자고 약속하는 개념이다.)

-실수형:float(32비트), double(64비트)

-float의 MSB는 부호, 이후 8비트는 지수부분(exponent part), 나머지는 가수부분(mantissa, 23비트)

-double의 MSB는 부호, 이후 11비트는 지수부분(exponent part), 나머지는 가수부분(mantissa, 52비트)

-논리형:boolean(1비트로 가능해보이지만, 8비트에 할당함, 그 이유는 컴퓨터에서 꺼낼 수 있는 주소 단위가 8비트=1바이트 이므로)

-문자형:char(16비트의 유니코드로 문자를 나타냄, 원래는 1바이트로 나타냈으나, 각 나라의 언어가 많아짐에 따라 2바이트됨)

ex: 가:AC00, 각:AC01, A:0041, C:0042

ex: '1' + 10하면 59가 나온다.('1'은 char이고 char+int하면 char가 ascii코드로 바껴서 계산됨)

ex: "1"+ 10하면 110이 나온다.("1"은 string type이고 string+int하면 int를 string type로 바껴서 string의 나열이 출력된다.)

-특수문자 표현 방법

backspace는 \b

tab은 \t

linefeed(줄바꿈)는 \n

formfeed(커서 앞으로 이동)는 \f

carriage return은 \r

backslash는 \\

single quote는 \'

double quote는 \"

-형변환(casting)

int a = 259;          //a = 259

byte b = (byte) a;  //b = 3

위와 같이 길이가 더 긴 것을 짧은 자료형으로 바꾸거나, 짧은 자료형을 긴 자료형으로 바꾸기 위해 (byte) 등을 추가하여 할 수 있다. 이를 casting이라 한다.

더 긴 것을 짧은 것으로 casting할 때는 하위 비트만을 할당한다. 반대로도 짧은 것을 긴 것에 할당 시 긴 것의 하위 비트에 할당시킨다.

참조자료형(reference type)

-기본 자료형(primitive type)의 경우는 지정된 위치에 값이 저장되어 있는 반면, 참조 자료형(reference type)은 지정된 위치에 실제 값이 있는 곳의 주소가 저장된다. 따라서 실제의 어떤 값을 가져올 때는 두번의 접근이 필요하므로 기본 자료형에 비해 효율성이 떨어질 수 있다.

Ex)Integer b = new Integer(10); //Integer라는 class의 새로운 b라는 색체를 만든 것

변수(variable)과 상수(constant)

값이 저장된 main memory의 "위치"에 주어진 이름이다. CPU의 register로 보내는 역할을 하며, 자료형도 지정해줘야 한다. 자료형만 사용자가 지정하면 memory위치나 length등은 자동으로 설정된다.

값이 저장된 main memory의 위치이지만 그 값이 일정하게 지정한 것이 상수


연산자(operator)

단항

++a:a값을 계산하고 a를 1증가

a++:a값을 1증가하고 계산

이항

a/b:몫

a%b:나머지

삼항

ratio = count > 0 && count <= 100 ? count/100 : 0;// count란 변수값이 0초과에 100이하면 ratio에 count/100을 넣고 아니면 0을 넣어라.

관계연산자(>,>=,<,<=,==,!=, instanceof)

객체 instanceof 클래스, 객체가 클래스인지 확인하는 연산자

ex:

class A{}

class B extends A{}

class instanceofEx01 {


public static void main(String[] args) { 

  A a = new A();

  B b = new B();

  System.out.println("a instanceof A : " + (a instanceof A));

  System.out.println("b instanceof A : " + (b instanceof A));

  System.out.println("a instanceof B : " + (a instanceof B));

  System.out.println("b instanceof B : " + (b instanceof B)); 

  }

}


<결과>

a instanceof A : true

b instanceof A : true

a instanceof B : false

b instanceof B : true

논리연산자(&&, ||, !)

x&&y:x와 y가 모두 true일 때 true를 반환

x||y:x가 true이면 true를 반환, x가 false이면 y를 평가하고 y가 ture이면 true를 반환, x와 y모두 false이면 false를 반환(x가 true이면 y를 평가안한다는 점 주의)

!x:x의 negation

비트연산자(비트 단위로 연산할 수 있는 연산자, 정수형의 데이터에만 적용이 가능하다)

op1 >> op2 : op1을 오른쪽으로 시프트(shift)

op1 << op2 : op1을 왼쪽으로 shift

op1 >>> op2 : op1을 op2만큼 오른쪽으로 shift하면서 왼쪽에는 항상 부호에 무관하게 0이 채워짐

op1 & op2 : 비트 단위의 논리곱(&) ex)1&1=1, 1&0=0

op1 | op2 : 비트 단위의 논리합(|) ex)1|1=1

op1 ^ op2 : 비트 단위의 XOR ex)1^1=0, 1^0=1, 0^0=0

~op : 비트 단위의 보수

쉬프트연산자

비트 단위로 이동하는 연산자

정수형에만 사용 가능

정수에 해당하는 비트 값을 좌, 우로 이동시키면 곱셈 또는 나눗셈의 결과를 얻을 수 있다.

산술적 쉬프트

숫자 << 자릿수 : 숫자*(2*자릿수), 

ex) 4 << 1 = 8 //4의 뒷부분은 0으로 채워짐

ex) 010 << 1 = 16 // 010은 8진법으로 봐서 8로본다. 따라서  16이 나온다(octal)

ex) 16 >> 1 = 8 // 가장 앞 부호비트는 그대로두고 0이 추가됨

ex) -16 >> 1 = -8 //

ex) -16 >>> 28 = 15 // int 16의 비트표현인 000...10000, 2의 보수법에 따라 111...01111이고 이것을 오른쪽으로 28칸 옮겼으므로 000...0001111, 이렇게 3개쓰면 반드시 왼쪽에 0으로만 채워짐(원래 음수였더라도)

배정 연산자

i=8+2; // CPU의 register에서 8+2 계산한 값이 저장되어있는데, 그걸 i라는 변수의 메모리 위치에 배정

j=i+20; // i의 값을 cpu에서 가져와서 연산하고 register에 저장한 다음에 j라는 변수의 메모리 위치에 배정

30=10+20; // 배정문의 LHS에 상수가 올 수 없다.

단축 배정 연산자

i = i+8; 이거 대신에 i += 8 가능

op1 <<= op2; //op1에다가 <<op2연산한 것을 다시 op1에 넣는 작업

연산자의 우선순위

1. (), []

2. ++, --, ~(혹은 -), !

3. *, /, %

4. +, -

5. >>, >>>, <<<

6. >, >=, <, <=

7. ==, !=,

8. &

9. ^(XOR)

10. |(논리합)

11. &&

12. ||

13. ? :

14. =

a-b-c은 왼쪽부터 계산한다.(같은 우선순위내에서는 왼쪽부터)

(하지만 배정 연산은 오른쪽부터 계산한다. a = b = c = 1(c=1부터 함, b=c, a=b 이렇게 됨)

ex)

(4+5*2/2)=9

(-5 - -2 * 8 / (4 - 2) * 3)

우선순위

(4-2) 

-5

-2

-2*8

이후 */*은 왼쪽순으로

답은 19

문자열(String)(char은 문자형으로 기본 자료형에 속하고, 문자열(String)은 클래스의 객체로서 구현됨)

String str1 = "아! 대한민국!"; //자바의 String은 객체로 표현되지만 일반 변수처럼 사용이 가능하다.

String str2 = "Korea";

String str3;

String str4 = new String("Korea");

String str5 = str2 + str1; //str5는 결국 Korea 아! 대한민국 이란 String이 된다.

매개변수(Argument)

매개변수로 입력된 값은 문자열(String)의 배열로서 저장된다.

선택문(if문, if-else문, if-else if-else문, nested if문, switch문)

ex)(nested if문 사용시 주의)

int score = 89;

if ( score > 60)

if ( score > 70)

if ( score > 80)

if ( score > 90)

System.out.println("A학점");

else

System.out.println("학점취득 실패"); 

(아무것도 안뜬다. 왜냐하면 이 else는 첫번째 if문의 else에 걸린다. 마지막 if문에 걸리는게 아니다. 따라서 if문을 쓸 때 중괄호를 생략하지 말자.)


ex)(Swtich문)

int num = 2;

switch (num) //정수 혹은 string만을 argument로 받을 수 있음

{

case 1 :

System.out.println("num의 값은 1입니다");

break;

case 2 :

System.out.println("num의 값은 2입니다");

break; // 만약 break;를 지운다면, 그 이하 default도 실행이 되니까 조심

default : // default를 지정안하면 case가 없는 경우 그냥 끝남, default를 지정하면 없는 case일 때 실행함

System.out.println("num의 값은 1도 2도 아닙니다");

break;

}

ex)(switch문, string예제)

String str = "A";

        switch(str){

        case "A": 

            System.out.println("1");

        case "B":

            System.out.println("2");

        case "C" :

            System.out.println("3");

        default :

            System.out.println("그 외의 숫자");

    }

반복문(while문, do-while문, for문)

do-while문은 조건을 나중에 검사함으로써 반복될 문장이 최소 한번은 실행, 메뉴를 먼저 print한 다음에 input받고 while 돌리는 형태에 적합

for문의 기초 문법

for(초기식; 조건식; 증감식)
 {

반복될 문장들;

}

for문의 처리 순서:초기식->조건식->(참이면)반복문장->증감식->조건식->...

ex)(for문 내의 지역변수 or 글로벌 변수 차이)

int i, sum = 0; // i가 글로벌?변수라서 for문밖에서도 사용 가능

for ( i = 1 ; i <= 10 ; i += 1)

{

sum += i;

}

System.out.println("1부터 " + i + "까지의 합 = " + sum); // 이 경우 i=11나와서 문제임


ex)

int sum = 0;

for ( int i = 1 ; i <= 10 ; i += 1)

sum += i;

System.out.println("1부터 " + i + "까지의 합 = " + sum);

(이 경우 i는 지역(local)변수로서 사용하고 사라지기 때문에 System... 이 줄에서 문제가 발생함)


ex)

int a, b ;

for ( a = 1, b = 10 ; a < b ; a++, b--)

{

System.out.println("a = " + a);

System.out.println("b = " + b);

}

(초기식과 증감식에 콤마로 분리하여 두개 이상 넣을 수 있음)

(초기식, 조건식, 증감식 모두 생략할 수도 있다(null statement), 조건식을 생략하면 항상 True여서 loop됨)

관련 문법

break문

가장 가까운 반복문을 빠져나간다.(여러개의 반복문 사용시 가장 안쪽 반복문을 빠져나감)

continue문

가장 가까운 반복문의 시작으로 간다.(여러개의 반복문 사용시 가장 안쪽 반복문을 빠져나감)

while, do-while은 조건(평가)식으로 이동

for문은 증감부분으로 이동

return문

메소드를 호출한 지점에 값을 반환하며(void였다면 값 반환 안하고) 메소드를 종료한다.

반환 and 종료 (둘의 의미를 가짐)


배열(Array)

기본 문법:자료형 [][] name = new 자료형[size]; 

ex)(array의 선언과 생성 동시에 하는법)

int [][] id_and_score = new int[5][2];

String add_and_name [][] = new String [10][10];

int [][] score = new int [3][];

score[0] = new int[2];

score[1] = new int[3];

score[2] = new int[4];

(마지막 예제는, 정사각형모양이 아닌, 각 행의 요소의 개수가 다르게 생성가능)

(이후 score[0][1] 이렇게 접근이 가능)


ex)

int[] id = new int [5];

int[0] = 22311123;

int[1] = 12313222;

(배열의 생성과 동시에 초기화도 가능하다.)

혹은

int id [] = { 22311123, 12313222, ... }; // {}의 콤마 개수로 id의 size결정됨


ex)2차원 Array의 생성과 동시에 초기화

int [][] id_score = { {70,80,90}, {98, 69, 49, 97},, ...}

그럼 {70,80,90}은 첫 행(row)의 정보이다.

{98, ~~}은 2행의 정보이고, 따라서 톱니형 array일 것이다.


배열.length

배열의 size가 나온다.

ex)(다차원 배열의 length)

int id_score [][] = { {70, 80, 90}, {98, 23, 43, 54}};

System.out.println("id_score의 배열크기는" + id_score.length); // 행의 개수 2가 나옴

System.out.println("id_score의 배열크기는" + id_score[0].length); // 0행의 열개수 3이 나옴

System.out.println("id_score의 배열크기는" + id_score[1].length); // 1행의 열개수 4가 나옴

(1차월 배열은 그냥 열의 개수가 나옴)


객체지향 이론과 역사

컴퓨터를 통하여 실세계와 같은 환경을 흉내(simulation)내기 위해 발전한 이론

실세계의 모든 사물들은 "속성(attribute)+기능(method)"로 구성

실세계의 사물들은 각기 다른 속성과 기능을 가지고 상호작용하여 살아간다.

객체지향 이론은 1960년대 클래스(class), 상속(inheritance), 캡슐화(encapsulation), 다형성(polymorphism)등의 개념을 중심으로 발전


객체지향과 대비되는 개념으로 절차지향(Procedural-oriented)가 있다.

절차지향이란 프로그램의 기본 단위가 절차 또는 함수로 정의되며, 절차 또는 함수에 의해 속성(데이터)들이 공유되는 형태

(절차지향은 동사위주, 객체지향은 주어(명사)+동사 함께)


객체지향의 장점

문제를 쉽고 자연스럽게 프로그램화(모델링)할 수 있다.

쉬운 프로그램의 개발로 인한 생산성 향상 시킬 수 있다.

프로그램 모듈을 재사용할 수 있다.


클래스(Class)

객체를 생성하는 template이다.

(롤의 챔피언들을 class 사용없이 한다고 하면, String Teemoname = "Teemo"; int Teemopower = 80; ,... 이짓을 챔피언 마다 해야한다. 각 챔피언들 마다 갖는 속성이 있다. 그런것들을 모아서 class로 만들어서 각 챔피언마다 class안에서 정의했던 속성, 메소드 등을 사용하겠다는 생각)

클래스로부터 객체를 생성하는 과정을 실체화(instantiation)라고 한다.

객체를 instance 혹은 object라 한다.(둘의 차이를 구글링해봤더니 다른데에 신경쓰라는 답변이 추천수가 제일 많은...)

클래스를 구성하는 것은 "클래스헤더+속성(attribute)+생성자(Constructor)+기능(method)"이다.

클래스 선언하는 부분을 클래스 헤더라 한다.

기본문법:"[public/디폴트/final/abstract] class 클래스이름 extends 상위클래스이름 {~}"

(혹은 extends 상위클래스, implements 인터페이스 등이 뒤에 추가될 수도 있다.)

public:모든 클래스로부터 접근이 가능한 class(즉 객체 생성가능)

디폴트:같은 패키지내의 클래스에서만 접근 가능(즉 객체 생성가능)

final:subclass를 가질 수 없는 클래스, 정보보호측면에서 유리

abstract:객체를 생성할 수 없는 클래스

속성(attribute)

속성의 구성:

멤버변수:메소드 밖에서 정의된 변수(접근을 "객체이름(객체참조변수).멤버변수", 단, 클래스 변수의 경우는 "클래스이름.클래스변수" 로 사용)

기본문법:"[private/디폴트/protected/public][static/final/디폴트] type name"

객체변수:객체가 가질 수 있는 속성을 표현

static/final 의 한정자를 붙이지 않으면(디폴트) 객체변수이다.

local variable의 개념

객체속성변수:객체가 가질 수 있는 속성을 나타내는 값으로 기본 자료형의 값들로 구성값을 가진다.

ex) int vol; int width;

객체참조변수:선언된 객체를 지칭(참조)하는 변수, 사용자는 객체를 선언한 후 생성한 다음 객체참조변수를 통해 객체의 멤버들에 접근가능, 객체에 대한 참조 즉 주소를 가진다.

ex)Box mybox1; String boxname; //mybox1의 선언으로 memory상에 mybox1의 null 상태로 위치만 갖는다. 

ex)Box mybox1 = new Box(10,20,30); // 객체의 선언과 객체참조변수, 객체의 생성까지 한번에, 생성까지하면 각 객체변수(width, height, depth등의 시작점을 메모리 번지값으로 갖는다.)

클래스변수

static을 사용하여 선언

객체를 생성하지 않아도 사용이 가능하다.(클래스가 메모리에 올라갈 때 자동적으로 생성되므로)

global variable의 개념

같은 클래스로부터 생성된 모든 객체들이 하나의 클래스 변수를 공유

즉 클래스변수는 하나의 같은 클래스로부터 생성된 객체들 사이의 통신이나 객체들 사이의 공통된 속성을 표현하는데 사용

따라서 일반변수와 달리 객체이름을 통해 접근 불가, 클래스이름을 통해서 접근한다.

(예를 들면 Park씨집안의 class를 만든다하자. 그럼 last name은 모두 Park일 것이다. 이런 경우 static String lastname = "Park" 을 사용하여 lastname은 Park을 한번만 할당하여 메모리 할당을 한번만 하는 이점을 얻을 수 있다. 만약 그냥 String lastname = "Park"을 하면 class를 통해 객체를 만들 때 마다 객체변수 lastname이 메모리에 객체 마다 할당되어서 메모리를 많이 쓰게 된다.)

(혹은 클래스내에 정의된 메소드를 호출할 때 마다 클래스 내에 있는 static 클래스 변수를 ++하게 해주면 실행횟수를 count하게 된다.)

Ex)(count할 때 쓰는 클래스 변수)

public class Counter  {

    static int count = 0;

    Counter() {

        this.count++;

        System.out.println(this.count);

    }


public static void main(String[] args) {

Counter c1 = new Counter();

      Counter c2 = new Counter();

 }

}

(main에서 Counter 클래스의 객체를 생성할 때마다 count는 1씩 증가한다. 만약에 static int count가 아닌 int count였다면 각 객체 c1마다 count가 생성되므로 각 객체마다 count가 있기 때문에 정말 원하는 count를 할 수가 없다.)

종단변수

final을 사용하여 선언

변할 수 없는 상수 값을 가짐

final이 붙은 변수는 단 한번 초기화 할 수 있으며 그 이후에는 그 값을 변경할 수 없음

상수 변수를 관례상 대문자로 표현하듯이, 종단변수는 대문자로 나타낼 떄가 많다.

접근한정사의 사용

private:클래스 정의하는 내에서만 사용가능

디폴트:같은 패키지내에서만 사용가능

protected:같은 패키지 or subclass에서만 사용가능(다른 패키지지만 subclass인 것은 가능하다는 것)

public:외부 객체에서 마음대로 접근가능

(모든 멤버변수는 그 클래스 전체에서는 유효하다.)

(class A와 다른 패키지에서 만든 class B, B는 A의 subclass도 아닌 경우에 B내부에서 A o = new A();하면 A내부에서 public으로 선언한 멤버변수만 접근가능)

(class A와 다른 패키지에서 만든 class C, C는 A의 subclass인 경우 B내부에서 A o = new A();하면 A내부에서 public이랑 protected로 선언한 멤버변수에 접근가능)

(class A와 같은 패키지에서 만든 class C, C는 A의 subclass이거나 아닌 경우에도 C내부에서 A o = new A();하면 A내부에서 public, protected, 디폴트로 선언한 멤머변수에 접근가능)

생성자(Constructor, 메소드의 사용법을 따르기도하고 생성자메소드라 부르기도 한다.)

모든 클래스는 객체를 생성할 때(instantiation) 생성자를 사용한다.

매개변수가 없는 생성자를 기본 생성자라 한다.

생성자를 작성하지 않는다면 컴파일 할 때 매개변수가 없는 기본생성자가 자동으로 만들어진다.

(public class이름() {} 이 자동으로 들어가서 컴파일이 됨)

생성자는 클래스 이름과 동일하게 사용한다. ex)

생성자를 하나라도 프로그래머가 작성하였다면 기본생성자는 만들어지지 않는다.

생성자는 returntype이 없다.

매개변수가 다른 생성자를 여러개 만드는 오버로딩이 가능하다.

this와 super로 생성자를 호출할 수 있다.

생성자의 역할:

생성자가 하는 일은 객체가 될 때 필드를 초기화 하는 역할을 수행한다.(클래스로부터 객체를 만들때마다 매개변수를 받아와야하는 경우일 때 사용)

기능(method):클래스 안에서 정의된 함수

기본문법:"[private/디폴트/protected/public][static/final/abstract/synchronized] returntype name([매개변수들])"

(혹은 throws 예외클래스 가 추가될 수도 있다.)

접근한정자(private/디폴트/protected/public)은 멤버변수에서의 사용과 똑같다.

클래스메소드

static을 사용한다.

객체변수를 사용하지 않는 메소드인 경우 static을 붙인다. 그럼 메소드 호출시간이 짧아지기때문에 효율적이다.

클래스메소드 안에서는 클래스 변수만을 사용할 수 있다. 그러다보니 수학함수들에 많이 사용 된다.

호출방법:클래스이름.메소드명(매개변수), 즉 객체를 통한 접근은 불가능하다.

종단메소드

final을 사용한다.

subclass에서 overriding이 될 수 없다.

추상메소드

abstract을 사용한다.

애초에 클래스가 추상클래스여야 추상클래스 내에서 선언이 가능하다.

선언부분만 가지고 몸체부분은 가질 수 없다.

몸체부분은 subclass에서 overriding

synchronized메소드

thread를 동기화 할 수 있는 기법을 제공하기 위해 사용

접근한정자에 대해

public:소속된 클래스가 접근 가능하면 항상 접근 가능

private:소속된 클래스 내에서만 사용가능, 클래스 외부에서 접근하려면 오류가 발생

protected:메소드가 소속된 클래스의 하위클래스와 같은 패키지에 있는 다른 클래스에서만 사용가능

메소드의 name은 소문자로 시작하는 것이 관례

메소드 매개변수:메소드내에서만 사용가능한 변수, 메소드 호출시 값이나 주소가 전달되는 형식매개변수로서 메소드 내에서만 유효하다.

객체이름.메소드(매개변수) 형태로 객체에 일을 시킬 수 있고, 일을 시키는 행위를 메시지(message)라 한다.(클래스메소드는 호출방법이 다름)

해당 클래스에서 메소드를 찾아 수행하되, 해당 클래스에 없다면 상위클래스에서 메소드를 찾는다. 이후 최상위 클래스에서도 없으면 오류 발생

클래스로부터 생성된 객체는 속성만 가지고 메모리에 생성된다.

메소드는 클래스(클래스 메모리 영역)에 저장되어 객체들이 공유한다. 

returntype은 void가 아니면 반드시 메소드 내에 return문 사용하여서 지정된 type을 반환해야만 한다. 이대 기본 자료형, 참조 자료형 모두 returntype가능

지역변수(혹은 형식 매개변수)란 클래스 내에서 메소드를 정의할 때 메소드의 몸체에서 정의된 변수이다. 메소드가 실행이 완료되면 사라진다.

변수의 유효범위(scope로) 변수를 분류하면 멤버변수>메소드 매개변수와 메소드 내의 지역변수>예외 처리기 매개변수

예외 처리기 매개변수(exception handler parameter):예외 처리를 위한 매개변수

메소드 argument passing

call-by-value로, 실 매개변수의 값만을 형식 매개변수에 복사해주는 방식이다.

매개변수가 기본 자료형은 실제값을 복사, 참조 자료형은 참조 자료형에 있던 주소만을 복사해서 형식 매개변수에 전달




상속(Inheritance)

기존 클래스의 모든 속성과 기능을 상속받고, 더 필요한 속성과 메소드를 추가하여 새로운 클래스를 생성하는 개념

객체지향의 장점인 모듈의 재사용과 코드의 간결성을 제공하는 중요한 특성

모든 자바 프로그램은 상위 클래스를 가진다.(상위 클래스를 지정하지 않으면 Object 클래스가 묵시적인 상위 클래스)

상속의 형식



캡슐화(encapsulation)

객체가 동작하는 기능만 알고 그 객체를 사용하게 하는 개념

객체의 자세한 동작 방법은 비밀

비밀을 알려고 하면 오류 발생

이를 통해 정보 은폐(information hiding)가능

캡슐화의 장점:

객체에 포함된 정보의 손상과 오용을 막는다

객체 내부의 조작 방법이 바뀌어도 사용방법은 바뀌지 않는다.

데이터가 바뀌어도 다른 객체에 영향을 주지 않아 독립성이 유지

처리된 결과만 사용하므로 객체의 이식성이 좋다.

객체를 부품화 할 수 있어 새로운 시스템의 구성에 부품처럼 사용할 수 있다.

다형성(Polymorphism)

다형성은 서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답하는 기능을 의미한다.

오버로딩:동일한 이름의 메소드(생성자 등)을 만드는 것이다. 메소드(생성자)를 사용시 다양한 매개변수를 받기 위함이다. 동일한 기능에 따가 다양한 매소드를 만들면 복잡하고 관리하기가 어렵기 때문이다.

생성자 오버로딩

조건:같은 클래스내에서, 같은 이름의 생성자, 매개변수 개수가 다르거나, 개수가 같아도 매개변수의 자료형의 순서가 다르면 된다. 개수가 같아도 자료형이 달라도 된다.

ex) public Box5() {...}, public Box5(int w) {...}, public Box5(int w, int h) {...}, public Box5(String name, int w){...}, public Box5(int w, String name){...} 

ex)(생성자 오버로딩시 유의할 점)

public Box(String name, String color, int w){...}

public Box(String color, String name, int w){...}

은 생성자 오버로딩이 아니다. 이후 생성자 Box를 사용하여 객체만들 때 오류가 발생, 즉 매개변수의 개수 and 자료형(형식매개변수의 이름이 아닌)이 같은 순서로 들어오면 안된다. (str, str, int)

다만, (str, str, int)랑 (str, int, str)은 오버로딩 가능

메소드 오버로딩

조건:같은 클래스내에서, 같은 이름의 메소드명, 매개변수 개수가 다르거나, 개수가 같아도 매개변수의 자료형이 다르거나, 개수가 같아도 매개변수의 자료형의 순서가 다르면 된다. 

메소드 오버로딩시 유의할 점: 메소드명과 매개변수의 자료형과 순서가 같고, returntype만 다르면 오버로딩이 되지 않는다. 생성자 오버로딩에서와 마찬가지로 형식 매개변수의 이름은 오버로딩 성립에 영향을 주지 않는다.

this사용법

용도1:생성자 내에서 다른 생성자를 호출시 사용한다

ex)

class Box5{ 

int width;

int height'

int depth;

public Box5()

{

this(1,1,1);

}

public Box5(int w)

{

this(w,1,1);

}

public Box5(int w, int h, int d)

{

width = w;

height = h;

depth = d;

}

}

public class Box5Test { 

Box5 mybox1 = new Box5();

Box5 mybox2 = new Box5(10);

Box5 mybox3 = new Box5(10,20,30);

}

(굳이 Box5(int,int,int)가 제일 하단에 있을 필요는 없음)

용도2:메소드의 형식매개변수명과 객체자신이 갖고있는 멤버변수명이 같아서 구분시에 사용한다.

ex)

class This_2 {

int i;


public void method1(int i) {

this.i=i;

}

}

(여기서 this.i는 클래스 This_2의 멤버변수(객체변수) i를 가리킨다.








































1. 단어


a very compassionate person 


His life got much better when he stopped drinking and got his act together


a malevolent lie/smile 


votaries of freedom


pinkeye


The whole story was just an artifice to win our sympathy. 


The prison's warden was a cruel martinet


I want cilantro


gold nuggets 

chicken nuggets 

nuggets of wisdom/advice/information 


By (all) rights, you should have been the one to receive the promotion.


orthopedic hose up to her knees,


His opponent called him a bigoted demagogue.


you're a lot leaner.


lounging in bed 


The fruitcake contains dried currants and raisins


My (parking) meter is up


The project hit a big pothole a few weeks ago. 


He enjoys spending time with his old army comrades.


He bought the car for a pittance


by the pier


He pokes the bear


What touched off the fire? 


We accepted the news with resignation

The manager received resignations from three members of the staff. 


The bird ruffled (up) its feathers. 

That boy is a lot of trouble. It's a good thing his parents aren't easily ruffled.

I agreed to do what they wanted because I didn't want to ruffle any feathers.

The dress has a ruffle around the collar. 


2. 문장


So it would appear


I'm down (with it)


table-top game


You see these fucking mole people?


unswervingly adhere to the leaders


Real leaders don't spread derision and division.


social institutions


topical pesticides


after the fact


You stubbed it during the basketball game, right?


snake in the grass


primary, secondary, tertiary


Thriving, it has been found, is less likely for the overly zealous and carefree.


quote unquote


Jobs was a poser. He didn't even write code


you had me worried sick


The patient suffers from some kind of psychosis


She deserves a baby monsoon. 

'영어 > 매일학습내용' 카테고리의 다른 글

2018.03.17 영어  (0) 2018.03.17
2018.03.15 영어  (0) 2018.03.15

Integral transform의 일반적 얘기 정리

Laplace Transform정리

Fourier Transform정리


'수학 > 기본' 카테고리의 다른 글

수학정리(Complexity Theory)  (0) 2016.09.07
수학정리(Special Functions)  (0) 2016.02.29
수학정리(Probability, Statistics)  (0) 2016.02.29
수학정리(풀 문제들)  (0) 2016.02.29
수학정리(Applications, weighted graph)  (0) 2016.02.29

1. 단어

 

a venal court official

 

The agreement lays down the law (to everyone) on what the group allows.

 

I felt someone tugging on/at my sleeve.

 

The problem was a real sod to fix.

 

Some religions teach that we are reincarnated many times on the way to enlightenment.

 

you're a chucker

 

the school dumpster

 

The game also reduced their daily tensions because its ups and downs seemed more momentous than their lives

 

gustation

 

theistic

 

a sententious speech

 

She's the bee's knees.

 

the man is head over heels

 

cramps, diarrhea, pain

 

The company canvassed several sites for a new factory.

 

a flouncing walk

 

He never leveled with his parents about the accident.

 

a loudmouthed heckler

 

pay dirt

 

I'm taking a leak

 

blue-collar, pink-collar, white-collar

 

She acted in a completely open and aboveboard way.

 

It's this kind of selfishness that leads down the road/path to perdition.

 

So you're a stoolie. Admit it.

 

I saw him grab his lighter and his bong

 

Your constant tapping is driving me up the wall!

 

She bolted awake when the alarm sounded.

 

a mining concession

 

grocer's apostrophe

 

That dinner really hit the spot.

 

You voted for him? Surely you jest.

 

Film cameramen and crew members with booms blended in with them, while the director shouted out what to do.

 

2. 문장

 

You don't have any leads for me?

 

hate-filled garbage

 

Dvorak's native Bohemia

 

on the promenade

 

One of the most important skills is to be amenable to new information

 

Have you looked in the cellar?

 

Rhetoric focuses on the way historical and cultural settings frame discourse.

 

smart money is on the skinny bitch

 

I'm just about set

 

 

'영어 > 매일학습내용' 카테고리의 다른 글

2018.03.17 영어  (0) 2018.03.19
2018.03.15 영어  (0) 2018.03.15

1. 단어


Her recent expressions of concern are self-serving and disingenuous


He grilled me about inappropriate relationships for five hours today.


His objections were made in a captious spirit.


a beatific smile


the baneful consequences of war 


She was the bane of my existence.


My father was an illegal falconer


Dance crazes tend to fizzle out quickly.

We both liked each other right off the bat. 

the owl's talons 


We questioned the veracity of his statements. 


Even politicians sound more veracious on the radio. 


She just choked on a jujube


a dessert trolley, a shopping trolley 


He started drinking again after a long period of total/complete abstinence from alcohol. 


You must be off your rocker if you think I'm going to do that!

an up-and-coming young actor

Galvin said he was gonna haul me into court

but for the grace of God

They are restoring the hotel to its original/former grandeur

The city streets were crowded with celebrants.

war is brewing

Although he'd been practising with a Zimmer frame, progress was slow

somebody else swooped in and offered him

In her latest film she plays the part of an ingenue. 

glass eye

corned beef

To get to the US National Tick Collection, 

Check the change for slugs.

turn in a chit

Many coats of lacquer were applied to the table. 

in good standing

Off with your glasses

She beckoned to the waiter to come over. 

pay the earth 

Bertie smacks his lips in anticipation of exotic, bromidic delights.

sit tight

The starlet was bedizened

Even in time-sensitive child abduction cases,

She stood down in favour of a more popular candidate.

What I wouldn't give for a working fireplace

a calorie-controlled diet for slimmers 

escape hatch

2. 문장

not in farmland itself, but in soil


tax breaks for the elderly.


Do you want to have great looking perennials?


She's got BO


It ended way past midnight


go all the way to the end!


She's fresh widowed


Where's your can?


I prefer the company of nitwits


coordinating conjunction


I'm guessing lovers' quarrel


toward the beginning of Cliff's career


not only was she impaled by a loose metal handrail


people just get more stoked on me!



'영어 > 매일학습내용' 카테고리의 다른 글

2018.03.17 영어  (0) 2018.03.19
2018.03.17 영어  (0) 2018.03.17

1. 식이요법, 운동
-어떠한 불행한 일이 일어나도, 이 건장한 내 몸은, 다른 일을 시도할 자신감을 준다.
-피로, 육체의 아픔은 불필요한 불행을 맞이하는 것이다.
-건강한 몸과 맑은 정신은 행복의 필요조건이다.
-어떠한 해야할일이 있더라도 식이요법과 운동을 반드시 지킨다. 무조건 우선순위 1등이다.
-이것을 어겨가며까지 해야할 중요한 일은 없다. 운동시간을 빼고 나머지 투자한다해서 그 일이 더 잘되리라 생각은 완전히 근시안적인 생각이다.

 

2. 무엇인가 늘어놓은 계획은 ㄴㄴ
-이때동안 A1,A2,A3,...식의 계획은 통하지 않았다.
-이루지못한 죄책감만이 남았다.
-성공하더라도 보상은 크지 않다.
-매일 하는 습관 1,2개만두고 나머진 우선순위만 둘 것이며 구체적으로 무언갈 하겠다고 계획하지 않는다.
-"만일 네가 꿈을 갖더라도, 그 꿈의 노예가 되지 않을 수 있다면, 또한 네가 어떤 생각을 갖더라도, 그 생각이 유일한 목표가 되지 않게 할 수 있다면"

 

3. 사랑
-사랑을 꾸미지 마라. 네 자신이 네 자신답게 살아라.
-사랑이란 이 사랑이 영원하지 않을 수 있다는 것을 인지하되 사랑에 냉소적이지 않는 것이다.
-이 사랑이 영원하진 않을 지언정, 사랑한 내 감정은 그 순간만큼은 솔직했고 순수했으며 그 기억은 영원한 것으로 남을 것이다.
-현재 사랑하는 사람을 두어라. 상상의 고통들로 나를 괴롭히지 않아야 한다. 누군가를 좋아하는 감정은 세월이 흐를수록 자주 오지 않는다. 그런 감정을 느끼면 감사해하고, 걱정하지 않고 받아들이고, 더욱 열심히 사랑하라.

 

4. 직업과 돈
-오직 내 능력을 확실히 키울 수 있는 직업이어야 한다. 회사의 소속감, 연봉, 회사 내 사람들과의 관계 등 보다도 가장 중요한 것은 내가 추구하는 방향의 실력을 키울 수 있어야 한다. 즉 능력향상 외의 것들로 안주해 회사에 버티려고 하는 나를 경계해야한다. 사랑하는 일이 아니란 생각이 들면, 그만 두어라. 사랑하는 척을 하지 말자.
-그만큼 내 능력을 키우고, 성공을 누군가에 기대지 않아야 한다.
-돈을 착실히 모으자. 돈이 있으면 불필요하게 비굴한 직업을 가질 일을 줄일 수 있다.
-많은 준비를 하고 직업을 찾으려 하지 않아야 한다. 어느 정도의 준비 후 일단 직장을 잡는다. 이것은 미래의 불필요한 걱정을 줄여 행복한 자아 발전의 근간이 된다.

'글쓰기 > 잡소리(예전, 제거한 것, 예전 계획 등)' 카테고리의 다른 글

2016/10/04 생각정리  (0) 2016.10.05
괴벨스, 거대토끼 ?  (0) 2016.10.04
2016-여름방학계획  (0) 2016.06.17
계획  (0) 2016.03.20
습관노트  (0) 2015.08.10

1. 용어

f_n:seq from {0,1,2,...}->F

f(t):fps from {f_n}, :=G[f_n]

f(t,w):fps from {f_(n,k)}, bivariate formal power series from {f_(n,k)}

[t^n]f(t)

ord(f(t))

bar(f(t))

F[[t]], F_k[[t]]

L, laurent power series, 원소는 l(t)

(x)_k, falling factorial

[x]_k, rising factorial

(d(t),h(t))가 pRa

M(d(t),h(t)), riordan array

renewal array

R, riordan group

A, Appell subgroup

Lag, Lagrange subgroup

derivative subgroup, {M(h'(t),h(t)) s.t. h(t) in F_1[[t]]}


2. 정리

About F[[t]]

ord(f(t)+g(t)) >= min{ord(f(t)), ord(g(t)))

ord(f(t)g(t)) = ord(f(t)) + ord(g(t))

(F[[t]],+,*):ID, quotient field는 L

About F_0[[t]]

(F_0[[t]], *):abelian group((F_0[[t]], +, *)에서는 +에 대해 닫혀있지 않음)

About F_1[[t]]

(F_1[[t]], o):group

About L

[t^n]의 성질 중 f(t)g(t)와 f(g(t))와 bar(f(t))에 관해서 복습, 특히 마지막을 Lagrange Inversion formula([t^n]bar(f(t)), [t^n]{bar(f(t))}^k)

About riordan array, riordan group

R:group

M(d(t),h(t))*M(a(t),b(t))=M(d(t)a(h(t)),b(h(t))), riordan arrays are closed under the matrix product

multiplicative identity는 M(1,t)

M(d(t),h(t))의 multiplicative inverse는 M(1/d(bar(h(t)), bar(h(t)))

Every pRa can be seen as the product of an Appell by a Lagrange matrix

{f_(n,k)}:pRa iff te d(t) in F_0[[t]] and h(t) in F_1[[t]] s.t. f(t,w) = d(t)/{1-wh(t)}

pRa is characterized by d_(0,0), Z-seq, and A-seq

About functional equation w(t)=tΦ(w(t))

Φ in F_0[[t]] and F in F_0[[t]]일 때

[t^n]w(t) = 1/n * [t^(n-1)](Φ(t))^n, n>0

[t^n](w(t))^k = k/n * [t^(n-k)](Φ(t))^n, n>0

[t^n]F(w(t)) = 1/n * [t^(n-1)]F'(t)(Φ(t))^n = [t^n](F(t) * (Φ(t))^(n-1) * (Φ(t)-tΦ'(t)))

f(t), g(t) in L

[t^(-1)]f(t)g'(t) = - [t^(-1)]f'(t)g(t)

Φ in F_0[[t]] and F in F[[t]]일 때

(Diagonalization rule) {c_n}={[t^n]F(t)(Φ(t)^n)}의 generating function은 F(w)/(1-tΦ'(w)), w=tΦ(w)

F and Φ and φ in F_0[[t]]일 때

[t^(n-k)]F(t)(φ(t))^n(Φ(t))^k M(d(t),h(t)), where d(t) = F(w)φ(w)/(φ(w)-wφ'(w)), h(t)=wΦ(w), w=tφ(w)

About A-seq and B-seq and Z-seq of pRa, given pRa(=M(d(t),h(t))

About A-seq

An infinite lower triangular array D is pRa iff te A-seq of D(a_0 != 0)

(->방향은 M(d(t),h(t))에서 M(d(t),h(t))*M(A(t),M(t)) = M(d(t)h(t)/t, h(t))이용해서 M(t)=t보이고 좌우변 generic element비교)

(<-방향은 h(t)=tA(t) 이용해서 h(t) 구하고 d(t)는 D의 0-column읽어서 구함)

Given pRa, A-seq의 generating function바로 구하는 법, A(t)=t/bar(h(t)), A(y)=h(t)/t, y=h(t)

About B-seq

Given pRa, te B-seq(M(d(t),h(t))=M(d(t)h(t)/t, h(t))*M(A(t),t)^(-1)을 이용해서 구함, B(t)=(A(t))^(-1)임)

About Z-seq

Given pRa, te Z-seq

(z_0 = d_(1,0)/d_(0,0), d_(2,0)=z_0 * d_(1,0) + z_1 * d_(1,1)해서 z_1구하고 이런 방식으로 쭉 구함)

Given pRa, Z-seq의 generating function(implicit), d(t)=d_(0,0)/(1-tZ(h(t))), 따라서 Z(y)=(d(t)-d_(0,0))/(td(t)), y=h(t)

About renewal array

a pRa M(d(t),h(t)) is renewal array

iff d(t)=h(t)/t

iff A(y)=d_(0,0) + yZ(y) and d(0)=h(0) != 0

A:Appell subgroup

A:normal in R

Lag:Lagrange subgroup

L:subgroup in R

L giso (F_1[[t]], o)


3. 요약

P=M(1/(1-t), t/(1-t))의 경우 generic element가 계산 쉬움, binomial formula쓰면 됨

C=M(1/sqrt(1-4t), (1-sqrt(1-4t))/2)의 경우 generic element를 guess한 다음, [t^n]~~꼴로 써넣고 보니 n이 포함된 형태, 따라서 diagonalization rule사용하여 증명


4. 문제들


'수학 > 기타수학' 카테고리의 다른 글

CMT 시험대비  (0) 2016.12.05
조합 및 행렬이론 시험대비  (0) 2016.10.21
Generative VS Discriminative Model  (0) 2016.05.23
Decision Theory  (0) 2016.05.23
함수해석학(2016_1)수업정리(방학때 옮길 것)  (0) 2016.05.19

1. 용어


K_n, K_(n,n), K_n^o,

K_n^*

SS

incidence matrix for the configuration {X1,X2,...,Xm} of n-set X(mxn (0,1)-matrix), a seq of m distinct elements of X is a SDR

partly decomposable, fully indecomposable

reducible matrix, irreducible matrix, nearly reducible

totally unimodular matrix

nnn irreducible matrix중

primitive matrix

exponent

imprimitive matrix

index of imprimitivity


Adjacency(multigraph에서 생각, multiple edge개수가 entry로 들어감)

(0,1)-incidence

(0,1,-1)-incidence(orient는 내맘대로)


Adjacency(digraph에서 생각, multiple arc개수가 entry로 들어감, from row to column)

minimally strong digraph

index of imprimitivity of a strongly connected digraph


tourment


permanent(rectangular에서는?)

σ_k(A)


affine set, dimension of nonempty affine set, hyperplane, affine hull

convex hull, convex polytope, dimension of convex set


DQSMT

DSMT, elementary DSMT

SSMT

OSMT

Ω_n, Ω_n(D) where D:fully indecomposable (0,1)-matrix

DSSMT

DSPSMT

RSMT

CSMT


α=an, β=bn

α < β,majorization

α <_w β, weakly submajorized

α <^w β, weakly supermajorized

Ω_n(α<β)


preordering and partial ordering


A is a subset of R^n, f:A->R일 때

A:symmetric이란?

f가

Schur-convex on A

strictly Schur-convex on A

Schur-concave on A

strictly Schur-concave on A

kth-symmetric function, S_k


S=[n], Latin rectangle of S, Latin square of S, reduced Latin square of S

L_n:the number of Latin square of [n]

quasigroup, loop

partial transversal of size t of a Latin square A on [n], transversal of A


2. 정리


About affine, convex

affine set <-> Linear system's solution Ax=b


About Nearly reducible matrix

A:nearly reducible (1,0)-MT일 때

te P and 1<=m<=n-1 s.t. PAP^t = ...


About permutation

P-chain of [n]으로 permutation구하기

about PAP^T

불변량:n-digraph에 labeling만 영향(adjacency matrix A), egv

about PAQ

(n,n)-bipartite에 labeling만 영향, rank

A:invertible 이고 PAQ:LMT iff te! 1-factor of nonzero weight in the weighted bipartite graph associated with A


About det

det(MT(nxn))를 weighted bipartite graph로 표현하기

det(MT(nxn))를 weighted digraph로 표현하기(loop도 포함, 조심)

det(MT(nxn))를 n개의 rectangular MT의 곱으로 표현하기

If MT:PSD, then det(MT) <= prod over all diagonals of MT


About per

per(MT(nxn))를 n개의 rectangular MT의 곱으로 표현하기

per(PAQ)=per(A)

per((A)^t)=per(A)

Laplace Expansion Theorem for permanent(for mxn matrix, choose r, α)

per(A+B)=...

(Frobenius-Konig Theorem), A:nnn nxn MT일 때 per(A)=0 iff te P,Q s.t. PAQ=... sxt, s+t=n+1

(Alexandrov-Egorycev Inequality)If A:nnn, then (per(A))^2 >= ... (if t column빼고 다 positive columns, then = holds iff t는 q column의 multiple)

If per(A(i|s))=per(A(i|t)) for any 1<=i<=n and some s,t, then per(B)=per(A), where B=A except for s,t column은 A의 s,t column의 평균

If A:CSMT s.t. 0<per(A)<=per(A(i|j)) for any i,j, then per(A(i|j))=per(A) for any i,j

About subpermanents, some conjectures

If A:nnn, all row sum<=1, then σ_k(A) <= nCk

(Tverberg)If A:DSMT, then σ_k(A) >= σ_k(J_n) for k=1,2,...,n, with = iff A=J_n

(Dokovic)A:DSMT일 때 σ_k decreases at A on the segment joining A to J_n.(거짓, 1999, Ian)

(Dittert)A:nnn, all entries sum=n, f(A):=prod rowsum + prod colsum - per(A)일 때 f(A) <= 2 - n!/n^n with = iff A=J_n

(Cheon and Hwang)A:nnn, all entries sum=n, f_k(A):=...


About egv

Gershigorin theorem


About Irreducible MT

irreducible 판정:n-digraph가 strongly connected

Frobenius normal form of any matrix A, PAP^t

Frobenius form of irreducible A with index of imprimitivity k, then PAP^t ...

invariant operation of irr:

-transpose

-product? NO

-addition? NO

Perron-Frobenius Thm의 내용(positive일때랑 nnn irreducible일때의 차이는 spectral circle상 egv개수뿐)

About imprimitivity

M:nnn irreducible일 때

M:primitive iff M^m:positive(M:irreducible없어도 됨)

M:primitive iff lim m->inf (M/r)^m exists, limit값은?

imprimitive of M = gcd of the lengths of directed cycles in n-digraph.(index of M = index of D(M))

index of M=k일 때

k개의 egv는 x^k=r^k인 복소수 근들이다.

k_i = k, where k_i:the gcd of lengths of all cycles of D(M) through vertex i

About exponents of primitive MT((0,1)-MT만 다뤄도 됨, 이하 모두 (0,1)-MT)

If M:primitive with p개 nonzero diagonals, then exp(M) <= 2n - p -1

If M:primitive with n개 nonzero diagonals, then exp(M) <= n - 1

If M:primitive and symmetric, then exp(M) <= 2n - 2 with = iff te P s.t. PMP^t = ...

If M:primitive, then exp(M) <= (n-1)^2 + 1 with = iff te P s.t. PMP^t = ...


About Incidence, Adjancecy

About graph, A:(0,1)-incidence, B:Adjacency, C:(0,-1,1)-incidence

(A)^t * A = B + D

(C)^t * C = B - D

If G:connected, then rank(C)=n-1


About DSMT and Majorization

About DQSMT

A:DQSMT iff 1:egv for A with (1,1,1...,1) eigenvector

About DSMT

A:each row sum = each column sum = 1이면 A:square

A:DSMT iff AJ=JA=J, J=[1/n] iff for any x in R^n, Ax < x (majorization)

DSMT1*DSMT2 is also DSMT

per(DSMT) > 0

(Schur)H:hermitian, then te SSMT s.t. h=SSMTλ, h:diagonal entries로 구성된 vector, λ는 egv로 구성된 vector(증명도)

if A:DSMT and reducible, then te P s.t. PAP^t=the direct sum of DSMTs

if A:DSMT and irreducible with index k, then k|n and te P s.t. PAP^t = ... all blocks are (n/k)-square and DSMT

(Birkhoff)Ω_n={all DSMT}=closed bounded convex polytope, dim=(n-1)^2, whose vertices n! permutation MT of order n

D:nxn fully indecomposable (0,1)-MT일 때

Ω_n(D):={all DSMT s.t. DSMT<=D}, called the face of Ω_n, which is a subpolytope of Ω_n

dim(Ω_n(D))=the number of 1 in D - 2n + 1

the number of vertices = per(D)

the barycenter of Ω_n(D) is 1/per(D) sum over P<=D P(P:permutation MT)

About Minimizing

A:minimizing이면

fully indecomposable

if a_(h,k)>0, then per(A(h|k)) = per(A)

(London-Minc)for any i,j, per(A(i|j)) >= per(A)

if 1st row of A and 2nd row of A have the same zero pattern, then per(A)=per(A'), A'의 1,2row는 A의 1,2row의 average로 replaced

if A:positive, then per(A)=per(J_n)=n!/n^n

if A != J_n, then all its zeros cannot occur in a single row(column)

(Egorycev)per(A(i|j))=per(A)

(Alexandrov-Egorycev Inequality)에서 = 성립 for any q,t(q != t)

per(A)=per(A'), A'의 i,j row는 A의 i,jrow의 average로 replaced

(van der Waerden)If A:DSMT, != J_n, then per(A) > per(J_n)

if A:positive DSMT sufficiently close to J_n and A != J_n, then per(A) > per(J_n)

About DSSMT

A:DSSMT

iff te DSMT s.t. A<=DSMT

iff A:nnn and Ae <= e and eA <= e

iff A:nnn and αA <_w α for all nnn α.

{all DSSMT}=convex hull of {M s.t. M has at most one 1 in each row and each column}

About DSPSMT

A:DSPSMT 이면 all row sums and column sums are at least 1(역은 성립 안함)

{all DSPSMT}=convex, not convex hull of its extreme points(extreme points가 permutation matrices뿐)

About Majorization

α < β with nnn

iff (Muirhead) using c and per

iff (HLP) using DSMT

α <_w β with nnn

iff te DSSMT s.t. α = DSSMTβ

α <^w β with nnn

iff te DSPSMT s.t. α = DSPSMTβ

About Schur-convex function on A, A:symmectric and convex subset of R^n, f:A->R, g:R->R

직접 Schur-convex보이기, 단, n=2일때만 보여도 충분

f:C1 on int(A) 일 때 f:Schur-convex on A iff f:symmetric and Schur-condition

f:symmetric and convex이면 f:Schur-convex

f:inc and Schur-convex and g:convex이면 f(g)는 Schur-convex

f:dec and Schur-convex and g:concave이면 f(g) 는 Schur-convex

f:Schur-convex이고 g:inc이면 g(f)는 Schur-convex,

f:Schur-convex이고 g:dec이면 g(f)는 Schur-concave.

대표적인 Schur-convex

sum 1/x_i

sum x_i

sum (-log(x_i))

대표적인 Schur-concave

S_k(k=1,2,...,n)

symmetric, inc, Schur-concave

(S_k)^(1/k):symmetric, inc, concave, Schur-concave

(S_k)/(S_(k-1)):symmetric, concave, Schur-concave

Note)

<_w인 경우 order-preserving의 경우는

f:order-preserving

iff 0>=f_x1>=f_x2>=...>=f_xn for all z in A(f가 C1일 때)

iff f:inc and Schur-convex

<^w인 경우 order-preserving의 경우는

f:order-preserving

iff f:dec and Schur-convex


About Latin squares

L_n = n!(n-1)!R_n, where R_n:the number of reduced Latin squares of [n]

quasigroup on [n] <-> Latin square, bijection

K_(n,n)의 edge coloring(adjacent edges는 다른 coloring, color set=[n]) <-> Latin square, bijection

M_i:=same color perfect matching

transversal of Latin square <-> differenct color perfect matching

|G|=odd이면 {(g)^2|g in G} = G(i.e. all element of G has a unique square root)

따라서 cayley table for a group with odd order의 diagonal은 transversal가 된다.


3. 다시봐야할 것들


αP <^w α for all nnn α이면 P는 DSPSMT인가?


'수학 > 기타수학' 카테고리의 다른 글

CMT 시험대비2  (0) 2016.12.05
조합 및 행렬이론 시험대비  (0) 2016.10.21
Generative VS Discriminative Model  (0) 2016.05.23
Decision Theory  (0) 2016.05.23
함수해석학(2016_1)수업정리(방학때 옮길 것)  (0) 2016.05.19

2015 1학기

미분적분학1(박기섭)

대수학특강(권순학, About Field, Galois)


2015 겨울학기

선형대수학(허석문)


2016 1학기

미분적분학1(조나단 악스텔)

수리통계학(배종식)


2016 2학기

현대대수학2(김미경, About field, series of groups, sylow theorems, UFD, PID, ED)


1강


Scientist explore what is; engineers create what had not been -Theodore von Karman


훌륭한 연구자가 되기 위한 대학원 생활 조언


지도교수님을 사랑하라.

지도교수님이 어떤 사람인지, 지도교수님의 관심 연구분야가 무엇인지

대부분의 교수님은 자기주도적인 학생을 좋아한다. "~했는데, 다음엔 뭘할까요?" 라는 말은 하지 않도록

연구, 논문쓰기는 가능한 빨리 시작하라.

좋은 연구 문제를 택하라.

여러가지 문제를 탐색,

자기 분야에 핫한거

review papers를 참고하라. 자기분야의

가이드라인 for 효율적인 연구

솔루션보다 Problem이 더 중요

방해받지않는 시간을 설정하라.

가정에 대해 의문을 가져라.

가능한 문제를 다룰 수 있는 부분으로 나눠서 보아라

솔루션을 다른 연구자에게 설명해보라.

단기목표, 장기목표 설정

연구자들과 대화하는 것을 아끼지 마라.

출판하는데 있어서 적극적으로 생각하라.

어느 출판하고 뭘 출판할 지 생각

공동저자에 실는 것을 관대하게 생각, 단 순서는 조심히 고려

읽기 쉽고 흥미롭고 잘 적혀야함

standard notation사용

관련된 연구 또한 작성

결과가 나오면 발표 등 알리는데 적극적인 자세를 취해야 한다.

일관된 연구 계획

끊임없이 주제를 확장해보고

핫한 분야 연구

다른 사람과 연구

스스로가 먼저 좋은 동료가 되고자 해야한다.

buddy system을 만들기

동료에게 칭찬, 나에게도 칭찬

좋은 환경 만들기(방해받지않는 시간 확보, 연구실 환경 등)


효과적인 학술논문 쓰기

쓰기전에 생각 다듬기, 순서를 어케쓸지 등

outline짜기

지루한 부분 빼기

간결 명료

작성법을 독자들의 스타일대로 맞추기

slang(속어), fad words(유행어), redundancies(불필요한 중복), euphemisms(완곡한 표현), spelling errors, poor grammar

다양한 사람에게 feedback받기, 전문가에게 교정받기


좋은 논문 쓰기 팁

가능한 많은 논문 읽기, 넓은 분야로

자기 업적에 대해 객관적이게 되기

좋은 영어로 쓰기

거절과 함께 살기, 리젝=조언받을 수 있는 기회

연구와 논문쓰기는 함께 진행되어야 한다. 연구중에도 논문을 어떻게 구성할지를 함께 고민해야한다.

Become a reviewer, 비판적으로 내 논문을 봐보기

어디 출판할지를 일찍 정하라, 저널의 목적과 범위를 먼저 정해야한다.

퀄리티가 전부다


2강 좋은 학술 논문의 효과적인 과정


Planning

일정 및 시간 잡기

가능한 일찍 planning 시작

방해받지 않는 시간 잡기

밝은 조명과 편안한 상태

컴퓨터와 소프트웨어에 익숙해지기

독자 정의

독자들이 원하는 게 무엇이며 이미 알고 있는 것은 뭘까?

목적 정의

논문을 통해서 이루고자 하는게 무엇인지?

Inventing

아이디어 생각, 구체화

outline 작성

Mind mapping

Taxonomizing

연구 Organization

연대순

공간적

비교/대비

중요도순

문제, 해결순

일반에서 구체적으로 순

Drafting

초안 작성

PID를 섞어서 진행, ID섞어진행, DR섞어진행, IDR다따로진행, 좌to우, 더 효율적이다.(긴문서의 경우 IDR 다따로 진행이 효율적)

PID섞어 진행:쓰기 어려운 글을 시작하게 하기 좋은 방법

ID섞어 진행:5~15페이지 문서에 효율적, Draft마치기 전까지 계속 쓰기(글쓰기 관성 유지하기, 방해안받을 환경이 필수적)

DR섞어 진행:15~50페이지 문서에 효율적, 문자, 숫자가 굉장히 중요한 문서에 적용, Organization이 가장 중요

방해요인 handle(초고 쓸때는 방해요인들을 좀 유연하게 생각하고 적기!)

계획짜는데 방해(가능하면 빨리 진행)

환경요인 방해(노전화, 등)

주제 방해(잘아는 주제로)

단어 방해

양식 방해

독자 방해

기대 방해

긴급한 상황 방해

Revising and Editing

충분한 시간 쏟아야 한다.

초고를 작성 후 인쇄하여 계속 들고 다니다 보면, 구성이나 아이디어들이 떠오른다.(Take creative time out)

여러 차례 교정 필요(관점을 바꿔보며)

크게 읽어보며 교정할 곳 찾기

반복되는 문제는 그곳마다 찾아서 수정하기 보단, 맨 앞페이지에 수정할 내용 적고, 마지막에 수정하는게 덜 스트레스 받는다.

Introduction부분을 다시 작성해보자.

지루함과 완벽함 고려

철자 문법 체크


지나친 완벽주의를 경계하라. 시간에 대한 limit을 설정하라.

피드백을 받을 때 명료한 의견을 달라고 부탁하라.

Revising 즐겁게?(high-level task위주로(글의 구성 등, 오타는 low-level), checklist만들어서 사용)

학술논문쓰기는 사무적이고 반복적인 일이다.

숙련자는 25/35/40

비숙련자는 50/45/5 로 시간 사용, inventing/drafting/revising


3강 저널고르는 방법 및 academic data base in research and writing 을 어떻게 사용할지


SCI(Science Citation Index), 150개 분야, 3800저널들이 등재되어 있음

SCIE(Science Citation Index Expanded), SCI보다 기준이 등재되기 쉬움, 대부분 저널들이 SCIE를 거쳐서 SCI되는데 SCI가 더 좋음, 8500개 저널들

IF(Impact Factor), 평균적으로 높을수록 좋은 저널, 저널 평가에 절대적인 기준은 아님, IF가 높을수록 인용이 많이 되구나

(2011년 Nature)IF = 62691/1728 = 36.280, 62691=2009,2010년 인용횟수, 1728=출판된 논문 수


Target 저널 정하기


저널정하기의 중요성

-저널의 goals 과 내 논문이 일치하는지

-IF가 높은지

-출판하는데 시간이 얼마나 걸리는지(요즘은 다 온라인이라 빨리 안내면 다른 사람이 냄)

-저널의 주요 독자들이 누군지(specific한 target 저널)

-broad audience, high IF보다 더 중요한건 내 분야 사람들이 주로 내는 저널인지가 중요함


저널 잘 정하면 장점

-빨리 출판되어야 좋음(노벨상의 경우)

-출판하는데 시간과 노력이 덜 필요할수록 좋음

-rejection rate이 줄어듬

-다른 연구자들이 내 논문을 잘 찾을 수 있음(내 분야사람들이)


저널 정하는 방법

-3~5개 정도 저널 후보 정하기

-저널의 범위가 내 논문 주제가 맞는지

-그 저널이 내 논문 주제의 논문을 출판한 적이 있는지

-투고하기전에 editor랑 컨택해서 CV랑 dataset, research report를 제출해서 클리닉을 받을 수 있음

-클리닉보고 내든가 다른데 내든가


빠른 출판의 방법

-CV, abstract, data sets을 먼저 보내보기 to editor

-peer review 평균시간 알아보기(각 저널 홈페이지에 있음)

-Table screening(저널 자체 회의) or trasnsfer service(다른 저널로 보내주기), 등 저널 별 특징 알아보기

-저널 별 time consumption에 대한 정보를 지도교수에게 얻을 수 있다.ㅣ

-Online pre-publication도 가능한 경우가 있다, 아주 빠르게 출판가능(요즘은 온라인 출판도 정식으로 인정됨, DY번호만 있으면)


IF찾기

-저널 홈페이지에 들어가서 찾기

-ISI Web of Knowledge에서 저널명 입력하면 찾기 가능


Research Survey가 충실히 이루어져야, 선행 연구 조사가 충분히 이루어져야 내 연구를 이해할 수 있다.

SCI 등 indexed journal에 출판해야 다른 연구자들이 내 논문 잘 읽을 수 있다.


open access journal

저자가 저널에게 돈을 일정액 지불하면, 일반인들이 온라인으로 무료로 논문 다운로드 가능

최근에 증가하고 있긴 하지만, 퀄리티는 아직 높진 않음


논문을 출판한 뒤, 내 분야의 사람이 아닌 분들에게도 내 논문을 홍보해야할 때가 있다.(평판도 높이고 교류도 하고)

-social media, SNS사용

-언론사 이용

-리서치 그룹의 웹사이트, 블로그, 유투브

-수상


요약

-high IF라해서 무작정 좋은건 아님, 저널과 내 분야 일치가 더 중요,


Academic Databases활용하기


Web of science

-web of knowledge에서 제공하는 정보

-12,000개 저널 포함

-148,000 컨퍼런스

-과학, 소셜사이언스, 인문학, arts 등 다양한 분야


Science Direct

-25,000 E-book

-2,200 jornals


Scopus

-Elsevier가 주인

-1995년 이후 정보만 access가능


당장 Web of Science가입필요

-document검색에 용이, author identifier number같은걸 가진다면 CV에 모든 내용 안적어도 됨

-search operators, AND, OR, NOT, NEAR/n, SAME

ex) ABC SAME DEF란 ABC DEF가 같은 줄에 쓰인 document만 나옴

-Refine results area

-Use the functions here to sort results, show abstract, get to full-text of articles, and more

-저자 정보, funding information, keywords, 등도 볼 수 있음

-이 논문을 인용한 논문이 무엇인지도 알 수 있음

-Citation network, cited reference, times cited counts, citation mapping, related record serach, citation alert(이 논문 또 인용하면 알려주는 서비스)

Citation reports


Scopus User guide

-Web of science와 비슷하게 다양한 기능 많음


H-index

총 documents 중에서 평균 n번 이상 인용된 논문의 개수가 n개일 때 h-index = n

높을수록 많이 출판하고 인용도 많이 된다는 것을 의미함


4강 스토리텔링방법으로 쓰기, 논문쓰기 준비과정


논문 구성

-타이틀을 구체적으로 쓰기

-not technical, technical하면 아주 전문가만 이해 가능

-잠재적인 독자에게 적절하게

-구체적으로 쓰는게 필요할 때도 있다.

-모든(compendious) 내용을 담은 것의 요약

-저자쓰기

-주저자:가장 기여한 사람(다수 가능)

-저자 listing은 기여도에 따라

-co author 정하는 것은 지도교수님과 상담

-co author에게 미리 알려줘야 함

-Corresponding author(=contact author), 주로 지도교수님이 되고, 모든 출판관련을 책임짐,

(주저자, Corresponding author가 기여도에 중요한 저자들임)

-Abstract쓰기

-Preview of what's to come

-Less technical

-100~250단어 사이로 단문 1개로 요약하기, novelty를 잘 설명해야 함

-축약어이나 citation언급, 하지 않도록

-Introduction쓰기

-현재까지 연구결과 언급, 이 논문의 성과

-1~4개의 문단,

-현재까지 연구의 역사와 문제점 언급

-이 논문의 차별성

-Materials and methods

-(실험관련 논문이라면)실험을 재현할 수 있게끔

-시간순으로 적어야

-차트, 도표, 표 등 도움됨

-사람 실험, 동물 실험했을때면 윤리적 문제(동의 등) 언급 필요

-실험결과를 적지 않도록

-실험도구의 브랜드도 적기(specialized 도구를 사용했다면)

-Results

-Detailed data 언급 필요, figures, graphs, tables 등 이용 필요

-정성것 적어야함. 눈에 잘띄게

-clear, logical

-비이성적, 과대포장 하면 안됨

-한 문장으로 결과 요약

-모든 Data를 넣을 필요는 없다.

-Discussion쓰기

-얻은 결과 중 가장 중요한 것 강조하기

-question과 결과를 잘 연결 짓기

-아이디어를 organize, 가장 중요한 단어, 가장 중요한 점, 메인 idea를 supporting하는게 뭐냐

-한 문장으로 conclusion 요약, 강조

-Tables and Graphs

-x축, y축 labeling필요

-Acknowledgement

-Moral, financial, editorial, presentational, instrumental, technical, conceptual, peer interactive 등 감사인사

-References

-저자명, 논문제목, 저널명, volume, page number, 등, 각 저널별 template이용하면 쉬움


스토리텔링방법(강조!)

-동일한 연구결과라해도 요렇게 잘 써야 질을 높일 수 있다.

-일반적인 진행 Background, approaches, results, outlook of the work

-Dramatic 진행 Background, State of the art of previous technology, Limitation of previous technology, Results를 통해서 limit를 넘어섰다.

-일반적으로 할거냐 dramatic할거냐는 지도교수님과 먼저 상담해야, 결과가 dramatic하지 않은데 dramatic 진행이면 학계에서 싫어할 수도

-Magazine 스타일(Nature같은)

-Thesis 스타일(PRL같은)

-detail이 중요

-Figure arragement

-Topic figure in the head(두괄식)

-trendy issue

-big breakthrough

-New phenomenon

-경쟁이 많은 분야에서 효과적

-Topic figure in the end(미괄식, 대부분의 논문)

-설명적

-이해하기 쉽고 organize the content하기 좋음

-dramatic description에 좋음

-Importance of visulization

-Highest visualization하면 좋음

-improve understanding

-fast and exact information delivery

-추가적인 설명없이도

-figure개수

-letter는 4~6

-full은 8~10

-Main figures < supporting figures, 필요한 개수

(왜냐면 Main figures는 잡지에 실려야 하니까, supporting은 온라인상에서 확인가능한 figures)


논문 준비하기

-Abstract

-Background와 연관성

-주장하고 싶은 1개의 문장(결과가 3개이상 정도 되줘야 high IF 저널에서 먹힘)

-Main conclusions, results

-출판과정

-저자가 submission

-editor가 Cover letter(1~2장, clear하게, 저자가 reviewer suggesting가능) check

-editor가 Abstract, affiliation, author체크(국가, 대학, 연구소가 영향이 있긴 함)

-editor가 figure set check(eye catching이 clear한지), 이후 peer-review할지, pre screening(선거절)

-editor가 reviewer select(cover letter에서 + 저널별 reviewer들 골고루 선택)

-reviewer가 comments

-editor가 decision(요즘은 reviewers들 중 한명이라도 reject이면 reject하는 경우가 많다. 따라서 first sumission에서 잘하길)

-author랑 revise(author는 답신해줘야함)

-editor가 Final decision

(A저널에서 reject당하고 B저널에 그대로 제출해서 같은 reviewer만날 확률이 있으므로 reject comment대로 수정 필요)

-Cover article로 선정되는 방법

-optional인데 author들의 선택

-대부분의 경우는 editor가 먼저 선정하고 author에게 확인받는 격


5강 Title, Abstract, Introduction


저널에 실리는 논문의 형태

Article(=full papers)

-이미 많은 사람들이 한 연구 주제

Notes

-굉장히 중요한 주제에 대해 preliminary reports, 예비단계지만 알리고 싶다.

-연구수행방법 개선, 다른 참식한 관찰, 새로운 techniques

Communications(Letters, Correspondence)

-길이 제한있음

-Urgent한 내용일 때

-실험 detail설명 ㄴㄴ

-독자들은 full paper를 쓸껄로 기대하게 됨

Reviews

-이미 발표된 논문들을 통합하고 미래 전망 등

-해결된 점과 해결해야할 것들을 언급

-연구 시작할 때 이런 review논문을 보면 좋음

-Reference를 잘 달아줘야함


잘써야하는 이유

-rejection될 확률 높고 독자들의 흥미를 유지


각 부분마다 독자들

-Title은 1000명(가정)

-Abstract는 대략 4문장, 100명

-Introduction은 1page, 100명

-the problem은 1page, 10명

-idea, 2pages, 10명

-the details, 5pages, 3명

-related work, 1~2pages, 10명

따라서 Title, Abstract, Introduction이 중요


논문은 미래시제를 쓰지 않는다.

현재시제는 사실 및 진리

거의다 과거시제이다.


Title쓰기

-독자 이끌기, 잘 검색될 수 있게, 정확하고 매력적이게, 최소한의 단어로

-원고 다쓰고 제목 수정

-가장 중요한 키워드를 나열한 후에 conclusion을 잘 대변할 수 있게 결정

-다른 사람 입장에서 읽어보기

-간결하고 의미있고 구체적

-너무 짧아도 너무 길어도 안좋음, 길수밖에 없으면 ~:~, subtitle사용

-studies on, investigations on, using, novel, first, a study of, research on, report on 등은 사용 하지 않도록

-기호, 공식, 약어 사용 ㄴㄴ

-시작시 the~로 쓰지 않도록

-약자, 약어 사용 ㄴㄴ, 굉장히 잘알려진거 아니면

-superscripts, subscripts 등은 사용하지 않도록

-굉장히 중요한 문제일 때 의문형으로 가능


Abstract쓰기

-잘 써야 논문 분류에도 정확히 분류됨

-목적과 scope, 사용된 방법, 결과요약, 가장 중요한 conclusions

-원도 다쓰고 수정 필요

-과거시제

-간결하고 self-contained, complete

-한문단이 가장 optimal, 80~200 words가 적당, 4문장 정도

-이 논문의 figures와 일치한 내용이어야 함

-reference, table, figure, sections을 cite하면 안됨

-논문에서 언급되지 않은 결과를 사용 ㄴㄴ

-약어사용이 가능한데, 첫등장은 full로쓰고 이후엔 약어사용 가능, Abstract에서 썻다고해서 Introduction에서 약어 바로 등장 안됨


Introduction쓰기(논문의 시작)

-현재시제는 진리를 가리킴

-내 결과와 관련된 분야들 언급

-논문의 목적

-구체적이고 간결하게 문제 언급

-첫 문장, 정보가 잘 포함된, 독자의 흥미를 끄는

-정확한 인용 언급

-현재까지 결과와의 차별성

-사용한 방법, 결론 언급

like this

문제

문제의 흥미로움

문제는 unsolved

내 아이디어

My idea workds

My idea가 다른 결과와의 비교

2 pages

-가능하면 능동태

-Define any specialized terms or abbreviations

-이미 출판된 내용을 인용(안출판된 것은 ㄴㄴ)

-피해야할 것

-장황한 나열, 우쭐한 표현, 반복 ㄴㄴ, 관련없는 내용 ㄴㄴ, recently사용 ㄴㄴ

-문단을 산만하게 ㄴㄴ, 1문단엔 1개의 아이디어만

-너무 많은 인용 ㄴㄴ


6강 Experimental Method, Theoretical Background, Synthesis, Experimentals































'기타 > 기타' 카테고리의 다른 글

혼자서 집짓기  (0) 2018.04.26
현대대수학2 조교  (0) 2016.10.19
프랑스 대입시험 바칼로레아 기출문제  (0) 2014.02.07

Chapter 1 What is CMT?


*Def

walk

path(walk와의 차이는 distinct vertices)

connected graph

matching, k-matching, matching number

vertex-cover, cover number

K_n, complete graph

K_no, complete graph with all loops

K_n*, complete digraph with all loops

G(MT), called the Konig digraph

IcMT(configuration of X)

MT(nxn):reducible or irreducible

nnn irreducible중에서

primitive MT

the exponent of primitive MT?

imprimitive MT, 이경우 index of imprimitivity 정의
G1,G2:cospectral if spec(A(G))=spec(A(G'))

IcMT(G), (1,0) matrix


*Thm


Principal tools of Combinatorics

-Mathematical Induction

-Pigeonhole Principle

-Inclusion-Exclusion Principle

-The methods of recurrence relations and generating functions

-Graph Theory

-Burnside's Theorem

-Polya Enumeration Theorem

각각 내용 알기, 특히 Exponential Generating Functions관련해서 내용정리 추가 필요


Tree의 equivalent def

-connected acyclic

-for distinct u,v in V(G), te! path from u to v

-connected with n-1 edges

-connected and removing any edge makes G disconnected


G:bipartite이면 cover number = matching number


From Matrix to graph

no need square(invariant for PAQ, like rank)

MT(mxn) -> K_(m,n)의 subgraph, ker(MT), bar(ker(MT)), bar(ker(MT))의 경우 weigted로도 볼 수 있는데 그 경우 bar(ker(MT))에서 0는 no edge로 보면 됨

MT(mxn) -> G(MT), K_(m,n)의 digraph 형태, weight있는 경우

MT(nxn)의 경우 그냥 G(MT)보고 det(MT)를 wt(all 1-factors)로 묘사가능

square(invariant for PArt(P), like egv)

SMT(nxn) -> K_no의 subgraph, ket(MT), bar(ker(MT)), weighted로도 볼 수 있음, bar(ker(MT))에서 0는 no edge로 보면 됨

MT(nxn) -> K_n*의 subgraph, ker(MT), bar(ker(MT)), weighted로도 볼 수 있음, bar(ker(MT))에서 0는 no edge로 보면 됨


From (di)graph to matrix

(1,0)-A(G)

arc가 있냐 없냐로 1,0

det(A(G))=(-1)^n * wt(D_n),

where D_n:={all 1-factor of σ, σ in S_n},

wt(D_n)=sum over all σ wt(F_σ),

wt(F_σ)=sign(σ) * prod over all i=1 to i=n a_(i,σ(i))

따라서 (di)graph의 형태를 보고 det구할 수 있다. cycles

A(G)^k의 (i,j)원소의 의미는 the number of walks of length k from i to j

IcMT(G)

rt(IcMT(G))*IcMT(G) = sLap(G)


det, perm using IcMT

det(MT(nxn))=W^1 W^2 ... W^n, W^i:(n choose i-1)x(n choose i) using (i+1)th row element in MT

perm(MT(nxn))=W^1 W^2 ... W^n, W^i:(n choose i-1)x(n choose i) using (i+1)th row element in MT


Perron Theorem for positive MT


About irreducible

MT:irreducible

iff G(MT):strongly connected, (G(MT):K_n*의 subgraph, unweighted directed)


About primitive MT

the index of imprimitive = gcd(the lengths of all directed cycles in G(MT))

MT:primitive

iff lim m->inf (MT/specR(MT))^m exists, the limit = (p*rt(q))/(rt(q)*p) > 0, where p:perron for MT, q:perron for rt(MT)

iff the index of imprimitive = 1

iff gcd(the lengths of all directed cycles in G(MT)) = 1, (G(MT):K_n*의 subgraph, unweighted directed)

iff MT^m > 0 for some m, called the exponent


Perron-Frobenius Theorem for irreducible NNN MT


'수학 > 기타수학' 카테고리의 다른 글

CMT 시험대비2  (0) 2016.12.05
CMT 시험대비  (0) 2016.12.05
Generative VS Discriminative Model  (0) 2016.05.23
Decision Theory  (0) 2016.05.23
함수해석학(2016_1)수업정리(방학때 옮길 것)  (0) 2016.05.19

1. 흥선대원군의 개혁 정치(사실 말이 개혁이지 전통질서의 강화...정도? 근대화된게 없음)


1863~1873 집권, 흥선대원군 이전은 세도정치기(1801~1863)였다.

왕권 강화책

1) 인사 혁신

세도 정치 타파(안동김씨 일가 축출)

능력에 따른 인재 등용(남인, 소론 등)

비변사 혁파(세도정치기에서 가장 권력 쎘던)

의정부(행정)와 삼군부(군사)의 기능 부활

2) 통치 체제 정비(정치 기강, 사회 기강 확립을 위한

'대전회' 편찬

'육전 조례' 편찬

3) 경복궁 증건(임진왜란때 탔었던 경복궁, 왕실 위엄을 위해 증건)

재원 마련을 위해 원납전(기부금)징수, 당백전(새 고액화폐(시중 화폐보다 100배)) 발행, 성문세(4개의 문 통행료) 시행

경제 혼란 초래(물가상승)

양반의 묘지림(묘지주위나무) 벌목(좋은 나무 필요해서), 백성들을 강제 노역 동원

양반, 백성들의 불만초래


민생 안정책

1) 서원 철폐(600개 없애고 47개만 남음)

붕당의 근거지였던 서원, 제거해서 왕권 강화의 계기 마련

옥산서원(이이, 서인), 도산서원(이황, 남인), 등 각 서원 출신들은 서원 당을 따를 것이다. 그래서 없애자.

만동묘 없앰

허묘, 명나라가 임진왜란 때 우리 도와준 명나라 왕 신종과 명나라가 후금에 공격당해 멸망할 때 왕 희종, 두 왕에게 제사지내는 곳)

2명이 죽은 날도 다르고 명절도 2번이니 1년에 4번, 만동묘 주위 서민들 힘듬

서원의 토지와 노비 몰수하여 국가 재정의 확충

양반 유생들의 횡포로부터 백성들을 보호하여 민생 안정

2) 삼정의 문란(농민 봉기의 원인이었던) 시정

전정(전세(토지에 부과되는 세금)제도)의 문란

은결(토지대장(장부)에서 고의적 누락)때문에, 탈세 증가

백지징세, 즉 수확이 없는 땅인데 세금 부과

해결책:양전사업(토지조사)하여서 은결색출, 양반과 토호(땅부자)들의 토지 겸병(농민땅 뺏어서 땅합치는) 금지

군정의 문란

군포를 정부에서 미리 총액을 지정한 다음에 각 군현에 할당(각 군현의 장정수보다 많게)하고 각 군현의 아전(하급관리)들이 농민에게 수탈, 그러한 수탈의 종류(백골징포(죽은사람에게도), 함구첨정(어린애에게도), 인징(이웃에게), 족징(친척에게) 등)가 있었다. 양반은 면제, 도망자 발생 등등, 남아 있는 사람에게 부담이 가중

해결책:호포제(인두세에서 가구세로 바뀜) 실시하여 양반과 상민 모두로부터 군포 징수, 즉 군역의 균등화

환곡의 문란

환곡(봄에 곡식 꿔주고 가을에 이자처서 받는 제도)는 정부에서 실시, 아전들의 비리(환곡으로 고리대금함)가 많았다.

해결책:사창제(주민들이 자발적으로 직접 운영) 실시하여 관리의 부정 방지, 양반 중심으로 시행됨


---------------------------------------------------------------------------------------------------------------------------------------


2. 통상 수교 거부 정책(근대화에 늦어지게 되었다. 병제병오신)


병인박해(1866.03)->제너럴셔먼호사건(1866.08)->병인양요->오페르트도굴사건->신미양요


병인박해

흥선대원군은 러시아의 남하정책을 견제하고 싶어했다. 그러기 위해 프랑스 군을 이용하려했는데 실패. 그래서 국내 선교사 살해


제너럴셔먼호사건

미군이 평양 대동강 유역에 와서 통상 요구, 평양 감사였던 박규수가 제너럴셔먼호 파괴


병인양요

병인박해를 구실삼아 프랑스의 로즈 제독이 강화도에 침입

양현수(정족산성) 방어 성공

한성근(문수산성) 방어 성공

외규장각 문화재 약탈됨

직지심경(금속활자로 된 것 중 세계에서 가장 오래된)이 현재 임시반환되어있음


오페르트 도굴사건

독일 상인 오페르트의 남연군(대원군 아버지) 묘 도굴

대원군 협박해서 수교하려했는데 대원군이 안받아줌, 존왕양이(왕실높이고 오랑캐배척)론 대두, 통상 수교 거부 정책 강화


신미양요

제너럴셔먼호사건을 구실삼아 미국의 로저스 제독이 강화도 공격

어재연(광성보, 갑곶)에서 항전

미군이 물러남

전국에 척화비(통상 수교 거부) 건립



3. 강화도 조약(조일수호조규+조일수호조규부록+조일무역규칙)과 개항(근대화 출발?)


배경

흥선대원군 하야(최익현의 상소에 의해), 고종의 친정(왕이 직접 정치)체제 수립 하지만 민씨 정권(대외정책 수정)이 실세

통상개화론(박규수, 오경석, 유흥기)의 대두, 자주적인 개항을 통해 근대화 하자는 사람들(자주적이지 않으면 불평등해지니)

일본내 정한론(대원군 집권 시기에 일본 메이지 천왕이 우리나라에 수교요청했으나 대원군이 무시했더니 조선을 정복하자는 정한론)의 고조

정한론이 대두되어도 청나라가 조선을 봐주고 있으니 일본은 바로 공격 못했음

대원군이 하야하자 운요 호 사건(1875, 일본이 조선 침공)


조일수호조규(불평등, 침략의도가 다분, 자항측치)

조선국은 자주 나라이며 일본과 평등한 권리를 가진다.

청나라로부터 배제하고 일본의 침략의도를 위한 것

조선국은 부산(1876), 원산(1879), 인천(1883)에 개항하고 일본인이 왕래 통상함을 허가한다.

부산:경제적 목적, 원산:군사적(러시아때문)목적, 인천:정치적 목적

조선국은 일본국의 항해자가 자유로이 해안을 측량하도록 허가한다.

주권 침해, 불평등 조약, 특히 군사적 침략 목적

일본국 인민이 조선국 지정의 각 항구에 머무르는 동안에 죄를 범한 것이 조선국 인민에게 관계되는 사건일 때에는 모두 일본 관원이 심판한다.

불평등 조약, 치외법권(영사재판권)


조일수호조규부록

일본 공사의 수도 상주

조선 국내에서의 일본 외교관의 여행 자유

개항장에서의 일본 거류민의 거주 지역 설정(10리)과 일본 화폐 사용

일본 제일 은행 부산지점 생김


조일무역규칙

일본의 수출입 상품의 무관세 및 선박의 무항세

양곡의 무제한 유출 허용


4. 조미수호통상조약(1882, 서양과 조약한 첫 조약, 이후 영국(1883), 러시아(1884, 청을 견제하기위해 독자적 수교), 프랑스(1886, 천주교포교허용)


배경

미국의 수교 요청

조선책략(방러책 제시, 그 방안으로 친중국, 연미국, 결일본)의 유포

청의 알선으로 맺어짐

청의 입장에서는 러시아와 일본 견제하기 위해(청은 일본을 항상 버릴준비하지만 지금 당장 러시아 막아야해서)

청의 입장에서는 조선의 종주권 확인하기 위해


내용

치외법권

최혜국대우(최초 허용)

거중조정(서로 어려울 때 돕자)

수출입 상품에 대한 협정 관세

조차지설정 승인(미국이 원하는 대로 일부 땅 빌려주기도 했다.)

미국이 조선에 보낸 공사 파견에 답례로 미국으로 보빙사 보냄


---------------------------------------------------------------------------------------------------------------------------------------


5. 개화 사상의 형성과 활동


1860년대

통상 개화론

인물

박규수:양반출신, 평양 감사, 북학사상의 대표인물 박지원의 손자

오경석:역관(통역사)출신, 따라서 중인계급(능력에 비해 대우가 안좋았음), 청에서 책 가져옴(해국도지, 영환지략)

유흥기:의관(의사)출신, 따라서 중인계급(능력에 비해 대우가 안좋았음), 백의정승(관복을 입지 않았지만 정승정도로 학문과 인품을 가진)

영향

북학사상(상공업 발달하자, 상대가 누구든 배울게 있으면 배우자)

일본의 문명개화론

청의 양무운동(서양꺼 배우자)

주장

자주적 문호 개방(개항)

서양 열강과의 통상 주장(교역)


1870년대

개화파의 형성(아직은 급진, 온건 구분없이 개화하자고 하는 파, 통상 개화파의 제자뻘)

인물

김옥균(이후 급진), 박규수가 지구본돌려서 나라찝어보라하며, 세상의 중심은 중국이 아니란걸 김옥균에게 알려줌

박영효(이후 급진)

김홍집(이후 온건)

김윤식(이후 온건)

영향

통상 개화론

박규수의 지도

특징

1880년대 정부의 개화 정책 뒷받침


1880년대

개화 정책 추진(양반 중 상당수는 개화에 보수적이었던 상황임)

기존 체제

행정:

의정부(3정승함의제)

6조(실제 행정 업무)

군제:

중앙군(5군영


제도 개편

행정개편, 통리기무아문 설립(의정부와 6조에게 개화 정책 맡길 수 없어서(보수많음), 의정부와 6조 사이에 설립)

전반적인 개화 정책 추진

통리기무아문 내에 12사라고 둠(실제 행정 업무할)

업무:

해외시찰단 파견

수신사 to 일본, 1차(김기수), 2차(김홍집, 조선책략가져옴), 3차(박영효, 임오군란 사죄로)

조사시찰단 to 일본, 국민들 모르게 조용히 감

영선사 to 청, 김윤식, 무기제조법와 근대 군사훈련법 습득, 임오군란때문에 조기귀국해서 그냥 기기창을 서울에 설립

보빙사 to 미국, 민용익, 유길준,

군제 개편

중앙군의 5군영을 축소시켜 2영(무위영, 장어영)

중앙군에 신식군대 별기군 설립

과정 중

임오군란 이후, 민씨정권의 재집권, 친청사대정책(청나라가 임오군란 진압에 도와줬어서)함, 따라서 개화정책의 후퇴

김옥균같은 개화파들이 반발하게됨

따라서 민씨정권의 재집권에 따른 친청사대정책때문에 개화파가 갈라짐, 온건, 급진


----------------------------------------------------------------------------------------------------------------------------


6. 개화 세력의 분열


급진 개화파(개화당=독립당)

인물:

김옥균

박영효

홍영식

개혁 모델:

일본의 메이지유신

개혁 방법:

문명개화론(우리의 제도와 사상까지도 변화시키자, 전제군주제->입헌군주제)

민씨정권이 맘에 안들어함, 억압받음

대외 관계

청과의 사대관계 청산하자.

인원:

소수

비상수단밖에 없다. 갑신정변 일으킴!!!!


온건 개화파(사대당=수구당)

인물:

김홍집

김윤식

어윤중

개혁 모델:

청의 양무운동

개혁 방법:

동도서기론(우리(동양)의 제도와 사상은 유지, 서양의 기술은 수용, 전제군주제 유지!)

민씨정권과 사이가 좋음

대외 관계:

청과의 사대관계 유지하자.

인원:

다수


7. 위정 척사 운동(위정:바른 것(조선, 성리학, 쇄국)은 지키고, 척사:사악한 것(서양, 일본, 서학, 통상)은 배척한다)

(따라서 반외세 반침략적, 보수적인 유생층이 주도, 개화정책에 장애, 근대화의 지연초래)


통상 반대 운동, 1860년대

배경:

서양의 통상 요구(제너럴셔먼호, 병인양요)

주장:

척화(화친(통상을 하자는 새끼들)을 없애자) 주전(서양과 싸워서 이기자)론, 척화 주전론

내수(나라를 지키기 위해선) 왜양(서양을 몰아내야 한다)론, 내수 왜양론

특징:

흥선 대원군의 통상 수교 거부 정책을 지지


개항 반대 운동, 1870년대

배경:

일본의 개항 요구(운요호 사건), 강화도 조약 체결

주요 인물:

유인석, 최익현

주장:

개항 불가론

5불가소 by 최익현

왜양일체론(서양=일본, why:일본과 미국이 통상하니까)

특징:

정부의 강화도 조약 체결에 반대

최익현 제주도로 유배가게됨 ㅠ


개화 정책 반대 운동, 1880년대

배경:

정부의 개화 정책 추진(수신사), 조선책략 유포

주요 인물:

이만손, 홍재학

주장:

영남 만인소(이만손, 만인소:만명이 상소)

만언 척사소(홍재학)

특징:

미국과의 수교 반대

개화파 인사 처벌 요구


항일 의병 운동, 1890년대

배경:

일본의 침략의도(을미사변, 단발령)

주요 인물:

유인석, 이소응

활동:

친일 관리와 친일파 차단

특징:

항일 의병의 시작


8. 임오군란(1882, 임오년에 군인들이 일으킨 반란)


배경:

구식 군대(별기군이 아닌)의 차별 대우, 13개월동안 급료 지연

경과:

흥선 대원군이 재집권

개화 정책 중단, 통리기무아문 폐지, 별기군 폐지, 5군영 부활

구식 군대들이 다 죽이고 다니니 명성황후는 청주에 숨어지내다 영선사로 파견나간 김윤식에게 상황을 알려서 청의 도움을 받음

결과:

청군의 개입으로 임오군란 실패

흥선 대원군은 청에 납치

민씨 정권 재집권

친청 사대 정책

개화 정책 후퇴

청의 내정 간섭 심화

청 to 우리나라, 고문 파견

재정고문:마젠창

외교고문:묄렌도르프

군사고문:위안스카이

청나라 군대가 서울 용산에 주둔하게 됨(서울 용산에 청, 일, 미 순서로 군대가 지금까지 있구나...)

조청상민수륙무역장전 체결

청 상인에게 내륙 통상권 허용(상인의 내륙 통상은 처음임)

제물포 조약 체결(조선과 일본)

별기군 지도자 후리모또 죽였기때문에 배상금 지불

일본 경비대가 공사관 보호명목으로 국내에 주둔

3차 수신사(박영효)파견, 태극기 최초 사용


----------------------------------------------------------------------------------------------------------------------------


9. 갑신정변(1884)


배경:

김옥균, 일본 차관(돈) 도입 실패

청불전쟁->국내에 있던 청나라 군대 빠짐


과정:

우정국 축하연 날 정변시작

민씨 측근들 제거

개화당 정부 세움

14 혁신 정강 발표(아래 내용 모두 중요)

정치쪽:

과거제도 폐지

청과의 사대관계 청산

내각중심의 입헌군주제 실시

경찰제도 실시

경제쪽:

혜상공국(보부상들이 만든, 상권 독점하는 그룹) 혁파(자유로운 상업 활동 위해),

지조법(토지 세금 관한 법) 개혁

재정의 일원화(재정 낭비막기 위해서 재정을 한곳(호조)에서 거두자)

사회쪽:

신분제 폐지


실패:

정변 군대가 250명(일본군200명)뿐이니 고종과 중전(민씨)을 인질로 잡으려고 했음(경우궁 in 창덕궁에다가)

일본:1주일만 버티면, 일본군 보내줄게

민씨가 몰래 청에게 연락함

청:일본군 오기전에 먼저 개입해야겠다.

청군의 빠른 개입으로 3일천하로 끝남


결과:

청의 내전 간섭 심화(위안스카이가 특히)

개화세력 도태(김옥균, 박영효 등이 일본으로 망명감), 개화정책 약화

한성조약 체결(조선과 일본)

배상금 지불

일본 공사관 신축 경비 지급

톈진조약 체결(청과 일본)

청일 양국의 군대 모두 철수하자. 대신 조선에 파병시 서로 통보


실패 원인:

외세의존(일본군 200)

군사기반 취약(총 250)

민중의 외면


갑신정변 이후 국제 정세:

러:조러통상조약->러시아는 남하 정책 기대하고 있겠구나

청:내정간섭 심화

일:조일통상장정(최혜국 대우, 대신 무관세->협정관세로 바뀜, 방곡령만듬, 1883임, 갑신정변 이전임)

영:

당시 우리나라는 청의 내정간섭이 심해서 견제해야겠다->조러비밀협약추진 but 소문남->영국이 버럭함->영국이 거문도 점령

청이 영국보고 빠지라함

따라서

개화인사:유길준, 부들러, 가 한반도 중립화론이 나옴(한반도를 둘러싼 열강의 대립으로 인해)


----------------------------------------------------------------------------------------------------------------------


10. 동학농민운동


복습:

개항(1876)->개화정책(통리기무아문, 5군영->2영, 별기군)->임오군란(1882)->제물포조약(1882)->조일통상장전(1883, 방곡령)->갑신정변(1884)->한성조약(1885)->방곡령사건(1889, 백성들의 생존권 수호)->동학의 교세 확장->동학농민운동(1894)


배경:

방곡령:곡식을 지키자, 일본의 곡물유출 저지, 1달전 선포해야됨

방곡령 사건:

1달전에 선포했으나 일본 행정관리가 늦게 알려서 1달전이 아니라고 우김

정부는 방곡령 철폐하고 배상금 지불하려고 함(임오군란, 갑신정변, 방곡령사건으로 3번째 배상...백성들:ㅂㄷㅂㄷ)

동학의 교세 확장

최제우 처형 이후 최시형의 노력(교리정리(동경대전(성경), 용담유사(노래집)), 교단정비(포접제))

교조(최제우)신원운동:최제우의 억울함 풀어달라, 그리고 포교의 자유 허용해주세요라는 내용

삼례집회(종교운동)->서울에 올라가 복합상소(종교운동)

보은집(척외양창, 외세를 배척하자는, 정치운동)


동학농민운동(1894)의 전개:


1단계(고부민란)

고부(전북지역) 군수 조병갑이 하두 헤처먹어서 전봉준의 농민군을 이끌고 관아 점령->신임군수와 타협후 해산

2단계(1차봉기, 반봉건)

안핵사(민란의 원인을 규명하고 원인을 없애는 직책) 이용태는 고부민란의 배경은 동학이라고 보고 동학 교도 탄압

고부민란과 관련없지만 동학믿는 사람도 탄압됨

전봉준, 김개남, 손화중(남접, 전라도 지역의 동학도들) 중심으로 농민군 봉기

호남창의 대장소 조직->4대 강령과 격문 발표

황토현 전투->전주성 점령(호남 최대의 도시 및 조선의 혈족 근원지(전주 이씨))

정부:

청나라에게 지원 요청(5.5 출병, 3천명), 일본출병(5.7, 2만명)

동학과 협상시도

전주화약이 체결(5.8)

동학의 요구 수용(정부가 교정청 설치) 및 청일 철병요구 but 일본이 거절함

3단계(전주화약)

전라도 일대에 동학이 집강소(민정자치기관) 설치->치안, 행정 담당

폐정 개혁안(12개조, 반봉건과 반외세와 공사채(공채+사채)를 무효화, 토지분배)를 실천해나가고자 함

4단계(2차봉기, 반침략)

일본군의 경복궁 점령, 내정 개혁 강요(민씨 정권 퇴진, 교정청 폐지, 청일전쟁발발(즉 청일전쟁은 동학농민운동을 계기))

일본의 교정청 폐지로 2차 봉기 시작

전봉준+손병희의 남북접 연합군 조직, 삼례에서 재봉기, 논산집결

공주 우금치 전투(동학vs(일본+관군+민보군(양반들이 조직한), 즉 1:3으로)에서 패배

동학의 무기는 죽창, 일본의 무기는 서양식 총과 대포

순창에서 전봉준 체포


영향:

아래로부터의 민족운동

조세제도와 토지제도 개혁 주장

반봉건(이후 갑오개혁에 영향)

반외세(이후 항일 의병, 활빈당에 영향)

대외적으로는 청일 전쟁에 영향


한계;

농민중심이어서 다른 계층과 협력이 안됐다.

근대국가로의 구체적인 방안이 부족했다. 폐정 12개혁안을 보아도.


---------------------------------------------------------------------------------------------------------------


11. 갑오을미개혁(1894~1895)

제1차 갑오개혁

동학농민운동->전주성 점령->교정청 설치, 일본 철병요구->일본군 경복궁 점령->민씨정권퇴진, 홍선대원군 추대->내정개혁(김홍집 내각) 추진->청일전쟁발발

1차 김홍집 내정개혁(일본주도)

-군국기무처 설치

-교정청 폐지

제2차 갑오개혁(청일전쟁의 우세로 보이는 중)

일본이 직접 내정개혁 주도하려함->홍선대원군 퇴진, 군국기무처 폐지, 2차 김홍집, 박영효(친일내각) 연립내각

2차 김홍집, 박영효 연립내각(일본주도)

-고종에게 독립서고문 발표 권유

-고종에게 홍범14조 반포 권유

(주 내용: 청과 민씨 왕실의 정치 개입 배제)

제3차 을미개혁(청일전쟁, 일본 승, 시모노세키조약(청일, 요동반도, 타이완을 일본이 할양(넘겨받음), 조선 주도권 일본이 차지)

삼국간섭(러,독,프)가 일본에게 요동반도 청에게 반납하라 하여 반납함(민씨 왕실은 러시아가 실세임을 눈치깜)

박영효 반역음모사건에 휘말려 일본으로 망명가게 됨->2차 갑오개혁 중단됨->정부에서 3차 김홍집 내각 구성

3차 김홍집 내각(친미, 친러)

-친일 세력 제거

그러자 일본이 전세역전을 위해 을미사변(명성황후 살해)

3차 을미개혁

-을미사변

-4차 김홍집 내각(일본주도)


1차 갑오개혁(1894)

내각:1차 김홍집 내각

정치:

과거제도 폐지(이때 제도적으로 사라짐)

군국기무처 중심(왕실과 정부사무의 분리)

개국 연호 사용(조선왕조건국(1392)를 기준으로 개국 502년, 청과 사대관계 끝낸다라는 의미)

6조->8아문으로 개편

경무청 신설(경찰)

경제:

재정의 일원화(탁지아문 in 8아문, 갑신정변때는 호조 in 6조에서)

은본위제

조세 금납화

도량형 통일(무게, 길이, 넓이)

사회:(동학으로부터 영향받음)

공,사 노비 제도 폐지

조혼, 고문, 연좌제 폐지

과부 개가 허용


2차 갑오개혁

내각:2차 김홍집 박영효 연립 내각

정치:

군국기무처폐지

내각제 시행(의정부가 내각으로 개편됨)

8아문을 7부로 바꿈(ex, 탁지아문이 탁지부로 바뀜)

8도(지방)을 23부로 쪼갬

지방관의 권한 축소(행정권, 군사권, 사법권 중 군사권과 사법권을 없앰)

사회:

근대 재판소 설치(사법부 독립을 의미함)

행정과 사법 분리

교육:

교육 입국 조서 반포(각종 관립 학교가 세워짐, 한성사범학교가 첫 학교(교원 양성 위한))


3차 을미개혁(1895)

내각:4차 김홍집 친일 내각

정치:'건양' 연호 사용

사회:

단발령, 태양력, 종두법 도입

우편 사무 재개(갑신정변때 폐지된)

교육:소학교 설립


---------------------------------------------------------------------------------------------------------------------------------


12. 독립협회(1896~1899)


배경:

을미사변, 3차 을미개혁, 단발령, 을미의병 등으로 고종은 러시아 공사관 아관파천으로 도망

친러 내각 시작됨

열강에 의한 이권 침탈 심각

이러한 상황을 국민들은 모름(언론이 없으니)

갑신정변으로 미국에 가있던 서재필이 국내로 돌아와 독립신문(최초 민간 신문, 한글 영문판 둘다, 국민계몽운동주도)만듦(1896.4)

독립협회(1896.7), 독립문, 독립공원의 조성을 위해서 협회가 결성됨

서재필 중심으로 다수가 참여(개화 지식인, 정부관료, 시민 등)

자유 민주주의 보급, 자주 독립 국가 건설을 목표(따라서 독립문 등의 건설하려고 함)

강연회, 토론회 등 함(for 자유주권, 자유민권, 자강개혁(스스로 강한 나라))

고종의 환궁을 위해 노력함

대한제국(고종 환궁하여서)건립(1897)

고종 환궁(경운궁=덕수궁)

고종 황제즉위식(원구단에서)함, 즉 청과의 사대관계 ㅂㅂ, 자주국가임을 천명!

연호:광무

광무개혁 추진

구본신참의 원칙(옛것을 근본, 새것을 참고)을 바탕, 동도서기론적이네, 점진적, 복고적 성격

당시 보수내각은 외세의존적 정책에 기대고, 이권 침탈에 무방비

광무개혁 내용(대한제국 동안의 모든 개혁)

정치:

황제권 강화를 위해 대한국국제 선포(1899, 즉 헌의6조 이후 보수내각 찌라시 이후 선포한 것)

밑의 헌의6조(입헌군주제)에서 보수파의 모함으로 고종이 마음이 바뀌었음을 암시

지방 제도 개편

23부->13도(지금의 도)

해삼위 통상사무, 간도 관리사 파견->지역 교민 보호

경제:

양전사업(not 전국)->토지 소유권인 지계 발급

상공업 진흥책(공장, 회사, 금융기관 등 세우는데 도와줌)

기타:

실업학교

한성중학교

광제원(종합병원)

원수부(고종이 군권 장악)

의의:

점진적, 복고적이라 성장의 한계가 있었음

보수내각들이 독립협회 탄압

열강의 간섭을 완전히 배제할 순 없었다.

만민공동회(1898.3, 최초 민중 집회, 약1만명이 서울에서 참석, 당시 서울시 인구가 20만)

열강의 내정간섭과 이권침탈 규탄, 저지하자

ex)러시아:군사교관, 재정고문 파견, 한러은행개설, 부산 절영도 조차 요구, 목포 진남포 섬 매입하려함

정부는 만민공동회의 결의를 수용하게 됨, 위의 러시아 요구 다 취소함

정부는 독립협회 탄압, 서재필이 강제 출국 됨

독립협회는 자유민권운동을 하게 됨

신체의 자유

재산권의 자유

언론, 출판, 집회의 자유

독립협회 탄압하지말고 보수내각 퇴진 요구

정부는 또 쫄아서 보수내각 퇴진 요구 수용

박정양 내각 출범, 박정양은 독립협회에 우호적

관민공동회(1898,10,'관'은 정부를 가리킴, 정부대표 박정양이 참여함)

박정양+독립협회+시민

헌의6조(의회 중심의 입헌군주제) 채택

박정양이 고종에게 제출, 고종의 재가(수락)

중추원(의회설립법안) 관제 발포

의회설립운동 추진

관선(정부, 25명), 민선(독립협회 사람들로 25명, 선거로)

국민참정권 운동이 실현된 사례(선거로 뽑으니)

보수파의 모함(익면선 사건)

첫 선거날 독립협회는 고종폐위, 공화정(박정양을 대통령으로 한)을 만드려고 한다는 찌라시 유포

결국 고종은 독립협회, 만민공동회, 헌의6조 다 취소, 군사 동원할 정도,

의의:

독립협회는 민중의 지지가 있었음에도 불구하고 실패(정부 군인에 의해), 갑신정변, 갑오개혁은 민중의 지지가 없었지만

헌의 6조 내용:

외국인에게 의지하지 말고, 과민이 합심하여 황제권을 공고히 할 것(not 강화, but ㅇㅈ)

내각과 의회 중심

재정은 탁지부 일원화


-------------------------------------------------------------------------------------------------------------------------------


13. 항일의병전쟁


배경:

일제의 국권침탈(1904~1910)

러일전쟁->을사조약(1905, 외교권 약탈)->정미7조약(고종퇴위, 군대해산)->한일병합(1910)

일제의 국권침탈 시기에 민족의 국권수호운동전개(사람마다 애국하는 방법이 달라서 2가지로 갈라짐)

보수적 유생층

항일의병전쟁

을미의병(1895, 시기는 안맞지만 의병테마라서 함께넣음)

을사의병(1905)

정미의병(1907)

위정척사사상기반

개화지식인

애국계몽운동

애국단체

교육,문화,산업

개화사상기반


항일의병전쟁

을미의병(1895)

배경:을미사변, 단발령

의병장:유인석, 이소응

활동:동학농민군의 잔여세력참여, 친일관리와 친일파 처단

결과:

단발령 철회 조건으로 해산 권고(동학농민군은 해산 못함 고향으로 돌아가면 반군으로 찍혀서 맞아죽음)

이후 동학농민군은 활빈당 조직

아관파천

을사의병(1905)

배경:을사조약

의병장:민종식, 최익현, 신돌석

활동:을사늑약(일방적이었으니 조약이 아니라 늑약이다!)폐기, 을사5적 처단

결과:

평민출신 의병장 등장(신돌석)

활빈당 합류하여 활빈당은 사라짐

정미의병(1907)

배경:고종퇴위, 군대해산

의병장:이인영, 허위

활동:

해산 군인의 의병합류->의병전쟁화(화력 개쌤)

13도 창의군 조직->서울진공작전 펼침(실패로 끝나지만), 각국 영사관에 협조문 발송

각 지역에서 의병 활발

호남에서 가장 활발

일제가 남한대토벌작전 전개(호남지역 의병을 잡기위해)

우리나라 의병들이 만주, 연해주로 대거 이동 ㅠㅠ, 이후 1920년대 무장독립운동에 근간이 됨

항일의병전쟁의 한계

반외세, 반침략적 민족운동이지만,

진행될수록 전국적으로 진행되며 전투력도 강화되고 평민들의 주도권이 커짐

보수적 성향을 아직 갖고선

유생 의병장의 보수적 성향이 문제(평민출신 의병장은 배척하자는 둥 개소리함)

이인영 13도 창의군 대장이, 부친상(3년)때문에 고향으로 내려가겠다함


---------------------------------------------------------------------------------------------------------------------------


14. 애국계몽, 단체의 활동(개화사상, 사회진화론의 영향을 받음)

사회진화론

단점:

인간 세계도 약육강식 바탕으로 적자생존이어야 한다.

우리가 일본에게 침탈당한 것은 실력이 없어서이다. 실력을 키워야 한다.

조선이 실력 양성, 국력강화할 때 일본도 실력 양성, 국력강화하면?

사회진화론 관점으로 실력을 기르는 것은 좋지만, 그것만으론 독립하긴 어렵다.

보안회(1904)(보국 안민 회, 나라를 지키고 백성을 지키자)

유생과 관료 출신 중신

일제의 황무지 개간 요구 반대 투쟁 전개->농광 회사 설립

헌정 연구회(1905)

독립 협회 활동 계승

입헌 군주제 수립을 통한 민권 확대 주장

일진회의 친일 행위 규탄, 을사조약 반대 운동(but 일제 탄압으로 해산)

대한 자강회(1906)

헌정 연구회 계승

교육 산업을 통한 실력 양성, 강연회 개최 등

고종 퇴위 반대 운동(but 일제 탄압으로 해산)

대한 협회(1907)

대한 자강회를 계승하여 조직

일진회와 제휴하는 등 친일적 색채의 한계를 드러냄

신민회(1907)

결성:안창호, 양기탁 중심으로 비밀 결사 단체

목표:국권회복, 공화정(대통령!)의 근대 군민 국가 건설

활동:

교육:태극서관(서점), 오산학교, 대성학교

식산흥업:자기회사, 연초공장(담배), 모범 농촌 건설 계획

독립군 기지 건설:남만주 삼원보, 밀산부의 한흥동에 건설

즉 무장독립하자는 것

폐지:

일제가 날조한 105인 사건으로 해체

안명근이 독립운동 자금 모금하다가 일제 밀정에게 걸려들어서 체포, 인원 조회해보니 안중근 사촌이네?

안명근 배후에 큰 세력이 있을 것 같아서 수사 키웠는데 없네?

안명근이 퇴라우찌 암살 미수사건의 주범으로 날조함

안명근을 지원하고 관계있는 사람 다잡아들여라

600여명 검거 및 체포, 그 중 105인을 구속, 신민회 해체됨


--------------------------------------------------------------------------------------------------


15. 열강의 경제 침탈(청vs일본 상권 경쟁, 아관파천이후부터!, 최혜국대우규정때문이 크다)


1870년대(이전에는 청이 다 잡았음)

조약:

강화도 조약(치외법권),

조일 수호 조규 부록(개항장 10리이내, 일본화폐),

조일 무역 규칙(무관세, 양곡수출입 무제한)

(3개를 다 합쳐서 강화도 조약으로 봐야함)

특징:

거류지 무역(10리 제한)

우리나라 상인, 객주나 보부상들이 이것을 이용함, 중계무역을 통해서

약탈 무역

우리나라 곡물을 약탈(입도선매(자라고 있는 벼를 미리 돈받고 팜), 고리대)

중계 무역

영국산 면제품을 일본이 사서 우리나라에 팔아서 곡물을 사감

일본 상인의 무역 독점

1880년대(임오군란 등)

조약:

조청상민수륙무역장점(청상인 내륙 진출, 10리보다 더했지)

조일 수호 조규 수약(50리로 확대, 2년후 100리 더확대)

조일통상장정(최혜국대우, 대신에 협정관세와 방곡령 적용)

특징:

청상인의 내륙 통상권

외국인의 내륙 진출 활발(by 최혜국 대우)

일본의 내륙 진출 허용

청과 일본의 상권 경쟁

1890년대

조약:

70년대 일본이 상권을 많이 지배, 80년대 청이 빠르게 따라잡으니 청일 전쟁 발발, 일본 승리

특징:

일본 상인의 상권 독점

일본 제일은행 지점 설치

대한제국의 금융 장악


일본의 이권침탈(특히 금융)

화폐정리사업(1905)

일본인 제정고문 메가다 주도

대한제국의 화폐발행권을 중단, 전환국 폐쇄

일본제일은행권 사용 권고

백동화(대한제국의 구권) 중 30% 이상은 위조화폐이므로 일본제일은행권으로 다 바꿔줄 수 없다고 함

상태가 양호한 것(갑종)은 100%, 을종은 40%, 병종은 0%

따라서 국내상공업자, 민족은행 붕괴

금본위제 시행(갑오개혁땐 은본위제)

토지약탈

청일전쟁 이후부터 일본의 대자본가들이 와서 호남지방의 토지를 적극적인 매입하여 대농장 운영

(방곡령은 사가는걸 막는거니까 직접재배하겠다는 것)

러일전쟁 이후부터 군용지와 철도부지 확보하기 위해 국유지, 역둔포(철도 주변 땅) 약탈

동양척식주식회사(1908) 설립됨(약탈한 토지 관리하는 회사)

일본농민의 한국이주 권장


러시아:경성광산채굴권, 종성금광채굴권, 두만강삼림채벌권, 울릉도삼림채벌권, 압록강삼림채벌권(아관파천최혜국대우때문에 스노우볼굴러감)

일본:경인선철도(1899, 미국->일본), 경부선철도, 경원선 철도, 경원선철도, 경의선철도(프랑스->일본), 직산금광채굴권

침략도구로 활용하기 위해 철도에 집착(경부선, 경인선은 러일전쟁중)

미국:전차, 전등, 전화, 운산금광채굴권, 갑산금광채굴권


-----------------------------------------------------------------------------------------------------------------------------------


16. 경제적 구국운동


방곡령(1889)

일본의 곡물 유출->식량부족, 곡물 가격 폭등(다른 물가도 빠르게 오름)

방곡령 철회, 배상금 지불->동학농민운동

상권 수호 운동

조청상민수륙무역장정 체결이후 외국 상인의 내륙 진출 후

1880년대:객주, 보부상들이 대동상회, 장통회사 등의 상회사 설립

1890년대:시전 상인 주도로 황국 중앙 총상회 조직(1898)(외국 상인들의 불법행위 제한위해)

이권 수호 운동(1898)(자주 국권 운동)

아관파천 이후 열강의 이권 침탈 심화->독립협회, 만민 공동회 등

정부는 독립협회의 요구를 수용->이권 침탈 저지

황무지 개간권 반대 운동

보안회 주도, 농광 회사 설립, 일제의 황무지 개간 요구 저지

국채 보상 운동(1907)

일제의 강제 차관 도입->대한제국의 재정 예속화(1300만원), 이 1300만원을 국민들이 쪼개 갚자는 운동

서상돈, 김광재 등이 대구에서 시작->전국으로 확산

대한 매일 신보, 황성 신문, 제국신문 등이 적극적 참여

부녀자들도 적극적인 참여

일제 통감부의 탄압으로 실패

주도한 양기탁을 공금횡령죄로 구속함(한적 없는데)

차관 더 들여와서 3300만원됨

국민들 의지 꺽임


note)평등의식

동학의 인내천(남존여비, 과부의 재가 허용 등)

천주교(1886년 프랑스와의 조약이후 천주교 포교 허용)

개신교(한글 교육, 미신 타파 등)

갑신정변(신분제 폐지, 문벌 폐지, 등)

동학농민운동

갑오개혁(제도적으로 신분제 폐지, 갑신+동학농민운동에서 요구한 것들 수용한)을 통해 양반중심이 해체됨

갑오개혁 이후인 독립협회와 애국계몽운동에서는 신분제 폐지를 외치진않음, 단 평등의식을 확산 시키는데 노력함

(시전상인이 만민공동회의 의장이 되기도함, 관민공동회때 백정사람이 참여한다는 등)


-----------------------------------------------------------------------------------------------------------------------------


17. 근대 문화의 발달


인쇄

방문국

최초 신문인 한성순보 발간(갑신정변으로 중단)

광인사

1884, 최초의 근대적 민간 출판사,

통신

우편

우정국(갑신정변으로 중단)

을미개혁 후 다시 시작, 청나라를 통해 한성전보총국시작

전화

경운궁(덕수궁), 1895년에 처음에 깔림

교통

1898, 미국과 협정한 한성전기회사(지금 한전의 전신)를 설립

이후 전차

(전등은 이전에 들어옴)

의료

광해원, 최초의 서양식 근대병원

이후 제중원으로

이후 세브란스의 투자로, 세브란스병원됨, 현재는 연세대 의료 병원(연희전문+세브란스=연세)

광재원, 의학학교

대한의원, 의학학교

건물

독립문, 덕수궁 등 서양식 건물 나옴

근대는

국민의 생활 발전 but 일본의 침략도구

경인선1899년, 전차(1899), 전등(1887, 민영익이 보빙사로 미국가서 충격먹고 미국정부에게 부탁, 3KW짜리 간이발전기 민영익에게 줌)


---------------------------------------------------------------------------------


18. 근대교육과 학문의 보급

원산학사(1883)

덕원부사 정현석과 지역 주민들이 함께 설립한 최초 근대적 사립 학교

근대학문+무술교육

동문학

영어강습소

육영공원(1886)

정부에서 설립한 최초의 관립학교(지금의 국립학교)

헐버트, 길모어 등의 외국인 교사들 있었음

상류층 자제에게 근대학문 가르침

교육입국조서 반포(2차 갑오개혁때)

근대적 교육제도가 마련,

소학교, 중학교, 사범학교 등의 관립학교가 세워짐

한성사범학교(교원양성)->소학교->중학교, 단계적으로 세워짐

사립학교

개신교 선교사가 세운, 이화, 배제, 숭실

애국계몽운동가가 세운

학회설립


-----------------------------------------------------------------------------------


19. 언론 기관의 발달


한성순보(1883)

최초 신문, 방문국에서 발간, 순한문, 10일간격, 관보적(정부가 발간)

갑신정변때 방문국 파괴로 중단

한성주보(1886)

방문국 보수해서 새로 발간

국한문 혼용체

최초 상업광고 실림

재정난으로 중단(1888)

독립신문(1896)

최초의 민간 신문

격일발간이었는데 매일 신문이 매일 발간하니까 따라 바뀜

한글판 영문판 두개 발간

독립협회 해산 이후 폐간(1899)

매일신문(1898)

최초의 일간 신문

순한글

황성신문(1898)

국한문 혼용체

항일의식이 아주 강해서, 장지연의 '시일야 방성 대곡'을 게재(을사조약을 다룬 내용)

제국신문(1898)

순한글

대한 매일 신보(1904)

양기탁과 영국인 베델(한글 이름 배설)에 의해 창간

한글판 영문판 이었다가 국한문 혼용체로 바뀜

신민회의 기관지로 활약, 국채 보상 운동의 주도적 역할

가장 독자많고 인기 많았는데 1910년 일제가 총독부 기관지로 바꿈

만세보(1906)

천도교의 기관지,

국한문 혼용체

(매일, 황성, 제국, 대한 매일, 만세보, 5개 모두 1910년 나라를 잃으면서 다 끝남)


-----------------------------------------------------------------------------------


20. 국학 연구(을사조약이후 국권 상실에 따른 위기감 고조, 민족의식과 애국심 고양을 위해)

역사연구(근대계몽사학, 일종의 애국계몽운동의 일환이다.)

구국위인전 저술

이순신전 을지문덕전 강감찬, 등

위국흥망사 소개

미국독립사, 월남망국사 등

신채호, 대한 매일 신보에 독사신론을 발표(우리나라 역사를 어떻게 볼 것인가)

근대 민족주의 사학의 연구 방향을 제시

박은식, 민족혼을 강조, 최남선과 함께 조선광문회 조직

민족의 고전(춘향전, 심청전 등)을 간행, 보급

국어연구

한글 보급

국한문혼용신문

한글전문신문

국문연구소(1907), 국어문법정리 및 연구


-----------------------------------------------------------------------------------


21. 문예의 새 경향

문학에서의 변화

신소설 등장

한글

언문일치

내용이 남여평등, 자주독립의식 등

대표작:이인직의 혈의누, 안국선의 금수회의록(동물 8마리가 나와서 인간을 한심하게 봄, 그 중 여우가 친일파, 제국주의 비판, 출판금지당함)

신체시 등장

대표작:최남선의 해(바다)에게서 소년에게

외국번역판도 들어옴(로빈슨, 이홉우화 같은)

음악에서의 변화

찬송가

창가(서민들 사이에서, 외국곡에 우리 가사를 붙여 부름)

연극

신극

최초의 서양식 극장, 원각사

종교

천주교

가장 나중에 포교허용됨

개신교

천도교

동학에서 발전, 따라서 민족종교

만세보 발간

불교

한용운, 조선불교유신론을 내세움

일본이 1911년에 사찰령으로 절의 주지스님을 모두 친일파로 바꾸는데 조선불교유신론으로 우리 불교의 자주성을 회복하자!

대종교

단군신앙을 토대로 함, 따라서 민족종교

일제의 탄압이 더 강했다. 따라서 교단을 만주로 이동, 만주에서 항일무장독립운동을 펼침

유교

박은식, 유교구신론을 내세움

유교가 민족주의 민주주의를 바탕으로 해야한다는 주장, 그래야 발전할 수 있다.


---------------------------------------------------------------------


21. 국권침탈과정


러일전쟁(1904)

배경:

러시아의 용암포 점령(압록강 삼림채벌권 근처)

경과:

대한제국은 중립선언

일본의 선제공격으로 전쟁 시작

결과:

한일의정서(1904),

대한제국의 중립선언을 일방적 파기, 일본 도와라

일본의 동의없이 제3국가와 조약 금지

한국의 군사적 요충지, 시설 점령

시마녜현고시 40호 발표

독도강탈

제1차한일협약(1904)

일본이 고문파견

메가다(재정고문)

화폐정리사업

스티븐슨(외교고문)

내정간섭


을사조약(1905)

배경:

일본이 열강들의 묵인을 허락받음(제1차한일협약과 을사조약 사이에)

가스라 태프트 밀약(미국은 필리핀, 일본은 한국 먹자!),

제2차 영일동맹(영국은 인도를, 일본은 한국을)

러일전쟁, 일본승리로 끝남,

내용:

외교권 박탈

통감부설치(초대 통감장 이토 히로부미)

결과:

을사조약반대운동

을사의병, (민종식, 최익현, 신돌석)

언론, (장지연)

상소, (이상설, 조병세)

순국(나라를 위해 목숨바침), (민영환)

고종이 한 일

미국에 특사(헐버트) 보냄

but 가스라 태프트 밀약(미국과 일본)때문에 도움안됨

네덜란드에 특사(이상설 이휘종 이준) 보냄(헤이그 특사)

이준이 현지에서 목숨을 잃고 나머지 두명만 돌아옴

한일신협약(1907)

배경:

헤이그특사파견을 구실로

내용:

고종퇴위, 순종즉위

정미7조약(=한일신협약)

각 행정부처에 일본차관 배정

군대해산

기유각서(1909)

내용:

사법권 박탈

감옥사무권 박탈

경찰권박탈(1910,6)

한일병합(1910.8)

내용:

모든 국권 강탈

조선총독부설치(초대 총독, 데라우찌, 일본 현역 대장출신으로 절대권력)


-----------------------------------------------------------------------------------------------


22. 일제의 식민통치(1910~1945, 일제 36년)


시기구분!

1910.8 한일병합

1919.3 3.1운동(분기점)

1931   만주사변(분기점)

1945   해방


1910~1919,(1910년대, 헌병 경찰에 의한 무단통치,민족운동 탄압을 위해,토지조사사업(땅뺏자))

1919~1931,(1920년대, 문화통치,민족운동을 분열(우리끼리 싸우기위해)시키기 위해,산미증식계획(쌀뺏자))

1931~1945,(1930년대, 민족말살통치,인적자원수탈(사람뺏자))

받는 강도가 더욱 커지고 교활해지고 있다.


1910년대 식민 통치

무단통치

헌병, 경찰에 의한(민족 운동 탄압 위해)

조선총독부:일제 식민 통치의 중추 기관, 총독부 산하에 중추원(총독부자문 기구인데, 친일파 회유하기위한 기관, 활약은 특히 없음)

헌병 경찰제:군인 경찰, 즉결 처분권, 태형권(조선인만 대상) 가짐

위협적인 통치:관리, 교원들이 칼을 차고 다님, 집회와 결사의 자유 박탈

독립 운동 탄압:105인 사건 조작(따라서 신민회 해산)

토지조사사업(1912~1918)    

목적:근대적 토지 소유권 제도의 확립(but 실제 목적은 토지 약탈과 지세의 안정적 확보)

방법:복잡한 절차와 기한부 신고제

결과:

미신고 토지, 공공 토지, 문중 소유 토지(~성씨 ~파, 를 문중이라 함), 황무지 등을 총독부가 소유

동양 척식 주식회사가 탈취한 토지 관리, 일본인에게 헐값으로 줌

농민들의 경작권, 소작권 상실->기한부 계약에 의한 소작농으로 전락

(전통적으론 지주가 농민을 함부로 바꾸지 않았음(경작권 보장해줌), 농민은 장기적으로 농사해옴)

(토지조사 이후, 지주가 친일파 일본인으로 바뀜, 지대를 많이 달라고 함, 그래서 농민들이 항의하니까 지주는 농민 계약제로 바꿈)


산업침탈

회사령:허가제 실시(총독부의 허락필요 회사설립하려면)->민족 기업 성장 억제, 일제의 상품 시장화

전매제도:인삼, 소금, 담배 독점

삼림령(1911), 어업령(1911), 광업렵(허가제)->한반도의 원료 공급지화

기타

조성총독부 건물은 김영상 정부, 1995.8.15때 철거


1920년대 식민 통치

문화통치

배경:

1919.3.1운동

국제여론이 일본에게 악화(3.1운동때 일본인들이 많이 죽임)

유화정책하려고함(사실상은 식민통치를 은폐하는 기만정책일뿐이게 된다.)

내용:

헌병->보통 경찰 에 의한 문화 통치

민족 운동 분열

타협적 민족주의(일제랑 타협하자, 민족개조론, 자치운동)

비타협적 민족주의

허구성(기만정책)

문관 출신의 총독도 임명가능(이전엔 현역 대장출신에만 한했는데) but

실제로 문관 출신이 임명된 사례가 없음

보통 경찰제 실시 but

경찰 인원과 장비를 증가

고등 경찰제(사복경찰, 조선인만 임명)

독립운동가 색출위함

치안유지법(집회ㄴㄴ 등)

한글 신문 발행 허용 but

검열 삭제 정간(발간중지)

교육 기회 확대 but

초등 교육, 실업 교육에만 치중

참정권 부여 but

도,부,군,면에 협의부 설치하지만 친일 인사들로 구성

결과:

기만통치인지 모르는 사람들은 식민 통치가 괜찮다고 생각하게끔 만들어서 민족운동이 분열하게 됨


산미 증식 계획

배경:일본의 공업화 진전 따라서 쌀값이 오름(1918년에 대규모 폭등)

내용:

개간, 간척, 수리 시설 개선하여 증가된 쌀 생산량을 일본이 가져가겠다는 것

1934 경제공황으로 일본 내 쌀값 폭락하여 중단하였다가 이후 태평양 전쟁 등으로 인해 다시 재개

결과:

증산량보다 수탈량이 큼

농민들의 식량 사전 약화하여 만주산 잡곡(가축용 식량을)으로 식량 대체하게됨 ㅠ

수리 조합비, 품종 개량비를 농민에게 전가(원래는 총독부가 부담하거나 지주가 부담하기로했었는데)

농민몰락

화전민, 유량민, 소작농의 증가, 만주나 일본으로 이주

소작쟁의(지주와 소작인 사이에 벌어지는 투쟁) 발생

(1920년대까지는 생존권 투쟁, 1930년대에는 항일투쟁(사회주의세력과 만나서)으로 변모하게 됨)

일제의 농촌 진흥 운동 실시(1932~1940)

농민들이 토지를 가지도록 일본이 도와주겠다!는 내용

사회주의 확산을 방지하기 위함

산미 증식 계획 재개를 위함

산업 침탈

허가제 -> 신고제로 바뀜

민족 기업들이 생기나, 일본 독점 자본의 진출이 허용됨

일본 상품의 관세 철폐(1923)

1883 조일통상장정때 생긴 협정관세생긴 후로 1923년부터 무관세로됨

일본 상품들 많이 들어옴

신은행령(1927)(한국인 소유 은행의 강제 합병)


1930년대 식민 통치


민족 말살 통치

배경:

경제 공황(1934, 미국에서, 과다공급으로 유효수요부족으로 회사는 빚못갚고 망하고 회사에게 돈빌려준 은행도 망하고)

미국의 해결책:뉴딜정책(국가가 돈 왕창때려넣어서 해결)

영국, 프랑스의 해결책:블럭경제(식민지에서 유효수요를 찾음)

독일, 이탈리아, 일본(3나라(Axis Powers 추축국)는 산업혁명의 후발주자)의 해결책:침략전쟁 도발(2차 세계대전 발발)

내용:

침략전쟁

만주사변(1931, 중국으로 만주를 빼았아서 만주국을 세움)

중일전쟁(1937, 난징 대학살해도해도 중국 항복 안하고 계속 뻐기는 도중에 태평양전쟁도 발발)

태평양전쟁(1941, 일본이 진주만 습격으로 시작, 4년간 지속)

이러한 상황에서 한국인을 동원하기 위한 동화 정책(한국인이 반발하니까 민족성 말살하고 일본인=한국인 동화 정책)

내선일체(내=일본 선=조선 은 하나다!)

일선동조론(일=일본 선=조선 은 조상이 같다 그래서 하나다!)

황국 신민 서사(학교에서 아침마다 황제찬양)

궁성요배(일본 성을 향해 절하는 것)

신사참배(일본인이 많이 믿는 종교로 '신도'가 있는데 '신사'란 왕실조상, 종교대상, 공로큰 사람들을 '신'으로 모시는데, 신을 모시는 사당을 신사라 한다. 그 중 야스쿠니 신사란, 우리나라로 치면 국립묘지급, 야스쿠니 신사에는 태평양 전쟁의 주범들도 포함되어있는데, 신사참배를 아직도 한다는 것의 의미는 태평양 전쟁을 일으킨 것에 잘못을 늬우치지 않다는 것)

내선일체

국어, 역사 교육 금지

창씨개명(성씨와 이름을 일본식으로 바꾸란 것, 창씨개명을 하지 않으면 유학, 시험 등 못함, 윤동주도 그래서 창씨개명함)

동아일보 조선일보 폐간

경제적 수탈

병참 기지화 정책

전쟁 물자 조달 필요

중화학 공업, 군수 공업 육성(북부지방 중심, 지하자원이 많아서)

남면 북양 정책

남쪽은 면화

북족은 면양 강요

(공업 원료 부족에 대비)

국가 총동원령(1938)

중일 전쟁 후 침략 전쟁을 위한 자원 수탈

식량 수탈(산미 중식 재개, 미곡 공출, 식량 배급제도)

물자 수탈(금속제 공출, 기름 공출)

인적 수탈

지원병제(1938, 일반인 대상)

징용제(1938, 일본에 일하러, 노동력임 군력이 아니라)

학도지원병제(1943, 학생들도 지원 가능)

남자는 징병제(1944)

여자는 정신대(1944)


------------------------------------------------------------------------------------------------


23. 1910년대 민족운동의 전개


1910년대 민족 운동(무단통치시절)

국내:비밀결자조직의 활동

독립의군부

임병찬(고종의 밀령을 받음) 중심

목표:복벽주의(다시 새로운 나라를 건설하자! 즉 조선 부활, 순종을 추대하자!) 그래서 총독부에 국권반환요구서 제출했지만 실패

대한광복회(1915)

한말의병계열+애국계몽운동계열

박상진, 김좌진, 등등등

군대식 조직 운영

군자금 모금활동

목표:공화정

국외:독립운동기지건설(1910년 이전에 신민회(1907~1910)에서 지원했음)


1919.3.1운동

배경:

윌슨의 민족자결주의(미국 대통령 윌슨이 약소국가들 스스로 독립하고싶으면 하고 식민지로 살고 싶으면 살아라!)

but 1차대전 패전국에만 적용, 한국은 적용 안됨

고종의 서거(1919.1.21), 독살설이 유포됨, 3.3일이 고종의 인산일이나, 3.1로 땡겨서 운동이 일어남

대한독립선언(1919.2.1), 만주 지린에서

2.8독립선언(1919.2.8), 도쿄 유학생들 중심으로 도쿄에서

전개과정:

1차(점화단계, 3.1~3.10)

민족 대표들이 기미독립선언서 배포, but 대표들이 경찰들에게 연행되어 잡혀들어감

서울과 지방에서 학생, 시민이 중심이되어 거족적인(같은 핏줄인 모든 사람들이 참가하는) 만세시위)

비폭력주의

2차(도시확산, 3.11~3.20)

학생, 상인, 노동자층이 본격 참가하여 전국의 도시로 확산

학생들이 주도적, 상인들의 철시 운동(가게 문닫고 운동참가)

3차(농촌확산, 3.21~4.10)

만세 시위 운동이 주요 도시에서 전국 각지(시골까지)로 확산

농민들의 시위 참가로 시위 규모 확대, 식민 통치 기관 파괴!!!!!!!

비폭력주의가 무력적인 저항으로 변모

(농민들의 입장을 다시 생각하면 토지조사사업(1912~1918)에 따른 불만고조때문)

해외확산

만주, 연해주, 미주, 일본 등에서 만세 시위 전개

결과:

일제의 무자비한 탄압

예를 들면 수원 제암리학살사건(40여명의 마을 주민을 교회로 다 모은 다음 다 불질러서 죽임)

일본의 국제 여론이 안좋아져서 문화통치로 바뀌게됨

민족 운동의 다양화(사회주의 사상이 대두하게 돼서)

학생운동, 청년운동, 여성운동, 농민운동 등 활성화

무장투쟁, 실력양성론 등 등장

독립운동의 구심점 필요 느낌(체계적인 독립운동)

국내외 임시정부 통합, 대한민국 임시정부의 수립(1945.4.13 상하이에서, 이후 수도를 여러번 옮김)

세계 약소 민족 운동에 영향을 끼침

중국의 5.4운동(반일운동)

인도의 간디의 민족운동(반영운동, 비폭력이고 불복종운동)


-------------------------------------------------------------------------------------------


24. 대한민국 임시정부(1919~1945)


생긴 순서대로

대한국민의회(연해주)

대통령:송병희

한성정부(서울)

집정관총재:이승만

13도 대표가 중심

상하이임시정부(상하이)

국무총리:이승만


위 3개를 합치기로함

대한민국임시정부

한성정부의 법통을 계승

대한국민의회 흡수

장소:상하이(외교독립하기 위해 좋은 장소, 만주와 연해주는 무장독립하기 좋으면서도 위험했음)

조직:

최초로 삼권분립에 의한 민주공화정 정부로 수립

대통령:이승만

입법부:의정원

행정부:국무원

사법부:법원

활동:

지방 정부 조직으로 비밀조직망(국내<->임시정부 연락하며 군자금 전달, 정보수집 등 함)

연통제

교통국

군자금조달

애국공채발행(채권)

백산상회(부산), 임시정부에 자금 조달

이륭양행(만주), 임시정부에 자금 조달

문화활동

독립신문 발간(이전 독립신문과 헷갈림 주의)

사료편찬소 설치(한일 관련 자료 모음)

외교활동(무장독립하겠다는 사람 입장에서는 성과미흡으로 보임)

파리강화회의에 김규식을 대표로 파견

구미외교위원부 설치

군사활동(외교활동보다 군사활동이 발달되게 됐다.)

군무도독부(해외무장독립군들을 임시정부 산하에 편재하여 적극적 지원)

직할부대:광복군사령부, 광복군총영, 육군주만참의부

과정:

연통제, 교통국이 일제에 발각되어 해체됨

자금난, 인력난 겪게 됨

사회주의가 들어와서 외교문제에 대해 문제제기

임시정부의 방향성에 대해 문제제기

위임통치청원사건

파리강화회의에 미국 대통령 윌슨에게 위임통치청원서 보낸 사건

임시정부 헌정의 변화

1919.4 임시헌장 제정(통합 전, 상하이 정부)

임시 의정원 중심으로 헌법 제정

의장 이동녕, 국무총리 이승만

1919.9 제1차 개헌(통합된 임시정부 in 상하이 에서)

대통령 지도체제

이승만 1대 대통령, 박은식 2대 대통령

1925   제2차 개헌(통합된 임시정부 in 상하이 에서)

국무령 중심의 내각 책임제, 국무령 김구

1927   제3차 개헌(통합된 임시정부 in 상하이 에서)

국무위원 중심의 집단 지도 체제

1940   제4차 개헌(통합된 임시정부 in 충칭 에서)

주석제(주석:김구)

1944   제5차 개헌(통합된 임시정부 in 충칭 에서)

주석, 부주석제(주석:김구, 부주석:김규식)

국민대표회의 소집(1923)

배경:

연통제, 교통국 파괴로 인한 자금난 인력난

사회주의사상 유입 to 임시정부, 사회주의사상은 외교독립에 대한 갈등이 많았음

독립운동의 방략이 다양하게 나옴

외교독립유지

실력양성하자

무장독립주장

이승만의 위임통치청원사건에 불만이 많았다. 가장 불만이 컸던 신채호 중심으로 국민대표회의 소집

내용:

독립운동에 관심있고 활동한 국민들 모임

통일된 독립운동 방향 논의

경과:

창조파와 개조파의 대립(유지파도 있긴했음, 김구중심으로, 현재의 임시정부 유지)

창조파:신채호 중심, 무장독립주장, 임시정부해체하자

개조파:안창호 중심, 외교독립+실력양성, 임시정부유지하되 조직개편

창조파가 임시정부 탈퇴함, 즉 임시정부의 분열양성을 더 크게 만듦

갈등해소를 위한 대책:

이승만 탄핵하고 박은식이 2대 대통령으로 추대됨

박은식을 중심으로 2차개헌

대통령제->국무령중심의 내각중심제로 가자

그럼에도 불구하고 임지정부의 침체

김구의 노력:

임시정부의 침체 극복(국민들로부터 관심이 멀어진 침체)

한인애국단(1931)조직

이봉창의거(일본 천황 히로히토 암살계획, 암살실패하여 붙잡혀서 사형)

윤봉길의거(훙커우 공원사건, 물병폭탄(to일본제국의 주요인사), 도시락폭탄(자결용) but 자결은 실패하여 사형)

이러한 의거로 국민들이 다시 관심 갖게 됨

1932~1940은 임시정부의 이동 시기(상하이에만 있을 수 없음, 일본의 탄압으로)

1940~1945은 임시정부 in 충칭


----------------------------------------------------------------------------------------------------------------


25. 1920년대 민족운동의 전개(국내 항일 운동)


무장투쟁

국내에서 항일유격대의 활약

보합단, 천마산대, 구월산대

일제의 식민통치기관파괴(동사무소 등)

친일파 처단

군자금 모음

학생운동

1926.6.10 만세운동

계기:순종의 인산일(왕들의 장례식날)

사람:민족주의계열(천도교), 사회주의계열(계획상 지도부였던), 학생 이 모두 모임

과정:    

사전에 발각되어서 사회주의계열(지도부)가 체포

학생들이 중심이 될 수 밖에 없었다.

조선학생과학연구회

의미:

민족주의계와 사회주의계가 연대할 수 있는 계기가 되었다.

학생들이 운동의 중심이 될 수 있구나

신간회(1927~1931), 항일단체

좌우합작(민족주의+사회주의)

1929.11.3 광주학생운동

당시 학생조직의 활성화(대표적:독서회, 성진회)

한일 학생간의 충돌, 일본경찰의 편파적 처리

일반시민까지 합세, 시위가 전국적으로 확산, 신간회에서도 조사단 파견

3.1운동 이후 최대 규모의 민족운동


-------------------------------------------------------------------------------------------------------


26. 항일무장단체


의열단(1919)

중심:김원봉, 윤세주

신채호의 조선혁명선언

무장투쟁하자

무정부주의

박재혁, 김일삼, 김상옥, 김지섭, 나석주 등등

활동에 비해 성과가 미흡, 즉 이런식으로해서 독립언제하나, 즉 개별투쟁의 한계를 느낌

활동방향 전환, 조직적, 대중적 투쟁으로 가자

황포 군관 학교(중국학교) 입교시켜서 실력양성

조선혁명간부학교 설립

중국내 민족 운동의 통합 시작, 민족혁명당설립(1935)

한인애국단(1931)

중심:김구

목표:임시정부의 침체 극복

활동:

1932.1.8 이봉창 의거의 실패, 상하이가 대서특필, 일본빡침

상하이 사변(일본군대의 상하이 접수)

승리기념과 일왕의 생일 파티 하자!

1932.4.29 윤봉길 의거

중국이 개좋아해서 중국 국민당 정부의 임시정부 지원

한국광복군 탄생

임시정부의 이동시대가 됨(상하이에서 활동하기가 어려워짐, 1932~1940)


---------------------------------------------------------------------------------------


26. 1920년대의 무장 독립 전쟁(순서 기억 중요, 3대 수난(간도 참변, 자유시 참변, 미쓰야 협정, 이 3개의 원인을 아는게 중요)


봉오동 전투(1920.6)

대한독립군, 군무 도독부군, 국민회권(기독교 계열)이 연합

일본군 1개 대대(200~300여명) 대파

일본이 빡쳐서 훈춘 사건 조작

일본이 마적군에게 돈줘서, 마적군이 일본 영사관 공격하게끔 시킴, 이때 일본인들도 몇명 죽음

따라서 일본이 만주를 공격할 수 있게 명분이 생김

청산리 전투(1920.10)

북로군정서(김좌진, 대종교 계열), 대한독립군, 국민회군 등 연합

간도 청산리의 어랑촌, 백운령, 천수평 전투에서 대파

간도 참변(1920.10)

봉오동, 천산리 전투의 패배에 대한 일제의 보복으로

독립군의 근간이 되는 한인촌 학살

대한 독립 군단(1920.12)

간도 참변 이후 독립군의 재정비를 위해 독릷군 부대의 밀산부 집결

서일을 중심으로 대한 독립 군 결성하여 소련령 자유시로 이동(소련이 독립군 도와주겠다해서)

자유시 참변(1921.6)

레닌의 적색군이 독립군 도와줌, 그래서 소련의 내전에 독립군이 참가하게 됨

일본이 적색군 지원을 알고 레닌 정권에 압박을 가함

레닌이 독립군 나가라고 함 이때 무장해체요구를 함

독립군은 둘로 갈라짐(무장해제 수용or반대)

수용:홍범도 중심->자유시에 남게되나 이후 중앙아시아로 강제 이국(1937)됨

반대:김좌진 중심->많이 죽으나 김좌진 등은 살아서 만주 감

3부 성립(1923~1925)

참의부(임시정부 직할)

정의부(남만주)

신민부(북만주, 김좌진 중심의 무장해제반대했던 세력들 중심)

민정기관과 군정기관의 역할 담당(사실상 정부역할)

미쓰야 협정(1925)

3부 성립으로 일본이 탄압해야겠다.

일본 미쓰야가 만주 군벌이랑 한 협정, 일본이 요구한 독립군을 체포 혹은 사살 해주면 돈주겠단 약속

독립군 많이 죽음

3부 통합 운동

북만주:혁신의회(1928)

한국 독립당, 한국 독립군(지청천)

남만주:국민부(1929)

조선 혁명당, 조선 혁명군(양세봉)


------------------------------------------------------------------------------------------


27. 1930년대 무장 독립 전쟁


한중연합 작전

배경:만주사변(1931.9.18)을 계기(일본의 경제 공황 타계책으로 했던 만주사변, 만주국 설립 이후 중국인들이 항일감정 고조)

한국 독립군+중국 호로군

쌍성보 전투(1932, 우리 승리)

대전자령 전투(1933, 우리 승리)

조선 혁명군+중국 의용군

영릉가 전투(1932, 우리 승리)

흥경성 전투(1933, 우리 승리)

이후

조선 혁명군(양세봉), 양세봉 피살당함, 이후 한중연합세력 약해짐

만주 지역의 항일 유격 투쟁(사회주의 계열이 많았음)

북(중국입장에서 동북지역이 만주지역임) 인민 혁명군(1933), 중국 공산당+한인 사회주의자

동북 항일 연군(1936), 동북 인민 혁명군 개편하여 조직

조국 광복회 조직(1936), 동북 항일 연군의 한국인과 한국 민족주의 세력이 연대(즉 좌우 합작)

보천보 전투(1937) 동북 항일 연군이 조국 광복회의 지원을 받아서 함경도 보천보를 공격하여 점령한 사건

대장:김일성

민족 연합 전선

민족 혁명당(1935)

김원봉의 의열단 주도로 한국 독립당 조선 혁명당 통합으로 난징에서 민족 혁명당 성립(의열단 주도니까 김원봉이 대장됨)

지청천, 조소양(둘다 민족주의)는 탈퇴 후 조선 민족 혁명당으로 개편

중일 전쟁(1937) 후 민족 연합 전선의 강화의 필요로 조선 민족 전선 연맹 조직

조선 의용대(1938)

조선 민족 전선 연맹의 군사 조직 in 한커우

3개 언어에 능통(한국어 일본어 중국어)

중국 국민당과 연합하여 포로 심문, 암호 번역 등의 항일 투쟁 전개

조선 의용대 일부에선 이러한 항일 투쟁을 싫어해서 화북(옌안)으로 이동하여 조선 독립 동맹(기존 화복지역에 있던 김두봉과 손잡아), 조선 의용군(조선 독립 동맹 산하의)조직

김원봉의 지도부는 충칭으로 이동하여 한국 광복군에 편입(즉 조선 의용대는 2갈래로 분열되었구나)


--------------------------------------------------------------------------------------------------------


28. 1940년대 무장 독립 전쟁(한국 광복군 중심)


1932~1940

상하이->항저우(윤봉길 의거때문)

항저우->난징

난징->창사(난징 대학살 때문)

창사->광저우->류저우->차장->충칭


충칭시대의 임시정부(1940~)


한국 독립당 결성

한국 국민당(기존의 임시정부의) + 한국 독립당(북만주 뿌리인) + 조선 혁명당(남만주 뿌리인) = 한국 독립당(new)

한국 독립당(new)이 되고 4차 개헌(주석 중심)

조소앙의 3균주의(바탕으로 건국강령 발표)

이후 조선 민족 혁명당 합류

한국 광복군 창설

신흥무관학교 출신들이 많음

중국 국민당의 지원 받음

조선 의용대 합류

일본의 태평양 전쟁 직후

대일 대독 선전 포고

영국군과 함께 연합군 일원으로 인도, 미얀마 전선에 참가

미국 전략 정보부으로부터 지원받음

국내 진공(진입) 작전을 계획(1945.9) but 일제가 항복(1945.8)


-------------------------------------------------------------------------------------------------------


29. 실력 양성 운동(민족주의 계열이 주도했던)

물산 장려 운동(1920)

배경:

회사령의 폐지, 일본 상품의 관세 철폐

국내 기업의 붕괴 위기

내용:

국산품 애용, 일본 상품 배척 그래서 민족기업의 성장하여 경제적으로 자립하자

과정:

평양에서 조만식이 시작

조선 물산 장려회

자작회(학생들이 만듦, 우리가 만든거 우리가 쓰자)

토산 애용 부인회(부녀자들이 만듦)

한계:

일부 민족주의 세력이 일제와 타협, 따라서 비타협적 민족주의 세력 이탈

상인과 자본가 계급에 이용당함

국산품애용->국산품수요확대->공급물량을 확대시키며 제품에 대한 가격을 적당히 인하시켜줘야되는데, 기업들이 공급시설을 확대하지 못하여 국산품 가격 상승, 일부상인들은 매점매석(가격상승예측하여)하여 결국 소비자들만 피해

사회주의 비난, 민중의 외면

민립 대학 설립 운동

배경:

민족의 역량 강화를 위한 고등 교육의 필요

제2차 교육령 개정(일본이 대학설립 허용해줌)

전개:

이상재의 조선 교육회를 중심으로 민립 대학 설립 기성회 발족(1923)

1000만원 모금 운동 전개

'한 민족 1천만이 한 사람이 1원씩' 내자는 구호

결과:

가뭄, 수해 등의 자연 재해 발생, 경성 제국 대학 설립으로 좌절

(경성 제국 대학은 국내 일본인+극소수 친일파만 입학가능)

문맹 퇴치 운동

배경:

일제의 식민지 차별 교육 정책으로 한국인의 문맹률 증가(70%이상)

활동:

야학 운동(1920년대)

언론 기관:

조선일보의 문자 보급 운동

동아일보의 브나로드 운동(농촌계몽, 한글교육, 미신타파 등)

조선어 학회(1931), 전국에 한글 강습회 설치, 문자 보급 운동 전개

결과:

일제의 탄압(1935)으로 문맹 퇴치 운동도 끝남


----------------------------------------------------------------------------------------------------------


30. 농민운동 노동운동(사회주의)


농민운동(소작쟁의)

배경:

토지 조사 사업, 산미 증식 계획

식민지 지주제 강화(소작권 상실 농민 다수)

3.1 운동 이후 사회주의 사상 영향

1920년대 내용:

생존권 투쟁

소작료 인하 주장, 소작권 이전 반대

암태도 소작쟁의(1923)가 대표적인 소작쟁의

조직:조선 농민 총동맹 결성(1927, 전국단위)

1930년대(3.1운동 이후) 내용:

특징:

사회주의와 연개

항일 운동의 성격

제국주의 타도, 소작제 폐지, 토지 개혁 요구

비합법적, 혁명적 농민 조합 중심

일제의 무마책:

농촌 진흥 운동 전개

자작농 창설 계획과 조선 농지령 발표(즉 소작권만큼은 최대한 보장하겠다)

노동운동(노동쟁의)

배경:

회사령 폐지 후 일본 기업의 진출

열악한 노동 환경에 대한 노동자 불만

3.1 운동 이후 사회주의 사상의 영향

1920년대 내용:

생존권 투쟁

임금 인상 주장, 민족 차별 대우 철폐

원산 노동자 총파업(1929, 시작은 생존권투쟁인데 일제가 너무 탄압하니 항일운동으로 바뀜)가 대표적인 노동쟁의

외국들이 격려해줘서 국제적 연대로 확대되었다.

조직:조선 노동 총동맹 결성(1927, 전국단위, 조직적)

1930년대(3.1운동 이후)내용:

특징:

사회주의와 연개

항일 운동의 성격

비합법적, 혁명적 노동 조합 중심

제국주의 타도, 사유 재산 부정(사회주의이념)

병참 기지화 정책(일본의)

일본의 자본 침투 본격화

일제의 탄압 강화

중일전쟁(1937)이후 일제의 강한 탄압으로 농민운동, 노동운동이 급격히 감소


---------------------------------------------------------------------------


31. 사회 운동


3.1운동 이후 사회주의 사상이 보급(학생과 지식인 중심으로)된 상황

사회주의 사상이 청년운동 여성운동 소년운동 학생운동 형평운동 노동운동 등에 영향을 끼침

형평운동(백정들이 사회적 차별과 편견을 폐지해줄 것을 주장)

1923.7 진주에서 조선형평사가 생겨서 생김

사회주의 영향받으며 민족해방운동으로 발전됨

근우회(1927, 좌우합작, 여성운동, 신간회의 자매기관, 여성의 권익옹호, 여성 인권 보호)

소년운동(소년회, 천도교 영향 받음, 대표인물 방정환, 어린이날 재정)

학생운동(6.10만세운동 광주학생운동 등)


--------------------------------------------------------------------------------------------------------------------


32. 신간회(민족주의+사회주의, 민족유일당(사회주의+비타협적 민족주의의 합체)운동)


신간회 결성의 배경:

민족주의 계열(지주, 자본가)의 목표는 민족의 독립, 그래서 실력양성운동을 전개

타협적 민족주의 세력(국민이 보기엔 친일파)은 일본으로부터 자치권을 얻어서 활동하자, 민족개조론을 주장(대표인물:이광수, 최린)

비타협적 민족주의 세력(국민은 민족주의 다 친일파로보임)은 타협적 민족주의 세력과 구분되어 보이게끔 사회주의 세력과 연대해보자

연대하여 조선민흥회 결성(사회주의+비타협적 민족주의)

사회주의 계열(농민,노동자)의 목표는 민족의 해방+계급 해방(민족주의엔 없던), 그래서 노동운동, 농민운동을 전개

일본은 치안유지법으로 노동운동, 농민운동 탄압

민족주의 세력과 연대하기위해 정우회 선언

1926.6.10만세운동 등으로부터 좌우합작이 가능한 것으로 보아 조선민흥회+정우회 합쳐서 신간회 탄생(1927~1931)

신간회 특징:

합법적 단체(not 비밀결사)

최대 규모(전국에 약 140여 개소의 지회 설립, 일본 만주에도 지회 설립)

3대 강령(민족의 단결, 정치 경제적 각성 촉구, 기회주의자(타협적 민족주의자) 배격)

좌우합작

신간회 활동:

한국인 본위의 교육 실시(한국교사가 한국 관련 교육 실시)

한국인에 대한 착취 기관 철폐

노동 농민 여성 형평 운동 등에 지원

광주 학생 운동에 조사단 파견, 민중 대회(일본에게 책임을 묻기 위해)계획(but 일제에 의해 무산)

신간회 해산:

민중 대회 사건으로 지도부 체포, 새 집행부의 우경화 경향(타협적 민족주의자와 연대하려고 함


일제+만주군벌(미쓰야 협정 이전부터도 서로 친함)을 공격하기 위해

중국 국민당(좌) + 중국 공산당 합쳐서 공격(국공합작)하는 중에 중국 국민당이 배신친 사건(국공합작,1,2,3차가 있음)

이사건으로 코민테른(사회주의 최고 국제 단체)의 노선 변화(민족주의 세력과 절대 손잡지 마라! 계급투쟁은 계속 하라)


민족주의 세력과 결별


-----------------------------------------------------------------------------------------------------------------


33. 해외 동포들의 활동과 시련


만주 동포들의 시련

간도참변(1920), 미쓰야 협정(1925), 만보산사건(1931)

연해주 동포(귀화한 사람도 많음)들의 시련

자유시참변(1921), 중앙아시아 강제이주(1937)

일본 동포들의 시련

사건들:

1910이전 유학생들 많았음

1910이후 산업노동자들 많았음

2.8 독립선언

시련들:

관동대지진(1923), 일본 민심 불안을 한국인탓하며 6000명 한국인 학살당함

하와이 미주(미국, 멕시코) 지역 동포들의 시련

사탕수수 노동자(거의 노예급)

미서해안철도 노동자

멕시코 농장 노동자


----------------------------------------------------------------------------------------------


34. 일제의 식민지 교육 정책(일본의 식민 정책에 따라 교육 과정도 바뀌는 걸 알 수 있다.)


제1차 교육령(1911)

한일합병 이후 우민화 교육 정책

보통 교육의 수업 연한 4년으로 축소(일본인은 6년), 실업 기술 교육 강화(한국인은 하급기술인력만 양성시키겠다)

대한 교육 금지, 조선어 수업 축소, 한국 역사 지리 교육 배제

민족 교육 탄압->사립학교 규칙(1911), 서당 규칙 제정(1918)

제2차 교육령(1922)

3.1운동 후 우민화정책->유화 정책으로 바뀜

보통 교육 수업 연장 6년, 고등 보통학교 5년(일본과 유사해짐)

보통 학교, 고등 보통 학교에서 조선어 과목 필수 지정

대학 설립 허용->민립 대학 설립 운동 전개->그러나 경성제국대학설립으로 좌절

제3차 교육령(1938)

중일전쟁(1937) 후 유화 정책->황국 식민화 정책(우리나라 백성을 일본 천황의 충실한 백성으로 만드려는 정책)으로 바뀜

보통 학교는 소학교로, 고등 보통 학교는 중학교로 개명

조선어 선택 과목 지정, 일본어 수업 강요, 수신 교육 강화(=윤리교육)

국민 학교령(1941), 제정으로 소학교가 국민 학교(=황국신민교육)로 개칭

제4차 교육령(1943)

태평양 전쟁(1941) 후 황국식민화정책->민족 말살 강화

중학교와 고등 여학교의 수업 연한이 5년에서 4년으로 단축

학교를 전시 동원 체제로 전환->전시 학도 군사 훈련 강화

조선어 역사 과목 폐지, 교련 교육 실시, 학도지원병제(1943) 실시


-----------------------------------------------------------------------------------------------------


35. 일제의 언론 탄압


1910년대:신문지법 적용(언론 출판 집회의 자유가 없었음)

1920년대:동아일보, 조선일보등이 있었으나 검열 삭제 정간 등 적용

1930년대:동아일보의 일장기 말소사건(송기정 선수가 베를린 올림픽(1936)에서 마라톤 금메달 땀, 가슴에 있는 일장기를 지워서 뉴스냄)->정간됨

1940년대:모든 신문 폐간


36. 한국어 연구(국학 연구 일환으로)


조선어 연구회(1922)

국문연구소(1907)를 계승

'한글' 이란 잡지를 발간하여 한글 보급과 대중화

가갸날 제정(지금의 한글날)

한글 강습소, 강연회

조선어 학회(1931)

조선어 연구회를 계승

'한글' 잡지 발간, 우리말 큰 사전 편찬 시도(지금의 국어사전)하나 실패(해방 후 한글 학회가 국어사전 편찬)

한글 맞춤법 통일안, 표준어 제정

전국 순회 문자 보급 운동

일제에 의해 조선어 학회 사건(국어사전 편찬하려고 자료모으다) 으로 해산됨


37. 일본의 역사 왜곡 및 한국사 연구


일본의 역사 왜곡

목적:

한국사를 왜곡하여 민족의 자긍심 상실하여 식민통치의 합리화시키기 위함

내용:

정체성론(우리나라 중세 사회 부재론, 우리나라 봉건 제도가 없으니 중세 사회가 없다는 주장, 그래서 우리나라는 고대사회에 멈춰있다는 주장)

타율성론(우리나라 역사는 외부에 영향을 많이 받는다.)

당파성론(우리나라는 분열이 많았다.)

임라일본부설(가야지방은 일본이 지배했다.)

주도한 단체:

조선사 편수회

청구학회(왜곡한 역사를 청구학보로 발간)


한국사 연구(일본의 역사 왜곡으로부터 우리 역사를 지키기 위한 노력)

민족주의 사학

특징: 민족 독립 운동의 일환으로 한국사 연구(우리 민족 문화의 우수성 강조, 우리 역사의 주체적 발전을 강조)

박은식

국혼 강조, 국가는 형이요 역사는 멸하지 않은 신이다.

근대사를 중심으로 서술, 대표 저서(한국 통사), 한국독립운동지협사

신채호

낭가 사상 강조(신라의 화랑정신), 역사는 아(자신, 국가)와 비아(타인과 외국)의 투쟁이다

고대사를 중심으로 연구, 대표 저서(조선 상고사, 조선사 연구초(묘청의 서경천도 운동을 극찬함))

계승자들

정인보(고대사 중심), 문일평(근대사 중심)

사회경제 사학

특징:유물 사관(원시(공동체)->고대(노예제)->중세(농노제)->근대(자본주의)에 입각하여 역사 발전의 보편성을 한국사에 적용(즉 정체성론에 반박)

백남운

대표 저서(조선 사회 경제사)

일제의 정체성론 반박, 민족주의 사학자들의 정신 사관 비판

실증주의 사학(가장 소극적 투쟁)

특징:객관적 사실에 근거하는 문헌 고증의 연구 자세 중시

이병도, 손진태 등 진단학회 조직

활동:진단학보를 발간하여 청구학회의 역사왜곡에 대항


--------------------------------------------------------------


38. 일제 식민지 시대의 문학 활동


1910년대:계몽적 성격

1920년대:

동인지문학(현실도피적이 많았음) 등장

신경향파문학(사회주의, 현실비판 많음, 카프 라는 단체 결성)등장,

프로문학 등장(사회주의, 계급투쟁 강조)

국민문학 등장(민족주의여서 사회주의 비판)

1930년대:

순수문학(현실도피적, 정치적 색깔없이 문학만 다룬)

친일문학(이광수, 서정주 등)

저항문학(윤동주, 이육사, 이상화, 한용운 등)


---------------------------------------------------------------


39. 건국 준비 활동


대한민국 임시 정부(1940, 충칭, 김구)

민족주의 계열의 한국 독립당(한국 국립당+조선 혁명당+한국 독립당) 주도

조소왕의 삼균주의(정치균등(보통선거), 경제균등(토지국유화), 교육균등(의무교육))에 기초한 건국 강령 발표

조선 독립 동맹(1942, 옌안, 김두봉)

사회주의 계열, 화북지방

보통선거를 통한 민주 공화국 수립

토지 분해

대기업 국유화

무상교육

조선 건국 동맹(1944, 국내, 여운형)

좌우 합작

비밀 결사 단체

일제 타도와 민주 국가 건설 목표로 건국 강령 제정

조선 건국 준비 위원회(1945.8.15)

조선 건국 동맹 개편

여운형, 안재홍 등이 좌우 합작 결성

총독부(아베)로부터 치안권 이양 약속, 건국 준비 착수

일본이 8.6에 원자폭탄 맞고 8.9에 소련이 일본에 선전포고해, 일본은 항복준비하면서 국내 일본인 보호를 위해 한국에게 치안권 이양

일본인 보호를 위해 치안권 이양

하지만 미국이 멕아더포고령(한국은 미국이 통치하겠다!)

조선 인민 공화국 선포 후 해산(미국에게 한국을 뺏길 것 같아서)

좌익주도로 되며 안재홍 등 사회주의계열이 빠짐


40. 대한민국 정부 수립과정


한국의 독립문제를 다루었던 회담

카이로 회담(1943)

포츠담선언

해방(1945.8.15)

해방과 동시에 38도선으로 남북분단

북:소련

남:미군

각각 들어온 명분은 우리나라에 남아있는 일본군의 무장해제를 돕기위해 들어왔다.

미군정(1945.9~1948.8)이 시행됨

총독부로부터 치안권을 이양받음(여운형과 아베와의 약속은 취소됨)

멕아더 포고령

미군정은 조선 인민 공화국, 대한민국 임시 정부 을 부정

친일파 처벌 소극적, 친일파를 적극적으로 활용함

공산당은 철저히 통제(친일파는 되나 공산당은 안됨)

(친일파는 잘살고, 독립 운동한 사회주의 계열은 핍박받고)

모스크바 3상회의(1945.12)

한국에 조선 민주주의 임시 정부 수립

미국 소련 공동위워회 구성(조선 민주주의 임시 정부 수립 위해)

최고 5년간 신탁통치 결정됨(이것으로 좌우 이념 갈등이 최고조가 됨)

좌우대립

우익진영:김구, 이승만, 한국 민주당(한민당)

신탁통치 반대 운동

좌익진영:사회주의

신탁통치 반대하다가, 소련과 얘기한 후 모스크바 3상회의를 지지 한다고 선언(민주주의 정부 수립에 중요를 두니까 신탁통치는 중요한게아니다!)

좌vs우 싸움이 심해짐

중도파:

여운형(중도좌파), 김규식(중도우파)

신탁 통치는 보류하자, 그대신 모스크바 3상회의의 결정을 지지한다.(나머지 2개를)

1차 미소공동위원회

임시정부 수립 논의에 참가할 단체 자격을 놓고 갈등

소련:찬탁세력만(신탁 통치 찬성 단체)가능

미국:모든 단체 가능

자기들에게 유리한 단체만 주장

1946.3에 결렬됨

이승만의 정읍발언(1946.6)

남한만의 단독 정부를 세우자는 제안

좌우합작운동(1946.7)

이승만의 정읍발언을 저지하기 위함

중도파가 주도(여운형, 김규식)

통일 정부 수립 제안

미군정의 지지를 받게됨

좌우합작 7원칙 발표

친일파 처벌 문제와 토지개혁 문제가 좌우의 합의를 못찾음

좌우 갈등만 증폭됨

미군정이 지지 철회함

여운형 암살당함

좌우합작운동은 실패로 끝남

남조선 과도 임법의회(미군정 주도로 했음, 형식적으로만 하고 큰 활동없었음)

2차 미소공동위원회(1947.5)

임시정부 수립 논의에 참가할 단체 자격을 놓고 갈등

소련:찬탁세력만(신탁 통치 찬성 단체)가능

미국:모든 단체 가능

또 자기들에게 유리한 단체만 주장

또 결렬됨

미국은 한반도 문제를 UN에 이관함

UN총회(1947.11)

UN총회의 의견:인구 비례에 따른 남북한 총선거를 제안함(ex: 남한측 200명, 북한측 100명)

남한은 찬성함

북한(소련)이 반대함

UN임시위원의 방북시도

소련의 입북 거부

UN소총회의 의견:선거 가능한 지역(남한에서만)에서 선거(1948.5.10 총선거 제안), 즉 남한 단독 정부 수립

단독 정부 수립 반대 세력 등장

남북협상시도(김구, 김규식 등)

북한 방문하여 남북 지도자 연석 회의(4김회담, 남(김구,김규식), 북(김일성, 김두봉)) 통일정부를 세우자 논의했지만 결렬

제주도 4.3사건

좌익이 주도

5.10선거 반대운동 함

당시 경찰과 우익단체들이 저지하여, 유혈사태가 많이 일어남, 관련된 양민들만 피해받음

제주도에서는 5.10 선거가 치뤄지지 못함, 그 이후에도 계속 사건이 일어남

여수, 순천 주둔 군대들이 제주도로 보내려고했는데 반란이 일어남(여순10.19사건)

여수, 순천 14군대 군내의 좌익주도로 무장봉기

국군이 출동하여 저지함

1948.5.10 총선거

최초의 평등 선거, 보통 선거, 비밀 선거, 직접 선거

제헌국회 구성을 위한 선거

제헌국회 임기 2년

헌법이 제정되고 공포됨(1948.7.17, 제헌절)

대통령 중심제, 간선제(국회에서 대통령을 뽑는)

대통령 임기 4년, 1차 연임가능

이승만이 대통령됨

대한민국 정부 수립(1948.8.15)(1945.8부터 1948.8까지 미군정)

이승만 대통령

이시영 부통령

UN이 인정한 합법적 독립 정부

이승만 정부의 활동

반민특위활동

제헌국회에서 반민족행위처벌 특별법을 제정함, 1948.9~1950.8 유효한 법

친일파 처벌규정, but 유효기간이 2년으로 짧음

하지만 당시 국민들이 환영함

반민특위구성

김구가 전폭적으로 지지함

친일파 구속을 위한 자료 수집

친일파 검거하여 경찰에 인도

친일파들:이광수, 최남선, 노덕술, 김태석, 최린

다 체포해서 국민들 환영

이승만 정부의 의지(친일파 처벌에 의지가 약했다)

경찰의 반민특위습격사건(빨갱이가 반민특위에 있다며 반민특위에 들어가 친일파 구속을 위한 자료수집들 다 가져가고 없애버림)

국회프락치사건(국회에서 친일파 처벌을 강경하게 주장하던 소장파들을 간첩죄로 몰아서 체포한 사건)

김구 암살(1949.6)당함, 국민장 치르게 됨(1949.7)

7월 한달 동안 국민장 준비로인해 반민특위활동이 정지됨

그 사이에 공소시효 만료됨(원래 1950.8이었는데 1949.8로 줄여버림)

반민특위활동 끝나고 친일파 모두 풀려나고 큰처벌안받고 나가게됨

즉, 이승만이 친일파를 풀어준 심증은 가나, 증거가 없음

이승만은 당시 권력과 돈이 필요했는데 돈은 친일파들이 다 갖고 있었음

따라서 이승만 경우는 건국의 아버지라고 칭하기에 너무 부끄럽다.(친일파 숙청도 미흡하고 이후 헌법 개정 계속해서 연임함 60년까지)


-------------------------------------------------------------------------------------------------------------------


41. 6.25전쟁(1950.6.25~1953.7.27)


배경:

미소냉전

북한의 군사력 강화

일본의 병참기지화 일환으로 중화학 발전소가 북한에 많이남아서 가능

주한미군철수

애치슨 선언(미국이 발표한)

애치슨 라인(=미국방위선)은 일본과 필리핀이 포함됨, 미국이 방어해준다는 얘기, 즉 소련+북한은 남한을 쳐도 되겠구나 싶었을 듯

과정:

북한군의 남침(1950.6.25)

서울 점령(1950.6.28)

낙동강 전선 현성

UN 참전(16개국, 3개국 정돈 알아두자, 미국, 터키(형제의나라라고 생각하게된 배경), 에티오피아(지금은 개거지인 나라인데!)

인천 상륙 작전

서울 수복(1950.9.28, 딱 3달만에)

국군과 UN군이 압록강변까지 진격(거의 통일되겠거니 생각했는데)

중공군 참전(1950.10.25)

서울 점령(1951.1.4, 일사후퇴라함)

국군의 재반격

서울 재탈환(1951.3)

당시 서족은 소련군vs미군 교착상태, 동쪽은 북한인민군vs국군, 휴전을 눈앞에두고도 땅을 더 갖기 위해 싸움이 심했음

소련의 휴전 제안

한국 정부의 휴전 반대(이승만이 반대함, UN군도 있으니 이참에 통일해볼라꼬)

반공포로석방(1953.6)

휴전성립(1953.7.27)

한미상호 방위 조약 체결(1953.10, 혹시나 미군빠지면 또 들어올까봐 미군이 지켜주는)

결과:

분단의 고착화, 남북한의 적대감 심화

남북한에서의 독재 강화

이승만 정부는 반공을 이용하여 독재 정권 강화

김일성은 박헌영을 비롯한 남로당계를 숙청하면서 권력 강화

서구 대중 문물의 무분별한 유입, 전통 문화 붕괴

휴전선(38도선이 아니라!)


42. 이승만 정부(제1공화국)의 장기 집권(1948~1960)


발췌개헌(1952)

2대 총선(1950.5)에서 반이승만 성향의 무소속 의원들이 대거 당선

(당시 여론이 이승만이 친일파 청산이나 토지개혁등이 실망스러워서, 즉 이승만의 실정)

(이 당시는 국회에서 대통령을 뽑는 간선제이므로 이승만이 재선하기가 어려워진 상황을 뜻함)

(대통령 직선제로 개헌할 필요를 느낌, 차라리 국회의원보다 국민을 설득시켜야겠다!)

(대통령 직선제 개헌하려면 2/3의 국회의원들이 찬성해야하는데...이제부터 이승만 활약 시작)

이승만 자유당 창당

부산에 계엄 선포하여 야당 의원들을 헌병대로 연행 혹은 반이승만 무소속의원들을 협박함(대통령 직선제 반대하지말라고, 이사건을 부산정치파동이라 한다)

대통령 직선제 개헌안을 기립 표결로 통과(찬성과 반대, 일어나서 투표하는)

이승만 재선에 성공

사사오입개헌(1954)

3대 총선(1954)에서 관권으로 자유당 압승(공무원 총동원해서)

개헌을 맘대로 주무룰 수 있게됨

초대 대통령에 한해 중임 제한 규정을 철폐하는 개헌안 제출

총 제적인원 203명인데 2/3이상, 즉 135.33인데, 136명 찬성 이상이면 개헌으로 가자고 결정됨, 자유당 입장에선 136명이 필요한데 표결결과 135명이 찬성 ㅎㄷㄷ

부결

0.33을 왜 올려서 계산하냐는 논리로 사사오입으로 개헌안 불법 통과

3대 대통령 선거(1956)

민주당의 대통령 후보 신익희가 선거 도중 사망, 이승만 3선 성공

민주당의 장면 후보가 부통령 당선

대선에서 무소속 조봉암 후보의 선전(득표 30%)

이승만이 걱정하게됨

독재 체제 강화

이승만의 눈에 가시였던 조봉암은 진보당을 설립

진보당의 당수 조봉암을 간첩 혐의로 사형(진보당 사건이라 한다, 최근 국가인권위원회는 조봉암을 무죄로 판결)

신국가 보안법 제정, 경향신문 폐간(언론 탄압)

4대 대통령 선거(1960)

민주당의 대통령 후보 조병옥 사망(1960.2.15)

이승만 당선 확실시(당시 나이 85살)

민주당의 장면 후보가 국민들의 지지로 부통령 당선 확실시(왜냐하면 여야가 견제해야되니, 대통령은 이승만 될거같으니)

이승만이 85세인데, 대통령 업무중 사망시 부통령 장면이 대통령돼서 정권을 민주당에게 뺏길거같은 자유당의 걱정

이기붕을 부통령에 당선시키기 위해 3.15부정선거 자행(관권(공무원), 금권(돈), 폭권(조폭) 동원)

이승만, 이기붕 당선

4.19혁명의 원인됨


43. 이승만 정부의 경제 정책

농지개혁법

배경:

미군정의 토지 개혁 부진

북한의 토지 개혁(1946), 무상몰수 무상분배

남한 농민의 불만이 컸음

목적:

소작제 폐지, 자영농 육성

경자유전(농사짓는 사람만이 토지를 소유할 수 있다)의 원칙에 따라 시행(지금도 일반 농지는 농민만 가질 수 있음)

시행:

3정보가 상한선, 그 이상은 나라에 팔아야함(유상매입, 지가증권을 발급해줌), 유상분배(농민들에게 분배, 수확량의 30%씩 5년간 정부가 거둬가는 약속으로)

과정:

농지개혁법제정(1949), 개혁실시(1950), 6.25로 중단됐따가 종결(1957)

결과:

지주제 소멸, 농민 중심의 토지 소유 확립

귀속 재산 처리

총독부 및 일본인 소유의 재산을 귀속 재산(=적산)이라 한다. 미군정에서 관리하다가 해방후 이승만 정부에게 넘겨줌

국영 기업 제외, 민간인에게 불하(판매)

불하 과정에서 특혜 시비 발생

민간 기업 탄생(특혜받은)하고 독점 자본 성장

미국의 경제 원조

배경:미국의 잉여 농산물 소비, 한국의 공산화 방지

과정:면방직, 설탕, 밀가루 등의 소비재 중심(삼백산업 발달)

특징:원조 농산물의 판매 대금(미국이 한국에게 거의 공짜로 주고, 정부는 기업에게 돈받고 팔고 거기서 정부가 얻은 돈)을

주한 미군 비용으로 사용하든가, 미국으로부터 무기를 구매하라고 함

결과:

국내 농산물 가격 하락

쌀의 단작화 초래

국내 농업 기반 붕괴


44. 4.19혁명(1960.4.19)

원인:

미국의 경제 원조 감소로 인한 경기 침체와 실업 증가

이승만 정권의 독재와 장기 집권, 3.15부정선거

과정:

마산 지역에서 3.15 부정 선거에 대한 규탄 시위에서 김주열의 사망(거의 한달뒤 4.11에 발견되었는데 최루탄이 눈에 박혀서 마산 앞바다에서)

전국으로 시위 확산

정부의 계엄령 선포

경찰의 발포로 시민 희생

고대생 습격 사건(4.18, 시위 후 집으로 가던 고대생들을 조폭들이 패버린 사건)

학생, 시민들의 대규모 시위가 발발(4.19)

대학 교수단의 시국 선언 및 시위 참가(4.25)

이승만의 하야 성명 발표하고 하와이로 가버림, 제1공화국 붕괴, 허정 과도 정부 수립

결과:

학생과 시민이 중심이 되어 독재 정권을 타도한 최초의 민주주의 혁명

민주주의 발전에 초석 마련


45. 장면 내각 정부(제2공화국, 1960~1961)

허정 과도 정부

이승만, 이기붕, 장면(부정선거를 못막았다는 책임을 지고) 모두 짤리고 사퇴

제1공화국 외무부 장관이었던 허정이 대통령 권한 대행(=과도 정부)

3.15 부정 선거에 의한 4대 대통령 부통령 선거 무효 선언

따라서 이승만은 3대까지 했는걸로 봐야함

내각 책임제와 양원제 국회를 골자로 한 3차 헌법 개정

총선거 실시, 민주당 압승

장면(국무 총리로)내각 출범, 윤보선 대통령 당선(4대)

장면 내각 정부

언론 활동 보장,:국가 보안법 개정, 경향 신문 복간

교원 노조, 언론 노조 등 노동 조합 운동이 활발하게 전개

중립화(중립국가를 지향하는, 그래야 통일 가능성 높아진다는) 통일론, 남북 협상론 등 통일 운동의 활성화

한계

민주당 내의 신파(장면), 구파(윤보선지지)간의 정쟁 격화로 민의 수렴 실패

개혁 의지 약화로 부정 선거 책임자, 부정 축재자 처벌에 소극적

5.16 군사 정변으로 붕괴


--------------------------------------------------------------------------------------------------

46. 5.16군사정변(1961.5.16)

배경:

정군운동의 실패(정군운동:군을 정화시키자, 당시 정치군인(부패군인, 육사 8기생들)이 너무 많았는데 추방시키자는 운동

(8기생들이 지지하는 박정희)

경과:

박정희 중심으로 정변발생

계엄선포

언론통제

국가재건최고회의(초정부적 기구) 설치

입법부, 사법부, 행정부 다해처먹음

혁명공약 발표

반공으로부터의 위협을 보호, 민생안정

위의 두개가 안정화되면 민정에게 정부를 넘기겠다(민정이양)

군정 실시(5.16 쿠데타의 합리화 필요했음)

이승만 정권의 부정축재자, 부랑배(깡패) 처벌(이정재같은 놈들)

농어촌 부채 탕감

경제개발5개년 계획 추진

국회활동과 정당활동 금지


47. 박정희 정부(제3공화국, 1963~1972)

성립

5차개헌(대통령 직선제, 1차 연임가능, 임기4년 실시), 국민투표로 확정

(4차개헌은 제2공화국에서함, 별로 안중요)

민정 이양을 저버리고 민주 공화당 창당

박정희(민주공화당)vs윤보선(민주당), 박정희 5대 대통령 당선

한일협정(1965)

배경:

경제 개발에 필요한 자금 확보 노력

유럽순방하며 차관 부탁했으나 독일만 들어줌, 차관주는 대신에 광부와 간호사를 요구함

일본에게도 돈을 빌리려함

한미일 공동 안보체제구축(북한 중국 소련에 대항하여)

경과:

민정 이양 전부터(군정때부터) 김종필과 오히라 간의 회담 진행

6.3항쟁(1964.6.3):굴욕 외교(우릴 공격했던 일본이랑 외교?!)에 반대하는 시위 전개, 계엄과 위수령 선포(강제진압)으로 강제로 한일협정 성공

내용:

독립 축하금 3억달러, 민간 차관 제공

문제점:

식민지 지배에 대한 보상과 일본의 사죄 문제 미해결

(정신대 할머니들이 일본에 소송, 일본판결:우린 다 보상해줬다 한일협정때)

(정신대 할머니들이 우리정부에 소송, 당시 한일협정 문서를 공개해라, 그래서 봤더니, 당시 일본이 개개인들에게 보상해주려했으나 박정희 정부가 그러지 말라며 그냥 한꺼번에 달래서 4억달러를 챙김)

베트남 파병(1964)

베트남 내부 전쟁, 북(중국이 도와줌)vs남(미국이 도와줌)

미국의 베트남 파병 요구

한국 정부의 거부(돈이 없다!)

브라운 각서(미국이 한국군에 돈대주겠다)로 한국군의 전력 증강과 차관 원조 제공

비전투 부대의 파병으로 시작으로 전투병 파병(8년간 5만여명)

외화 획득, 건설 사업 참여 등 베트남 특수로 경제 발전에 도움

3선 개헌

박정희 정부의 장기 집권 의도, 한반도의 긴장 고조(북한의 도발, 1.21사태(북한의 무장공비 31명이 청와대를 공격한 사건), 미군의 첩보함 푸에볼레호 북한에 납치)

국회에서 변칙적 방법(날치기)으로 3선 개헌안(대통령 3선가능하게끔) 통과, 국민투표로 결정됨

1971년, 김대중(신민당)vs박정희(민주공화당), 김대중 후보를 누르고 3선(7대 대통령)에 성공

관권, 금권 동원해서 겨우 박정희가 이김

(특히 이당시 부재자 투표(군인의)의 부정이 많았던 시절, 이런걸 감안하면 사실상 김대중이 이길뻔한거여서 박정희가 유신체제를 만들게 됨)



48. 유신체제(제4공화국, 1972~1979)

배경:

미국 대통령 닉슨에 따른 냉전 완화(소련과의) 미군의 베트남 철수, 주한 미군 철수

야당 세력 성장(총선에서 개헌 저지선 확보)과 경제 불황(석유 파동)으로 박정희 정부의 위기 의식 고조

과정:

비상 계엄 선포, 국회 해산, 민간 정치 활동 금지, 언론, 출판, 보도의 사전 검열

유신 헌법을 국민 투표로 확정(70%이상의 지지를 받음, 왜냐하면 언론 출판 보도의 사전 검열이었으니까)

내용:

성격: 의회 민주주의와 삼권 분립을 무시하고 대통령에게 강력한 권한 부여(제왕적 대통령제, 거의 조선 이방원급)

대통령 선출:통일 주체 국민회의에서 간선제로 대통령 선출(박정희2번, 최규하1번, 전두환1번 이후 사라지는 기관)

대통령 임기:중임 제한 철폐, 임기 6년(박정희의 영구 집권 가능)

대통령 권한:국회 해산권, 국회의원 1/3 임명권(유신 정우희), 긴급 조치권(민주화 운동을 탄압할 수 있는 장치, 유신체제에서만 있었던)

민주화 탄압(워낙 통제가 쌔서 아래 3개 운동은 미미했음)

개헌 청원 100만인 서명운동

민청학련 사건 조작

3.1 민주 구국 선언

붕괴(당시 통제가 워낙 쌔서 굳건히 갈거라 믿었는데 작은 사건(YH사건)으로 스노우볼 굴러감)

YH 사건

YH무역회사, 사장 장용호(YH), 가발만들어 미국에 파는 회사

미국에 백화점 사업 진출하려는데 자금이 부족해서 YH무역회사의 자금을 빼돌리다 YH무역회사가 자금난, 노동자들이 임금을 못받게됨

노동조합을 중심으로 노동쟁의하였으나 언론에 주목을 못받게 돼서 노동자들이 생각해낸 방법이 200여명의 여성노동자들이 신민당 사무실 점검(김영삼 총재가있던)하여 시위(1979.8.9~8.11)

언론에 주목받음

박정희가 이걸 알고, 김영삼이랑 여성노돌자들이 공모한 것으로 보고 김영삼 총재를 제명 처분

신민당 김영삼 총재 제명 처분

부마항쟁 발발(부산 마산)

부산(김영삼지지층 두터운)을 시작으로 마산까지 확산

10.26(1979.10.26)사건으로 박정희 사망, 유신정권 붕괴

당시 박정희 보필하던 김재규(중앙정보부장), 차지철(경호실장)

김재규가 부산 마산 민심확인해보니 너무 반발이 심하니 군대로 밀수도 없다. 자연히 무마되도록 하자

차지철은 그런 김재규가 못마땅함, 탱크동원해서 부산 마산 다 밀자, 1000명정도 죽으면 끝나겠지,

박정희는 차지철쪽으로 기울고, 김재규는 그래서 10.26사건을 일으키게 됨


49. 박정희 정부의 경제 정책(정부 주도, 수출 주도형 성장 정책)


제 1,2차 경제 개발(1962~1971)

목표:

기간 산업 및 사회간접 자본 확충

경공업(노동집약적 산업 섬유 가발 신발같은) 중심의 수출 산업 육성

경공업이 국가경쟁력 갖추려면 가격이 낮아야함, 저임금 저곡가 정책, 즉 저임금받던 노동자, 저곡가받던 농민들의 희생이 있었다.

베트남 특수로 호황

새마을 운동(1970)시작

성과:

고도의 경제 성장(경제성장률 년 10% ㅎㄷㄷ)

국가 경제 도약의 발판 마련

제 3,4차 경제 개발(1971~1981)

목표:

재벌 중심의 중화학 공업 육성

중동 건설 특수로 석유 파동 위기 극복

수출 증대에 의한 국제 수지 개선

새마을 운동 병행

성과:

수출 100억불 달성

신흥 공업국, 한강의 기적

문제점:

재벌 중심의 경제 정책, 정경 유착(아직도 문제인)

대외 의존도 심화(미국과 일본에), 외채 급증

저임금과 노동 문제 발생(전태일사건, YH사건 등), 빈부 격차 심화


50. 10.26사태이후


10.26사태로 비상계엄 선포

당시 국무총리 최규하가 통일 주체 국민회의에서 최규하가 10대 대통령 선출(1979.12.6)

12.12사태(1979.12.12)

신군부(전두환 노태우 중심)의 권력장악, 최규하를 협박하고 군내에 온건파들을 제거함

서울의 봄(1980.5)

3월부터 대학들 개강하고 학생들이 모여서 신군부 퇴진과 유신헌법 철폐와 민주화 운동이 시작함

이 열기가 가장 컸던 것이 1980년 5월

서울역 앞에서 신군부 퇴진과 계엄해제를 요구한 민주화 운동을 서울의 봄이라 한다.

계엄의 전국적 확대, 국회 폐쇄, 언론 통제(즉 더 강화됨)

각대학의 휴교령을 내림

광주 5.18 민주화 운동(1980.5)

서울의 봄의 내용은 전국적이었다.(민주화 요구, 신군부 퇴진, 계엄해제)

광주는 추가로 1개 더 요구함, 김대중 석방 요구(당시 신군부는 민주화 관련 인사들 모두 철창행, 김대중 내란 음모죄로 사형선고됐었음)

광주 계엄군의 과잉진압으로 광주 시민들이 분노하여 무장하여 시민군을 조직함

계엄군이 광주에서 철수한 다음에 다시 들어와서(5.27) 무차별 공격으로 전남도청을 지키던 많은 시민들이 희생


이후 전두환 정부가 등장함


51. 제5공화국(전두환정부, 1981~1988)


배경:

국가 보위 비상 대책 위원회 설치(입법,행정,사법 업무의 조정, 통제, 즉 삼권장악)

김대중 내란 음모 사건 기소, 언론 통폐합, 비판적 기자,교수 해직

통일 주체 국민회의에서 전두환 11대 대통령 선출(1980.9.1)(10대 대통령 최규하가 하야, 1980.8.16)

성립:

8차 개헌(대통령 간선제, 7년 단임)

국회 해산

민주 정의당 창당(전두환 정권의 집권 정당)

대통령 선거인단에 의해 전두환 12대 대통령에 당선

통치내용:

강압통치:

공직자 숙청,

언론 통폐합, 보도 지침(당시 KBS 뉴스가 선도한, 떙전뉴스(9시 뉴스가 시작되면 전두환 대통령얘기부터함)),

삼청교육대 운영(박정희가 깡패떄려잡아서 민중들이 좋아했던 것 따라한 것)

당시 깡패가 별로 안잡혀가지고 장발, 노숙자들 강압적으로 잡아넣음

유화 정책:

해외 여행 자유화

야간 통행 금지 해제

교복과 두발 자율화

프로 스포츠 활성화(1982 프로야구 출범)(유화정책으로 주로 쓰던 전략이 스포츠전략)

칼라티비방송 시행

경제:

저금리, 저유가, 저달러에 의한 3저 호황으로 고도 성장

(따라서 상당수 국민들은 전두환 정부의 억압을 못느끼고 있었다. 박종철 고문 치사 사건 전까진)


52. 6월 민주 항쟁(1987)

배경:

부천경찰서 성고문사건(1986.6), 박종철 고문 치사 사건(고문당하다 죽음, 1987.1) 등 인권 탄압에 국민 불만 고조

대통령 직선제 요구(당시 민주 정의당 노태우 후보가 대통령 될거가 기정 사실화로, 신군부의 정권 연장을 막아야겠따는)하지만

전두환의 4.13 호헌 조치(신군부가 정권을 연장하겠다는 것)로 직선제 개헌을 거부함

경과:

박종철 고문 살인 조작, 은폐 규탄 호헌 철폐의 6.10 국민 대회 개최(잠실 체육관에서 6.10 노태우 차기 대통령 후보로 뽑히는 날)

6.9 시위 도중 이한열이 최루탄을 맞아 의식 불명(이후 7월15일에 사망), TV보도가 되버림

전국으로 시위 확산, 범국민적(100만명이상)

결과:

민주 정의당의 대통령 후보 노태우는 4.19혁명때처럼 될까바,6.29 선언 발표

5년 단임의 대통령 직선제 개헌(1987.10), 마지막 9차 개헌


53. 제6공화국


노태우 정부(1988~1993)

야권의 분열로(김대중(호남), 김영삼(영남), 후보 단일화 안하고 싸움) 노태우 13대 대통령에 당선(1988.2)

대선 이후 총선에서 여소야대 정국(민주정의당(여당)120석정도, 평화민주당(김대중)70석 민주당(김영삼)50석, 공화당(김종필)30석)

5공 청문회 개최

전두환 비자금 수사, 노무현 활약

3당 합당(민주정의당, 민주당, 공화당 합당하여 민주 자유당 출현(노태우 중심))

서울 올림픽 개최

지방 자치제 부분적 실시

노동 운동 활성화

북방 정책(소련, 중국과 수교), 남북한 동시에 UN가입, 남북 기본 합의서

김영삼 정부(1993~1998, 즉 김대중 3번떨어짐)

14대 대통령 김영삼

30여년만에 출범한 문민 정부(군인이 아닌 일반인 출신의 대통령, 즉 이승만 다음으로)

지방 자치제 전면적 실시

고위 공직자 재산 등록세

금융 실명제

OECD가입(당시 상징적 의미가 컸음, 선진국들만 가입하던 시기였는데, 요즘은 개나소나 다들어가니까 상징적의미는 줄어듦)

역사 바로 세우기(전두환 노태우 구속)

금융권의 부실, 재벌의 방만 운영(기아자동차, 한보사태 등)으로 외환 위기 발생, IMF(1997.12)에게 구제요청

김대중 정부(1998~2003)

15대 대통령 김대중(vs이회창), 야당에서 대통령됨

최초의 평화적 정권 교체(국민의 정부 출범)

외환 위기 극복(부실 기업 정리, 구조 조정 금융 개혁, 외국 자본 유치)

범국민적 금모으기 운동, 노사정 위원회 출범

햇볕 정책(금강산 관광 시작), 남북 정상 회담(2000.6.15 공동선언발표)

(제6공화국에서도 노태우 정보랑 구분짓기위해 각각 문민정부, 국민의 정부 라고 부름)


54. 김일성 독재 체제의 확립


1950년대(정적 숙청)

6.25 전쟁 직후 남로당(박헌영) 세력 축출(부수상인 박헌영이 6.25 진두지휘했는데 책임져라)

종파 사건(김일성이 해외 순방나간 사이에 연안파(최창익중심)+소련파 연합으로 김일성 비판한 사건)을 계기로 소련파(허가이), 연안파 김두봉 숙청

사회주의 경제 체제 확립, 모든 농지의 협동 농장화, 국영화

노동 운동 강화를 위해 천리마 운동(1957)

1960년대(주체 사상)

중국, 소련 이념 분쟁(중국식 사회주의, 소련식 사회주의 이념분쟁), 국경 분쟁 발생으로 주체 사상의 성립(1967, 즉 중국 소련 둘다 편 들 수 없어서, 북한식 사회주의)

김일성 유일 체제 확립, 김일성 개인 숭배 합리화

1970년대(김정일 후계 작업)

사회주의 헌법 공포(1972), 국가 주석제 도입(김일성이 주석을 겸함)

김일성이 조선 노동당 총비서와 주석 겸임, 독재 체제 강화

김정일 노동당 비서(1973)로 시킨 다음에 김일성의 유일한 후계자로 내정

1990년대(김정일 권력 승계)

김정일의 후계 체제 공식화

김정일 국방 위원장 취임(1993)

김일성 사망(1994) 후 김정일 정권 출범(1998)


북한의 경기침체 극복 노력

합작회사경영법(1984)


경제개방

나진, 선봉 자유 무역 지대 설치(1991)


남한과의 교류 확대

금강산 관광

1998은 해로로, 2000은 육로로감

신의주 경제 특구

개성공단 설치


note)북한은 외국의 자본 유치를 하려하나 자본주의 체제 허용안함(예를 들면 모든 회사의 노동자의 임금을 북한이 정함)


55. 통일 정책


1950~1970

이승만 정부

철저한 반공, 반북 정책, 북진 통일론

진보당의 평화 통일론 탄압

장면 내각 정부

선경제 건설 후통일론, UN 감시하에 남북한 총선거 주장(but 북한에서 결사반대)

민간 차원에서의 통일 논의 활발(남북 협상론(가자 북으로 오라 남으로, 판문점에서 만나서 협상하자), 중립화 통일론)(but 정부가 반대)

박정희 정부

원칙: 선 건설 후 통일론 계씅

1960년대:한반도의 긴장 고조(1.21사태, 푸에볼레호 사건)

1970년대:남북 대화의 출발

남북 적십자 회담(1971):1천만 이산 가족 찾기 운동 제의

1972.7.4 남북 공동 선언

자주적, 평화적, 민족 대단결의 3대원칙

남북 조절 위원회 설치(활동 미미), 남북한 독제 체제 강화에 이용(남한에서는 박정희가 이후 유신체제, 북한에서는 김일성이 사회주의 헌법)

1973.6.23 평화 통일 선언(1973):남북한 UN 동시 가입 제안(but 실패)


1980년대 이후

전두환 정부

남북한 이산 가족, 예술 공연단 교환 방문(1985)

노태우 정부

1988.7.7 선언:북한을 적대 대상이 아니라 민족 공동체로 인식

남북 고위급 회담, 남북한 동시 UN가입(1991)

남북 기본 합의서(1991.12)채택(남한, 북한 각각의 상호체제 인정, 상호 불가침선언, 남북 교류 확대(이때 탁구, 축구 남북단일팀 등이 생김)

한반도 비핵화에 관한 공동 선언문 채택(1992)

김영삼 정부

한민족 공동체 건설을 위한 3단계 통일 방안 제시(1994)

한반도 에너지 개발 기구(KEDO)에 의한 경수로 발전 사업 추진

(사실 거둔 성과가 없다)

김대중 정부

베를린 선언, 남북 정상 회담 개최(2000)

6.15 남북 공동 선언(2000)

이산 가족 상봉, 경의선 철도 복구, 개성 공단 설치, 금강산 육로 관광

노무현 정부

2007.10.4 남북 정상 선언문, 개성관광























'제거된 것' 카테고리의 다른 글

알고리즘(Algorithms)  (0) 2018.03.21
TA과목들  (0) 2016.11.17
화음인식의 모든 것  (0) 2016.04.15
[수학]Machine Learning:An Algorithmic Perspective, 2nd Edition  (0) 2016.03.20
[삭제예정]150906(일?)텝스대비  (0) 2015.09.02

 

'이미지창고 > [수학]Theorems' 카테고리의 다른 글

[수학]Theorems(49)  (0) 2016.10.11
[수학]Theorems(48)  (0) 2016.10.11
[수학]Theorems(47)  (0) 2016.10.11
[수학]Theorems(46)  (0) 2016.10.11
[수학]Theorems(45)  (0) 2016.03.07

*DEF

algebraic over F

transcendental over F

(monic)irreducible polynomial for α over F

degree of α over F

simple extension of F

vector space over F

span, dimension, linearly independent over F, basis for V over F,

algebraic extension of F

finite extension of F

the algebraic closure of F in E

algebraically closed field

a algebraic closure of F


*THM

Kronecker's Theorem

FEF이면 AEF

AEF가 FEF이다 iff AEF=F(α1,α2,...,ακ) for some α1, α2, ..., ακ in E

About finite fields

Z_p is finite field of order p

About Existence of finite fields

char(F)=p이면 x^p^n - x has p^n distinct zeros in ac(F)

GF(p^n) exists

All finite fields of order p^n are isomorphic

About structures of finite fields

F:finite, E:FEF of F, [E:F]=n

char(F)=p and |F|=p^n for some n and F={x in ac(Z_p) s.t. x^p^n - x in Z_p[x]} and te irreducible poly f(x) in F[x] of degree n

char(E)=p and |E|=|F|^n and E:simple extension of F

따라서 정리하면,

이미 알고 있는 finite fields는 Z_p가 있다.

ac(Z_p)에서 p^n order finite field를 항상 만들 수 있다. GF(p^n)

하지만 임의의 finite field는 더 넓은 집합

임의의 finite field F의 char는 p인걸 알고 따라서 order는 p^n인걸 알고 이것은 GF(p^n)과 isomorphic

기타 부가적인 내용:E:FEF of finite field F일 때 |E|=|F|^n with n=[E:F] and E:simple extension of F





*HW


*Additional Problems

Prove that x​3 - nx + 2 in Z[x] is irreducible over Z

(n is an integer s.t. it is not equal to -1, 3, 5)

Determine the degree of the extension Q((3+2​1/2)​​1/2​) over Q

p:any prime, a:nonzero element in Z_p, Prove that x^p - x + a is irreducible over Z_p

V={0}의 basis는 empty set, 따라서 dimension = 0

x^4 + 1 is irreducible in Z[x], reducible over Z_p for all prime p

char(F)=0이면 E:FEF of F는 simple extension of F

char(F)=p이고 E:FEF of F인데 not simple인 예 존재, F=ac(Z_p)(x^p,y^p), E=ac(Z_p)(x,y), [E:F]=p^2

'기타 > 기타' 카테고리의 다른 글

혼자서 집짓기  (0) 2018.04.26
논문작성법및연구윤리, 노상도  (0) 2016.10.23
프랑스 대입시험 바칼로레아 기출문제  (0) 2014.02.07

+ Recent posts