0%

바둑에 대해서 잘은 모르지만 그로부터 유래된 단어는 간혹 일상에서 사용하곤 한다.
바둑 용어 중에 복기라는 말이 있다.
대국이 끝나고 승패가 결정되었음에도 내용을 검토하기 위해 상호 간 처음부터 두었던 순서대로 다시 두어 재연함 뜻하는 단어다.
복기로부터 바둑 기사들은 대국에서 잘한 수와 잘못했던 수, 상대방의 전략 등을 살펴본다.
프로 9단 바둑기사 이창호는 다음과 같이 말할 정도로 복기를 중요시 했다고 한다.

승리한 대국의 복기는 이기는 습관을 만들어주고, 패배한 대국의 복기는 이기는 준비를 만들어준다

조훈현 9단 또한 복기가 가지않았던 길을 갈 수 있게 한다 하였으며, 패배로 인해 아플수록 더 예민하게 들여다보고 복기해야한다는 말을 했더랬다.
이 바둑기사들이 많은 수를 순서대로 기억하여 복기를 할 수 있는 이유는 한 수 한 수에 집중하고 의미를 부여하여 두었기 때문이라고 한다.

Read more »

2020년 여름의 어느 날 저녁.

코로나로 인해 대부분의 사람들은 마스크를 쓰고 있다.

술이 조금 취한 듯 보이는 30대 후반 정도의 남자 두 명이 지하철에 탑승했다.

한 명은 마스크를 턱에 반 쯤 걸쳐놓았고, 다른 한 명은 아예 쓰고 있지 않았다.

마스크를 쓰지 않은 남자가 마스크를 걸친 남자에게 노약자석이 비었으니 노약자석에 앉자고 했다.

Read more »


U-Net: Convolutional Networks for Biomedical Image Segmentation

MICCAI 2015


Paper

  • https://arxiv.org/pdf/1505.04597.pdf

Source Code Repository

  • Official Model: https://lmb.informatik.uni-freiburg.de/resources/opensource/unet/
    • Framework: Caffe
  • Reproduce Model: https://github.com/jakeret/tf_unet
    • Framework: Tensorflow
    • Paper: https://arxiv.org/pdf/1609.09077.pdf in Astronomy and Computing 2017
    • Documentation: https://tf-unet.readthedocs.io/en/latest/installation.html
  • Reproduce Model: https://github.com/zhixuhao/unet
    • Framework: Keras
  • Reproduce Model: https://github.com/milesial/Pytorch-UNet
    • Framework: PyTorch
Read more »

Complete Binary Tree

Tree에 대한 기본적인 설명은 루비콘 팀 Martin Kim의 포스트를 참조한다. 🙇

Ref: https://blog.martinwork.co.kr/theory/2018/09/22/what-is-tree.html

추가적으로 Tree에 대해 부가설명을 덧붙인다.
Tree의 정의는 다음 2가지를 따른다.


1. A root node

2. The remaining nodes are partitioned into $n(n \geq 0)$ disjoint sets $T_1, T_2, … , T_n$ ($T_i$ : subtrees of the root)


즉, 루트 노드가 존재하며, 0개 이상의 서브트리로 분리된 노드가 존재해야 한다.
이 중 Full Binary Tree는 Depth가 $k$일 때, 총 노드의 개수는 $2^k - 1$개인 트리이며,
Complete Binary Tree는 Depth가 $k$인 Full Binary Tree를 왼쪽에서부터 순차적으로 읽었을 때, $k-level$에서 Complete Binary Tree의 총 노드 수 $n$의 인덱스를 가진 노드가 존재하는 것을 말한다.
이 때, $k =\lceil\log_{2}(n + 1)\rceil$이 성립한다.
Complete Binary Tree는 마지막 레벨을 제외하고 모든 레벨이 채워져 있으며, 마지막 레벨의 모든 노드는 가능한 한 가장 왼쪽에 있기 때문에 공간의 낭비가 없어 배열로 구현하는 것이 효율적이다.

Read more »

자료구조란?

자료구조를 공부하는 것은 알고리즘을 해결하는데 뿐만 아니라, 라이브러리나 프레임워크를 사용할 때 단순히 가져다 쓰지 않고, 내부적으로 어떻게 구현되있는지에 대한 이해도가 향상되므로 라이브러리에 있는 적절한 자료형을 사용할 수 있다.

OOP와 자료구조

자료구조란 위키백과의 정의에 따르면 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법이다.
즉, 어떠한 알고리즘을 구현하는데 있어 그에 맞는 자료구조를 설계하여 사용해야 시간적으로 혹은 공간적으로 자원을 최소화 할 수 있다.
사실, 위의 말은 이제 프로그래밍을 시작하고 자료구조라는 단어를 처음 듣는 사람들에게는 잘 와닿지 않는다.
조금 더 구체적으로 말하자면, 모든 프로그래밍 언어들에는 int, char, boolean 등의 가장 기본적인(primitive) 자료형이 존재한다.
그러나 primitive 자료형으로만 코딩을 했을 때, 재사용성이 떨어지고 제한적이다.
그렇기 때문에 주로 사용자 자료형, 다시 말해 추상 자료형(Abstract Data Type, ADT)를 정의하여 사용하는 것이 바람직하며, ADT가 곧 자료구조라고 할 수 있다.

Read more »