gbdai의 등록된 링크

 gbdai로 등록된 티스토리 포스트 수는 67건입니다.

[논문 리뷰] Finetuned Language Models Are Zero-Shot Learners [내부링크]

이번 게시물에서는 기존 LLM을 instruction(지시문)으로 fine-tuning 한 instruction-tuned model, FLAN을 제안한 Finetuned Language Models Are Zero-Shot Learners 논문에 대해 다뤄보겠다. 원문 링크는 아래와 같다. Finetuned Language Models Are Zero-Shot Learners This paper explores a simple method for improving the zero-shot learning abilities of language models. We show that instruction tuning -- finetuning language models on a collection of t..

[Dart] Dart의 class [내부링크]

class Class declaration dart에서 class는 다음과 같이 선언한다. 이때, function 내에서는 var 키워드를 사용하여 타입을 명시할 필요는 없지만, class 내에서는 타입을 명시하여 변수를 생성해줘야한다. class Player { // function 내에서는 var 키워드를 사용하여 타입을 명시할 필요는 없지만, // class 내에서는 타입을 명시하여 변수를 생성해줘야함 final String name = "Dart"; int level = 1; void sayHello() { // dart의 class에서는 this나 self와 같은 키워드를 사용하지 않아도 된다 // 다만, this 키워드는 사용 가능하긴 하다 // 메소드 내의 변수와 class의 property..

[논문 리뷰] Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering [내부링크]

이번 게시물에서는 retrieval augmented language model의 일종인 RAG model을 내부적으로 수정하여 발전시킨 FiD (Fusion-in-Decoder) model을 제안한 Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering 논문에 대해 다뤄보겠다. 본 논문의 저자중 한명인 Gautier Izacard 님은 추후 Atlas와 같은 retrieval augmented language model 후속 연구도 진행하셨으며, LLAMA의 개발에도 참여하신 분이다. 원문 링크는 아래와 같다. Leveraging Passage Retrieval with Generative Models ..

[논문 리뷰] Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks [내부링크]

이번 게시물에서는 Retrieval-Augmented Language Model 중 하나인 RAG model을 제시한 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 논문에 대해 다뤄보겠다. 해당 논문이 발표되었던 시기에는, REALM과 같은 Retrieval-Augmented Language Model이 이미 제안되었던 상황이었다. RAG model은 기존 REALM과 같은 model과는 달리, Encoder-Decoder 구조를 차용하면서 output을 산출하는 과정을 text generation task로 변형하였다는 특징이 있다. 원문 링크는 아래와 같다 Retrieval-Augmented Generation for Knowled..

[Dart] Dart의 function(함수) [내부링크]

Function Define function 타 언어와 비슷한 방법으로 함수를 정의할 수 있다. void sayHello(String name) { // string interpolation print("Hello $name"); } String sayHello2(String name) { return "Hello $name"; } void main() { sayHello("Dart"); String prompt = sayHello2("Flutter"); print(prompt); } 또한, 아래와 같이 fat arrow syntax를 통해 간단하게 함수를 정의할 수 있다 // fat arrow syntax // 값을 반환하는 함수의 경우, 아래와 같이 간소화할 수 있다 String simplesayHe..

[Dart] Dart의 data type [내부링크]

Data Type Basic Data Types dart의 기본적인 데이터 타입은 다음과 같다. void main() { String name = 'Dart'; bool isTrue = true; int age = 26; double height = 1.75; // num 자료형은 int와 double을 모두 포함한다. // num class의 경우에는 int와 double의 부모 클래스이다. num x = 12; num y = 12.45; } python과 비슷하게, dart의 모든 자료형들은 객체로 이루어져 있다. (function도 객체로 취급된다.) list void main() { var numbers = [1, 2, 3]; List numbers2 = [1, 2, 3, 4]; /..

[논문 리뷰] REPLUG: Retrieval-Augmented Black-Box Language Models [내부링크]

이번 게시물에서는 Retrieval-Augmented model을 GPT-3와 같이 API로만 공개되어, 내부 구조에 접근 불가능한 상황에서도 사용할 수 있게끔 연구한 논문인 REPLUG: Retrieval-Augmented Black-Box Language Models에 대해 다뤄보겠다. 해당 논문은 워싱턴 대학교에서 박사 과정을 진행중이신 민세원님과 카이스트의 서민준 교수님께서 연구에 참여하신 논문이다. 원문 링크는 다음과 같다. REPLUG: Retrieval-Augmented Black-Box Language Models We introduce REPLUG, a retrieval-augmented language modeling framework that treats the language mod..

[논문 리뷰] REALM: Retrieval-Augmented Language Model Pre-Training [내부링크]

이번 게시물에서는 최초로 retrieval와 language model을 같이 pre-training을 진행한 REALM을 제안한 논문인 REALM: Retrieval-Augmented Language Model Pre-Training에 대해 다뤄보겠다. 원문 링크는 아래와 같다. REALM: Retrieval-Augmented Language Model Pre-Training Language model pre-training has been shown to capture a surprising amount of world knowledge, crucial for NLP tasks such as question answering. However, this knowledge is stored implici..

[논문 리뷰] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer [내부링크]

이번 게시물에서는 구글에서 연구하고 발표한 T5를 다룬 논문인 Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer에 대해 다뤄보겠다. 해당 모델의 경우, BART와 같이 Encoder-Decoder 구조를 지니고 있으며, 모든 task에 대해 text-to-text task로 다룬다는 특징을 가지고 있다. 이에 대한 자세한 내용은 아래에서 다루도록 하겠다. 또한, 논문의 양이 매우 긴 편인데(Appendix와 Reference를 제외하고도 40페이지 남짓), 저자들이 T5를 연구하면서 진행한 가설 설정 및 비교 실험을 모두 담아놓았기 때문에 그렇다. 처음부터 차근차근 따라가면 NLP에서의 language mod..

[논문 리뷰] Self-Attention with Relative Position Representations [내부링크]

이번 게시물에서는 transformer 구조에서 위치 정보를 추가해주기 위해 사용되는 position representation을 절대적인 위치 정보가 아닌 상대적인 위치 정보로 나타낸다는 아이디어를 담은 논문인 Self-Attention with Relative Position Representations을 리뷰해보겠다. 원문 링크는 다음과 같다. Self-Attention with Relative Position Representations Relying entirely on an attention mechanism, the Transformer introduced by Vaswani et al. (2017) achieves state-of-the-art results for machine trans..

[논문 리뷰] Big Bird: Transformers for Longer Sequences [내부링크]

이번 게시물에서는 Big Bird를 제시한 논문인 Big Bird: Transformers for Longer Sequences에 대해 다뤄보도록 하겠다. 해당 논문은 2020년도 NeurIPS에 소개되었다. 원문 링크는 다음과 같다. Big Bird: Transformers for Longer Sequences Transformers-based models, such as BERT, have been one of the most successful deep learning models for NLP. Unfortunately, one of their core limitations is the quadratic dependency (mainly in terms of memory) on the sequen..

[Python] Pypi에 패키지 업로드하기 [내부링크]

보다 깊은 공부도 할 겸, 재미도 있어 보여서 Numpy만으로 구성한 딥러닝 프레임워크 비슷하게 만들어보게 되었다. 깃허브에는 올리긴 했는데, 이어서 Pypi에도 업로드하여 pip install로 다운로드할 수 있으면 좋을 것 같아서, 해당 코드를 업로드해 보았다. 나의 경우에는 neuralflow라는 이름의 패키지를 만들었는데, 이를 Pypi에 업로드하기 위해서는 다음과 같은 구성으로 만들어줘야 한다. 맨 위에 상위 폴더가 존재하고, 그 아래에, build, dist, neuralflow, neuralflow.egg-info, LICENSE, README.md, setup.py가 구성되어 있는 모습이다. 이 중에서 build, dist, neuralflow.egg-info는 추후 언급할 단계에서 자동적..

[논문 리뷰] Multilingual Language Processing From Bytes [내부링크]

이번 게시물에서는 GPT-2 논문에서 제시된 Byte-level BPE(BBPE)에서 언급된 Multilingual Language Processing From Bytes라는 논문을 리뷰해보도록 하겠다. 사실 BBPE를 더 잘 이해해보기 위해 보게 된 논문이기에, 이번 게시물에서는 byte-level에서의 input representation처리와 관련해서만 다루고, 나머지는 생략하도록 하겠다. 원문 링크는 다음과 같다 Multilingual Language Processing From Bytes We describe an LSTM-based model which we call Byte-to-Span (BTS) that reads text as bytes and outputs span annotation..

[논문 리뷰] Language Models are Unsupervised Multitask Learners - GPT-2 [내부링크]

이번 게시물에서는 GPT-2를 제안한 Language Models are Unsupervised Multitask Learners 논문에 대해 리뷰해보려고 한다. 원문 링크는 다음과 같다. https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf Introduction 이 논문이 작성될 시기의 machine learning system들은 data의 분포와 model이 수행해야 하는 task의 변화에 대해 매우 민감했었다. 또한, 그 당시 machine learning system은 모든 task에서 general하게 좋은 성능을 보여주는 방향이 아닌, 수행해야하는 특정 task에 대해 특화되어있는 모습을 보였다.(원문에..

[논문 리뷰] The Natural Language Decathlon:Multitask Learning as Question Answering - DecaNLP를 중심으로 [내부링크]

이번 게시물에서는 DecaNLP와 MQAN을 통해 NLP에서 multitask learning의 가능성을 보여준 논문인 The Natural Language Decathlon: Multitask Learning as Question Answering을 리뷰한다. 원문 링크는 다음과 같다. The Natural Language Decathlon: Multitask Learning as Question Answering Deep learning has improved performance on many natural language processing (NLP) tasks individually. However, general NLP models cannot emerge within a paradigm th..

구글 BERT의 정석에 정정요청을 해보았다 [내부링크]

요즘 NLP 관련된 논문들을 쭉 읽어오고 있었는데, 어느덧 RoBERTa 논문을 보게 될 차례가 왔다. 보통 논문을 볼 때 한번 쭉 읽고 다시 처음으로 돌아가서 하나씩 뜯어보는 방법으로 봐왔는데, 이때 이해가 잘 가지 않는다면 이런저런 자료들을 찾아가며 공부하곤 한다. 어김없이 RoBERTa 논문에서도 살짝 막히는 부분이 있었고, 이를 해결하기 위해 여러 자료들을 찾던 중 한빛미디어에서 출간한 구글 버트의 정석이라는 책을 참고하게 되었다. 그런데, 교재에서 RoBERTa를 설명할 때 dynamic masking 부분이 더욱 이해가 가질 않았다. 교재에 의하면, dynamic masking(동적 마스킹)은 하나의 문장을 10개 복사한 뒤, 10개의 문장에 각기 다른 masking pattern을 적용하여 ..

[선형대수학] Orthogonality(직교성) [내부링크]

Orthogonality Orthogonal(직교) orthogonality에 대해 간단하게 말하자면, 두 벡터 $u$와 $v$가 $\mathbb{R}_n$ space에 있을 때, 두 벡터의 Inner product가 0이면 orthogonal 하다고 한다. 예시와 함께 살펴보자. 예시 그림은 $R^3$ space이며, 여기에 w라는 원점을 지나는 $R^3$의 subspace가 $W$가 있고, 원점을 지나며 subspace plane $W$와 perpendicular, 즉 직교하는 선인 $L$이 존재한다. 이때, subspace $W$에 존재하는 임의의 벡터 $w$와 line $L$에 존재하는 임의의 벡터 $z$를 잡아보자. 이 두 벡터 $w$와 $z$에 대해 inner product를 취하면 0이 나오..

[선형대수학] Inner product(내적)와 Length, Distance [내부링크]

Inner product(내적) 다음과 같은 u와 v, 두 개의 벡터가 주어졌을 때 inner product는 가운데 위치한 수식처럼 u의 transpose에 v를 곱해주는 것으로 정의된다. 예시를 통해 알아보자 다음과 같은 u와 v를 inner product를 취해주면 다음과 같은 과정을 통해 -1이라는 값이 나오는 것을 확인할 수 있다. 이때, 순서를 바꾸어서 inner product를 취해도 같은 결과가 나오게 된다. 그렇다면, 이러한 inner product는 어떠한 특징을 가지고 있을까? 특징은 다음과 같다. 앞서 살펴본것처럼 순서를 바꾸어서 inner product를 취해도 값은 같다. 분배 법칙이 적용된다. 스칼라곱을 취한 vector와 다른 vector를 Inner product를 취할 때..

[논문 리뷰] RoBERTa: A Robustly Optimized BERT Pretraining Approach - RoBERTa [내부링크]

이번에는 BERT를 발전시킨 RoBERTa를 제안한 논문인 RoBERTa: A Robustly Optimized BERT Pretraining Approach에 대해 리뷰해보려 한다. 원문 링크는 다음과 같다. RoBERTa: A Robustly Optimized BERT Pretraining Approach Language model pretraining has led to significant performance gains but careful comparison between different approaches is challenging. Training is computationally expensive, often done on private datasets of different sizes..

[논문 리뷰] GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding - GLUE [내부링크]

이번에는 GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding이라는 논문을 리뷰해보도록 하겠다. 해당 논문은 GLUE benchmark를 제안하는 논문이며, 이 GLUE는 GPT, BERT와 같은 pre-trained language model의 성능을 테스트할 때 사용된다. 원문 링크는 다음과 같다. GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding For natural language understanding (NLU) technology to be maximally useful, both pract..

[논문 리뷰] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding - BERT [내부링크]

이번 게시글에서는 BERT를 제시한 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 논문에 대해 리뷰해보겠다. 원문 링크는 다음과 같다. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding We introduce a new language representation model called BERT, which stands for Bidirectional Encoder Representations from Transformers. Unlike recent language representation models, BERT..

[논문 리뷰] Improving Language Understanding by Generative Pre-Training - GPT [내부링크]

이번에는 최근 GPT 3.5와 더불어 ChatGPT를 발표하면서 다시금 주목을 받고 있는 OpenAI의 GPT가 처음 소개된 논문, Improving Language Understanding by Generative Pre-Training을 리뷰해보고자 한다. 아래 링크는 chatGPT 링크인데, 여러 영상들이나 글에서 본 사람들도 있을 테지만 매우 좋은 성능을 보여주기 때문에 한 번씩 시도해보는 것도 재미있을 것 같다. ChatGPT: Optimizing Language Models for Dialogue We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it poss..

[논문 리뷰] Using the Output Embedding to Improve Language Models - Weight tying [내부링크]

이번에는 Embedding vector의 weight를 같게 하는 weight tying에 대해 연구한 Using the Output Embedding to Improve Language Models 논문에 대해 리뷰해보고자 한다. Transformer를 소개한 Attention is all you need 논문에서 인용되었고, Transformer의 embedding vector를 구성할 때 이 논문을 인용하며 same weight를 공유한다길래, 관심이 생겨서 읽어보게 되었다. 논문 원문 링크는 아래와 같다. Using the Output Embedding to Improve Language Models We study the topmost weight matrix of neural network l..

[선형대수학] Gauss-Jordan elimination(가우스-요르단 소거법)과 Solution of linear system [내부링크]

Echelon form(행사다리꼴) Echelon form(행사다리꼴)이란, 다음의 특성을 가지는 행렬을 말한다. All nonzero rows are above any row of all zeros -> 0으로만 이루어진 행들은 맨 밑에 위치해야 한다 Each leading entry(특정 행에서 제일 왼쪽에 있는 nonzero entry)of a row is in a column to the right of the leading entry of the row above it -> 특정 행의 leading entry가 자기 자신보다 위에 있는 leading entry보다 오른쪽에 있어야 함 예제와 함께 살펴보자 위의 행렬을 살펴보면, 모든nonzero row(0이 아닌 요소가 포함된 행)가 zeros(..

[논문 리뷰] Attention is all you need - transformer란? [내부링크]

이번 글에서는 Attention is all you need 논문을 살펴봄과 동시에 논문에서 제시하는 아키텍처이자, 현재로서는 매우 중요해진 transformer에 대해 살펴보도록 하겠다. 논문 링크는 아래와 같다. Attention Is All You Need The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a..

[논문 리뷰] Effective Approaches to Attention-based Neural Machine Translation - Luong Attention [내부링크]

이번에는 Luong Attention을 다루고 있는 Effective Approaches to Attention-based Neural Machine Translation이라는 논문에 대해 리뷰해보려고 한다. 원문 링크는 아래와 같다. Effective Approaches to Attention-based Neural Machine Translation An attentional mechanism has lately been used to improve neural machine translation (NMT) by selectively focusing on parts of the source sentence during translation. However, there has been little wo..

[논문 리뷰] Neural Machine Translation by Jointly Learning to Align and Translate - Bahdanau Attention [내부링크]

이번에는 Neural Machine Translation by Jointly Learning to Align and Translate 이라는 논문을 리뷰해보겠다. 해당 논문의 경우, seq2seq에 attention을 도입, NMT(Neural Machine translation, 신경망 기계 번역) task에 적용하여 성능을 발전시킨 논문이다. 원문 링크는 다음과 같다. Neural Machine Translation by Jointly Learning to Align and Translate Neural machine translation is a recently proposed approach to machine translation. Unlike the traditional statistical ..

RNN(Recurrent Neural Network)이란? [내부링크]

RNN(Recurrent Neural Network) 이번 글에서는 RNN의 개요, Single-layered RNN과 Multi-layered RNN, 마지막으로 Bidirectional Multi-layered RNN(Bidirectional RNN)에 대해 살펴보려고 한다. RNN 개요 RNN(Recurrent Neural Network)은 sequential한 data, 즉, time step이 존재하는 data를 다루는데에 최적화 된 아키텍쳐이다. 이러한 특성 때문에, RNN계열의 아키텍쳐(LSTM, GRU)는 시계열 데이터(주식 데이터, 센서 데이터), 텍스트 데이터, 영상 혹은 음성 데이터에 폭넓게 사용된다. 시계열 데이터의 경우, 데이터 안에 있는 특정 사건이 발생한 시각 정보가 매우 중요..

[Python] 클로저(Closure)와 내부 함수를 알아보자 [내부링크]

클로저(Closure) 내부 함수 내부 함수란, 함수 안에서 정의되는 함수이다 예제를 통해 살펴보도록 하겠다. def outer(name): def inner(): print("Hello ", name) return inner func = outer("Lee") func() # >>> Hello Lee예제를 실행시키면, 먼저 func = outer("Lee")에서 outer함수가 실행된다. 이후, outer함수의 parameter인 name에 "Lee"이 할당되게 된다. 이 때, name은 외부 함수 outer에서 사용하는 지역 변수이다. 그 다음 내부 함수 inner가 정의되고, 이 내부 함수 inner를 반환하게 된다. 그렇다면, func = outer("Lee") 표현식에서 변수 func에는 어떤 ..

[Python] 함수 인트로스펙션(Function Introspection)과 매개변수(Function Parameter), 애너테이션(Function Annotation) [내부링크]

함수 인트로스펙션 함수 객체는 __doc__이외에도 많은 속성을 가지고 있다. 일반적인 객체에는 없지만 함수에는 있는 고유한 속성을 알아보자. 집합으로 변환한 뒤, 차집합을 구하는 방식으로 객체에는 없지만 함수에는 있는 고유한 속성을 나타내보았다. >>> class C: pass >>> obj = C() >>> def func(): pass >>> sorted(set(dir(func)) - set(dir(obj))) ['__annotations__', '__call__', '__closure__', '__code__', '__defaults__', '__get__', '__globals__', '_..

[논문 리뷰] Mixed Precision Training [내부링크]

Mixed Precision Training Deep neural networks have enabled progress in a wide variety of applications. Growing the size of the neural network typically results in improved accuracy. As model sizes grow, the memory and compute requirements for training these models also increases. arxiv.org Mixed Precision Training이라는 논문에 대해 살펴보도록 하겠다 딥러닝이 발전함에 따라, 다양한 분야에서 큰 발전이 이루어졌다. 이러한 발전에는 training dataset의..

[Python] Callable이란? [내부링크]

Callable 객체 호출 연산자인 ()는 사용자 정의 함수 이외의 다른 객체에도 사용할 수 있다. 호출할 수 있는 객체(Callable)인지 알아보려면 callable()내장 함수를 사용한다. 파이썬에는 다음과 같은 callable이 있다. 사용자 정의 함수 def 문이나 람다 표현식으로 생성 내장 함수 len()이나 time.strftime()처럼 C언어로 구현된 함수 내장 메서드 dict.get()처럼 C언어로 구현된 메서드 메서드 클래스 본체에 정의된 함수 클래스 호출될 때 클래스는 자신의 __new__()메서드를 실행해서 객체를 생성하고, __init__()으로 초기화한 후, 최정적으로 호출자에 객체를 반환한다. 파이썬에서는 new 연산자가 없기 때문에 클래스를 호출하는 것은 함수를 호출하는것과..

Attention이란?-원리부터 masking까지 (General Luong Attention을 기반으로) [내부링크]

지난 게시글에서 시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq)를 알아보았다. 시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq)란? - 기본 구조편 시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq)는 입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력하는 모델이다. 기계번역, 챗봇, text summarization 등 다양한 분야에서 사용되지만, 모델 자체의 이해 gbdai.tistory.com 그러나, 이러한 RNN 기반의 시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq)(Sequence-to-Sequence, seq2seq)에는 다음과 같은 문제가 있다. hidden state에 정보를 저장하는데, capac..

시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq)란? - 기본 구조편 [내부링크]

시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq)는 입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력하는 모델이다. 기계번역, 챗봇, text summarization 등 다양한 분야에서 사용되지만, 모델 자체의 이해를 돕기 위해 아래의 설명에서는 번역 task를 기반으로 설명해보겠다. sequence to sequence는 크게 세 가지 부분으로 나뉜다. Encoder Decoder Generator 각자의 요소들이 어떤 기능을 하는지 차근차근 알아보자 Encoder encoder는 입력되는 sequence의 정보를 최대한 보존하도록 압축을 진행하는 역할을 한다. 즉, 문장의 의미가 잘 담겨있는 상태로 높은 차원에 있던 data를 낮은 차원의 latent space(잠재 공간)에 ..

[NLP] 언어 모델(Language Model) 이란? [내부링크]

언어 모델(Language Model) 언어 모델(Language Model)이란, 문장의 확률을 나타낸 모델이다. 즉 문장 자체의 출현 확률을 예측 이전 단어들이 주어졌을 때, 다음 단어를 예측 과 같은 기능을 위한 모델인 것이다. 예시와 함께 알아보겠다. 중고 맥북프로 14인치 모델 130만원에 OOO 다음과 같은 예시에서 빈칸에 아래와 같은 선택지를 고를 수 있다면, 어떤 것을 고를 것인가? 먹습니다 팝니다 모릅니다 맛있다 일반적으로, 2번 팝니다를 고를 것이다. 인간의 두뇌에는 문맥, 즉 단어와 단어 사이의 확률이 학습이 되어있기 때문에 2번 "팝니다"를 무리없이 고를 수 있다. 이러한 Task를 모방하기 위해, 많은 문장들을 수집하여 단어와 단어 사이의 출현 빈도를 세어 확률을 계산하는것이 언어..

[Python] 튜플(Tuple)과 시퀀스의 복합 할당 [내부링크]

튜플(tuple) 튜플은 불변 리스트로 사용할 수도 있지만, 필드명이 없는 레코드로 사용할 수도 있다. 레코드로서의 튜플 튜플은 레코드를 담고 있다. 튜플의 각 항목은 레코드의 필드 하나를 의미하며, 항목의 위치가 의미를 결정한다. 아래는 튜플을 레코드로 사용하는 예시 코드이다. coordinates = (33.9425, -118.408056) city, year, pop, chg, area = ('Tokyo', 2003, 32450, 0.66, 8014) traveler_ids = [("USA", "31195855"), ('BRA', 'CE342567'), ("ESP", "XDA205856")] for passport in sorted(traveler_ids): print("%s/%s" % passpo..

[Python] Python의 내장 시퀀스와 list comp, genexp [내부링크]

sequence 내장 시퀀스 파이썬 표준 라이브러리는 C로 구현된 아래의 시퀀스형을 제공한다 컨네이너 시퀀스 서로 다른 자료형의 항목들을 담을 수 있다. 객체에 대한 참조를 담고 있으며, 객체는 어떠한 자료형도 담을 수 있다. list, tuple, collections.deque 균일 시퀀스 단 하나의 자료형만 담을 수 있다. 객체에 대한 참조 대신 자신의 메모리 공간에 각 항목의 값을 직접 담는다. 컨테이너 시퀀스에 비해 메모리를 더 적게 사용한다. str.bytes, bytearray, memoryview, array.array 시퀀스형은 가변성에 따라서 분류할 수도 있다 가변 시퀀스 list, bytearray, array.array, collections.deque, memoryview 불변 시..

[JavaScript] JavaScript의 객체 [내부링크]

object(객체) 자바스크립트는 객체(object)기반의 언어이며, 자바스크립트를 구성하는 거의 모든 것이 객체이다. 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식)은 모두 객체이다. 원시 타입은 단 하나의 값만 나타내지만, 객체 타임(object type)은 다양한 타입의 값(원시 값 또는 다른 객체)을 하나의 단위로 구성한 복합적인 자료구조이다. 또한, 원시 타입의 값, 원시 값은 변경 불가능한 값(immutable value)이지만, 객체는 변경 가능한 값(mutable value)이다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키(key)와 값(value)으로 구성된다. 아래의 예시를 보자. var person = { name : "Loe", // 프로퍼티(프로퍼티 키..

[TypeScript] TypeScript란? [내부링크]

TypeScript TypeScript란? JavaScript에 Type이라는 개념을 적용함 (Typed JavaScript) Type을 추가하여 JavaScript를 확장시킴 에러를 잡거나 문제를 고치는 시간을 단축시켜줄 수 있음 어떠한 JS 실행 환경에서도 실행 가능함 TypeScript로 작성한 코드는 JavaScript로 compile됨 그러나, 전통적인 compiled language랑은 차이가 많기에, Transpile이라는 용어를 사용 TypeScript 설치 # 전역 설치 npm i typescript -g -g : npm의 global 옵션 : 이를 통해 프로젝트 폴더 내부에만 설치하는 것이 아닌, 디바이스에 전역적으로 설치하게 됨 # 해당 프로젝트에만 설치 npm init -y npm ..

[Python] 함수의 매개변수와 lambda, map, filter [내부링크]

parameter(매개변수) positional parameter(위치 매개변수) 가장 기본적인 매개변수이다. 함수를 호출할 때 순서대로 데이터(인자)를 넘겨줘야 한다. 다른 매개변수와 함께 쓸 때는 항상 맨 앞에 써야 한다.def my_func(a, b): print(a, b) 인자가 1, 2가 순서대로 a와 b에 넘겨짐을 확인할 수 있다. my_func(1, 2) ### default parameter(기본 매개변수) - 매개변수의 default값 - 함수를 정의할 때 매개변수의 기본 값을 지정할 수 있다. ```python # default parameter # content 매개변수의 default값 지정 def info(title, content='no contents'): pri..

[JavaScript] 자바스크립트의 타입 변환 [내부링크]

타입 변환 타입 변환 값의 타입은 다른 타입으로 변경될 수 있다. 의도적으로 값의 타입을 변환하는 것을 명시적 타입 변환(explicit coercion) 혹은 타입 캐스팅(type casting) 이라 한다 반대로, 의도와 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되는 것을 암묵적 타입 변환(implicit coercion) 혹은 타입 강제 변환(type coercion) 이라고 한다. var num = 10; // 명시적 타입 변환(숫자 -> 문자) var str = num.toString(); console.log(typeof str, str); // 암묵적 타입 변환(숫자 -> 문자) var str = num + ''; console.lo..

[Go] Go의 연산자 [내부링크]

연산자(Operator) 산술 연산자 산술 연산자는 숫자 연산을 하는 연산자이다. 사칙 연산, 비트 연산, 시프트 연산이 이에 속한다. 구분 연산자 연산 피연산자 타입 사칙 연산 + 덧셈 정수, 실수, 복소수, 문자열 사칙 연산 - 뻴셈 정수, 실수, 복소수 사칙 연산 * 곱셈 정수, 실수, 복소수 사칙 연산 / 나눗셈 정수, 실수, 복소수 사칙 연산 % 나머지 정수 비트 연산 & AND 비트 연산 정수 비트 연산 | OR 비트 연산 정수 비트 연산 ^ XOR 비트 연산 정수 비트 연산 &^ 비트 클리어 정수 시프트 연산 > 양의 정수 논리 연산자 연산자 논리 연산 내용 && AND 양변이 모두 true이면 true 반환 || OR 양변 중 하나라도 true이면 true 반환 ! NOT true이면 fa..

[JavaScript] 자바스크립트의 제어문 [내부링크]

제어문(control flow statement) 제어문(control flow statement)은 조건에 따라 코드 블록을 실행하거나(조건문), 반복 실행(반목문)할 때 사용된다. 블록문(block statement) 블록문(block statement)이란 0개 이상의 문을 중괄호로 묶은 것이다. 코드 블록 혹은 블록이라고도 부른다. 자바스크립트는 블록을 하나의 실행 단위로 취급한다. 이러한 블록문은 단독으로도 사용 가능하나, 일반적으로는 제어문이나 함수를 정의할 때 사용한다. // block { var temp = 20; } // 제어문 var condition = 2; if (condition < 10) { condition++; } // 함수 선언문 function sum (x, y) { re..

[JavaScript] 자바스크립트의 데이터 타입 [내부링크]

데이터 타입 데이터 타입(data type) 데이터 타입(data type)이란 값의 종류를 말한다 구분 데이터 타입 설명 원시 타입 숫자(number) 숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재 원시 타입 문자열(string) 문자열 원시 타입 불리언(boolean) 논리적 참(true)과 거짓(false) 원시 타입 undefined var 키워드로 선언된 변수에 암묵적으로 할당되는 값 원시 타입 null 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 원시 타입 심벌(symbol) ES6에서 추가된 7번째 타입 객체 타입 객체, 함수, 배열 등 숫자 타입 자바스크립트의 경우, 하나의 숫자 타입만 존재한다. 이러한 특징은 정수와 실수를 구분하여 int, float, double 등과 ..

[JavaScript] 표현식과 문 [내부링크]

표현식과 문 값(value) 값(value)이란, 표현식(expression)이 평가(evaluate)되어 생성된 결과를 말한다. 아래의 예시로 일련의 과정을 같이 살펴보자 // var 키워드로 인해 선언된 변수 sum에 undefined가 초기화되고, // 이후 10 + 20이라는 표현식(expression)이 평가되어 정수 값 30을 생성한다. // 생성된 정수 값 30은 sum 변수에 할당된다. var sum = 20+30; 이 때, 변수에 할당되는 값은 10+20이 아닌 30이기에 10+20은 변수에 할당되기 이전에 평가되어 값을 생성해야한다. 리터럴(literal) 리터럴(literal)이란, 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용하여 값을 생성하는 표기법이다. 사람이 이해할 수 ..

[JavaScript] 변수(variable)란? [내부링크]

변수(Variable) 변수(variable) : 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름 -> 즉, 값을 저장하고 참조하는 메커니즘으로, 값의 위치를 나타내는 상징적인 이름 식별자 식별자(indentifier) : 변수 이름을 식별자라고도 함. 식별자는 값이 아닌 메모리 주소를 기억한다. 즉, 식별자는 메모리 주소에 붙인 이름이다. 변수 선언 변수를 사용하려면 선언이 필수적. 변수 선언 키워드는 var, let, const가 있다. var name 키워드란? 키워드 : 자바스크립트 엔진(Ex : V8)이 수행할 동작을 규정한 일종의 명령어. 자바스크립트 엔진은 키워드를 만나면 수행해야 할 약속된 동작을 수행함. 변수 선언의 2단계 선언 단계 :..

[JavaScript] npm 살펴보기 [내부링크]

npm npm : Node Package Manager npm으로 프로젝트 시작 npm init -y 실행 시 package.json 파일이 생성됨을 확인할 수 있다. { "name": "npm_test", // 프로젝트 이름 "version": "1.0.0", // 프로젝트 버전 "description": "", // 프로젝트 설명 "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, // 프로젝트 내부에서 사용할 수 있는 명령들 "keywords": [], "author": "", "license": "ISC" } npm으로 패키지 설치 npm install "설치하고자 하는 패키지" --sav..

[JavaScript] nvm 살펴보기 [내부링크]

nvm nvm : node version manager nvm 살펴보기 nvm install # 설치하고자 하는 node.js 버전 12.14.1 버전을 설치하고자 하면 nvm install 12.14.1 설치된 버전 확인 nvm ls 사용하고자 하는 버전 선택 nvm use 12.14.1 # 사용하고자 하는 node.js 버전 nvm use를 통해 버전 변경도 가능함 필요없는 버전 지우기 nvm uninstall 12.14.1 # 삭제하고자 하는 node.js 버전

[Go] Go에서의 표준 입출력(with fmt) [내부링크]

표준 입출력 fmt 패키지 Go의 기본 패키지인 fmt는 표준 입출력 기능을 제공한다. 출력 fmt 패키지가 제공하는 3가지의 표준 출력 함수는 다음과 같다. Print() : 함수 입력값들을 출력 Println() : 함수 입력값들을 출력하고 개행 Printf() : 서식(format)에 맞도록 입력값들 출력 (자동 개행 미지원) Printf(문자열, 인수, 인수) //Printf() 형식서식 문자Printf()와 함께 사용하는 서식 문자는 다음과 같다. 서식 문자 효과 %v 데이터 타입에 맞추어 기본 형태로 출력 %T 데이터 타입을 출력 %t boolean 타입 출력 %d 10진수 정수로 출력(정수 타입만 가능) %b 2진수로 출력 %c 유니코드 문자 출력(정수 타입만 가능) %o 8진수로 출력 %O..

[Go] Go에서의 변수 [내부링크]

변수 선언 var a int = 10 var : 변수 선언 키워드 a : 변수명 int : 타입 10 : 초깃값 Go에서의 변수 선언은 변수 선언 키워드-변수명-타입-초깃값의 순으로 이루어진다. 변수 선언의 다양한 방법 var a int = 3 // 기본 형태 var b int // 초깃값 생략, 이 때, 초깃값은 타입 별 기본값으로 대체된다. var c = 4 // 타입 생략, 이 때, 변수 타입은 우변 값의 타입이 된다. d := 5 // 선언 대입문 := 를 이용하여 var 키워드와 타입 생략 타입을 생략하게 되면 우변의 타입으로 좌변의 타입이 지정된다. 타입별 기본값 정수(int, uint...) : 0 실수(float, complex) : 0.0 boolean : false 문자열 : "" 그 ..

[선형대수학] Linear Equation(일차방정식) [내부링크]

Linear Equation(일차방정식) $n$개의 변수 $x_1 + x_2 + \ldots a_nx_n$의 linear equation은 다음과 같은 형태를 가진다. $$a_1x_1 + a_2x_2 + \ldots a_nx_n = b $$ 여기서 $a_1$, $a_2$, $\ldots$ $a_n$ 부분을 coefficient라고 한다. 또한, coefficient 부분과 우항의 $b$에는 실수와 허수 아무거나 와도 상관없다. 이러한 Linear equation은 변수들의 곱이나 제곱근은 포함하지 않고, 보든 변수는 일차 곱으로만 나타난다. 따라서 다음의 두 식들은 linear equation이 아니다. $$4x_1 - 3x_2 = x_1x_2$$ $$x_2 = \sqrt{x_1}-2$$ 또한, 삼각함수..

워드 임베딩(Word Embedding)이란? (1) [내부링크]

워드 임베딩(Word Embedding) 자연어처리를 수행하는 시스템들은 입력을 텍스트로 받는다. (출력의 경우에는 다를 수 있다.) 그러나, 우리가 자연어처리를 하기 위해 사용하는 여러 모델들은 수치화된 입력을 받고, 수치화된 출력을 내보낸다. 따라서, 우리는 텍스트 정보를 모델에 넣고, 모델에서 나온 결과를 텍스트로 이해하기 위해 텍스트-숫자 간의 변환 방법이 필요하다. 이때, 텍스트를 숫자 벡터로 바꾸는 과정을 워드 임베딩(Word Embedding)이라고 한다. 원핫 인코딩(One-hot Encoding) 텍스트를 벡터롤 바꾸는 방법으로는 원핫 인코딩이 있다. 원핫 인코딩이란, 0과 1로 구성된 벡터로 변환하는 과정이며, 훈련 데이터에 존재하는 단어들로 단어장을 만든 후 나열한 다음, 각 단어가 ..

Github README 꾸미기 [내부링크]

Badge 뱃지를 이용하여 본인의 기술 스택이나, 기타 바로가기 링크 등 다양하게 활용할 수 있다. 이런 식으로 링크를 걸어서 활용할 수 있고, 이렇게 기술 스택이나 기타 등등을 꾸밀 수 있다. 적용 방법 우선 기본적인 틀은 이렇다. (넣고자 하는 이름) 과 (색상) 부분만 잘 수정하면, 다양한 뱃지를 만들 수 있다. 그럼 그 두개는 어디서 알 수 있을까? 다음의 링크를 참고하자. Simple Icons 2317 Free SVG icons for popular brands. simpleicons.org 이곳에서 원하는 스택(혹은 기타 등등)을 찾은 뒤, 복사하여 수정하면 된다. 간단하게 파이썬 뱃지를 같이 만들어보자. 우선, 위 링크에서 파이썬을 검색해보자. 잘 나오는 것을 확인할 수 있다. 위의 Pyt..

[자료구조] 힙(Heap)이란? [내부링크]

힙(Heap)이란? 힙(Heap)은 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 자료구조로, 완전 이진 트리(Complete binary tree)의 형태를 가진다. 이러한 힙은 힙 속성을 만족하는데, 힙 속성이란, 최대 힙 속성(max heap property) : 부모 노드의 키 값은 항상 자식 노드의 키 값보다 크거나 같다. 최소 힙 속성(min heap property) : 부모 노드의 키 값은 항상 자식 노드의 키 값보다 작거나 같다. 다음과 같으며, 어떤 힙 속성을 만족하는지에 따라 최대 힙(Max heap)과 최소 힙(Min heap)으로 나뉜다. 힙(Heap)의 특징 힙의 특징은 다음과 같다. 루트 노드(root node)는 항상 최댓값 또는 최솟값을 가진다 (만족하는 힙 속성에 ..

[자료구조] 해시 테이블(Hash Table)이란? [내부링크]

Hashing이란? 영어 사전에 hash를 검색하면 다음과 같은 뜻이 나온다. 실제로 처음에 해쉬라는 것을 들었을 때, 맨 처음 떠올렸던 것이 햄버거에 들어가있는 그 감자 아닌가? 라고 생각하기도 했다. 하지만, 자료구조에서의 해싱(Hashing)은, 각각의 데이터를 고유한 숫자 값으로 표현하고(임의의 값을 고정된 길이로 변환), 이를 이용하여 특정 데이터의 존재 여부를 확인하거나 데이터를 추출하는 작업을 의미한다. 이러한 해싱(Hashing)의 과정에는, 해시 함수(Hash Function)와 해시 테이블(Hash Table)이 사용된다. 해시 함수(Hash Function) 해시 함수(Hash Function)란, 주어진 데이터(Key)를 고유한 숫자 값인 해시 값(Hash Value)으로 표현해주는..

Tokenization(토큰화)란 무엇일까? [내부링크]

NLP에서의 Tokenization NLP에서의 Tokenization은, 두 개 이상의 다른 token의 결합으로 이루어진 단어를 쪼개어, 단어의 숫자를 줄이고 희소성(sparseness)를 낮추기 위해 실행된다. 단어의 숫자를 줄이고 희소성을 낮춘다는 것은 과연 무슨 뜻일까? 다음 예제를 같이 살펴보자 희소성을 줄여주는 Tokenization "배가 너무 고프다 저녁밥 뭐 먹어야하지" "배는 별로 고프지 않아" 위와같은 두 개의 문장이 있다. 직관적으로 봤을 때, 여기서의 "배" 부분과 "고프다" 부분은 같은 의미이다. 하지만, 컴퓨터는 "배가"와 "배는" , "고픈데" 와 "고프지"를 다른 단어로 인식한다. 따라서, 같은 의미이지만 각각의 단어로 인식되는 것이다. 그만큼 희소성도 올라가게 된다. 그..

[자료구조] 트리(Tree)와 이진 트리(Binary tree)란? [내부링크]

트리(Tree)란? 트리(Tree)란, 계층적인 구조를 나타내는 자료구조이다. 조직도, 파일 디렉터리 구조에서 이러한 트리 구조가 많이 사용된다. 트리의 구성 요소 트리는 노드(node)와 간선(edge, link)로 이루어진다. 노드(node)는, 트리의 데이터를 저장하는 단위이며, 위 사진에서의 숫자가 저장되어 있는 부분이 노드라고 볼 수 있다. 간선(edge, link)는, 노드와 노드를 연결하는 선이며, 트리에서의 간선은 부모-자식 계층 관계만을 나타낸다. 위 사진에서 볼 수 있듯이, 간선이 상하관계로만 연결되어 있고, 좌우로는 연결되어있지 않은 모습을 확인할 수 있다. 이 부분에 대해서는 뒤에서 추가적으로 설명하도록 하겠다. 또한 노드의 개수가 N개일 때, 간선의 개수는 항상 N-1개이다. 트리..

[궁금증] 키오스크에는 왜 윈도우가 들어가있을까? [내부링크]

평소 커피를 매우 좋아하여 하루에 최소 1잔 이상은 마시는 나는 7월의 어느 토요일에도 어김없이 카페를 찾았다. 원래 자주 가는 카페는 사장님이 직접 핸드드립으로 내려주시는 곳이기에 키오스크가 없지만, 그날은 노원역에 일이 있기에 모 프랜차이즈 카페를 방문하게 되었다. 목이 많이 타서 빠르게 커피를 시키는 와중, 결제창에서 흥미로운 점을 목격하게 되었다. 결제 시에 작업표시줄이 뜨면서, 이 키오스크는 윈도우 운영체제를 기반으로 동작된다는 점을 발견하게 된 것이다. 처음으로 든 생각은, "굳이 키오스크에 유료인 윈도우를 써야 하는 이유가 있나?"였다. 내 짧은 생각으로는, 키오스크를 리눅스 기반으로 만들면 단가가 낮아지는 장점이 있을 것 같았는데, 다른 이유로 인해 리눅스 기반 키오스크가 단가가 높아지는지..

KL-Divergence와 Entropy, Cross-Entropy란? [내부링크]

KLD(Kullback-Leibler Divergence) 쿨백-라이블러 발산(Kullback–Leibler divergence, KLD)은 두 확률분포의 차이를 계산하는 데에 사용하는 함수로, 어떤 이상적인 분포에 대해, 그 분포를 근사하는 다른 분포를 사용해 샘플링을 한다면 발생할 수 있는 정보 엔트로피 차이를 계산한다. -Wikipedia- KLD는 두 확률분포 사이의 다름을 측정한다. 주의해야 할 점은, KLD는 두 분포 사이의 거리가 아니라는 것이다. KLD의 수식과, 예시를 보면서 같이 개념을 이해해보자. 두 확률분포 p와 q가 있다고 할 때, p 관점에서 측정한($x$를 sampling 할 때 p에서 sampling) KLD의 수식은 다음과 같다. $$KL(p||q) = -\mathbb{E}..

[알고리즘] 정렬 알고리즘(Sorting algorithm) (1) [내부링크]

정렬(Sort)이란? 정렬이란, 주어진 데이터를 정해진 기준에 따라 순서를 재배열하는 작업을 말한다. 정렬 알고리즘의 종류 매우 다양한 정렬 알고리즘이 존재하지만, 대표적인 것들만 나열해보면 버블 정렬(Bubble sort) 선택 정렬(Selection sort) 삽입 정렬(Insertion sort) 병합 정렬(Merge sort) 퀵 정렬(Quick sort) 등이 있다. 특히, 병합 정렬과 퀵 정렬은 복잡하지만 효율적인 정렬로 분류된다. 그렇다면, 모든 경우에 대해 퀵 정렬이나 병합 정렬을 적용하는것이 유리할까? 결론부터 말하자면, 그렇지 않다. 모든 경우에 대해 최적의 성능을 보여주는 정렬 알고리즘은 존재하지 않는다. 그렇기 때문에, 각 상황에 맞게 최적의 정렬 알고리즘을 선택하여 적용해야만 한다..

[자료구조] 큐(Queue)의 개념과 구현(2) [내부링크]

2022.07.11 - [자료구조&알고리즘] - [자료구조] 큐(Queue)의 개념과 구현(1) [자료구조] 큐(Queue)의 개념과 구현(1) 큐(Queue)란? 큐는 먼저 들어온 데이터가 먼저 나가는 특성인 선입선출(FIFO)의 특징을 가진 선형 자료구조이다. 큐는 뒤쪽(rear)에서 데이터가 삽입되고, 앞쪽(front)에서 데이터 삭제가 이루어진다. gbdai.tistory.com 지난 글에서는 단순한 형태의 큐에 대해서 알아보았다. 큐를 구현하는 방법은 크게 두 가지가 있는데 연결 리스트를 이용한 큐의 구현 배열을 이용한 큐의 구현 하나씩 알아보도록 하겠다. 연결 리스트를 이용한 큐의 구현 이중 연결 리스트를 이용하여, 새로 추가한 데이터를 리스트 맨 앞에 삽입하는 방식이다. 그림으로 보면 다음과..

Likelihood(가능도)와 MLE(Maximum Likelihood Estimation)란? [내부링크]

통계학에서, 가능도(可能度, 영어: likelihood) 또는 우도(尤度)는 확률 분포의 모수가, 어떤 확률변수의 표집값과 일관되는 정도를 나타내는 값이다. 구체적으로, 주어진 표집값에 대한 모수의 가능도는 이 모수를 따르는 분포가 주어진 관측값에 대하여 부여하는 확률이다. 가능도 함수는 확률 분포가 아니며, 합하여 1이 되지 않을 수 있다. -Wikipedia- 위키피디아에서 Likelihood를 검색하면 위의 정의가 나온다. 그러나, 도통 무슨 말인지 알 수가 없다. 누구나 likelihood를 잘 이해할 수 있게 풀어서 이야기해보려고 한다. Likelihood란? Likelihood(가능도)란, 주어진 확률 분포$\theta$가 데이터를 얼마나 잘 설명하는지 나타내는 정도이다. 가능도를 더 잘 이해..

경사 하강법(Gradient Descent)이란?? [내부링크]

경사 하강법(Gradient Descent)란? 경사 하강법 (傾斜下降法, Gradient descent)은 1차 근삿값 발견용 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다 -Wikipedia- 예전에 한창 와우를 하던 시기가 있었다. 퀘스트를 완료하려면 가야만 하는 곳이 있었는데, 그 곳이 다른 지형보다 훨씬 고도가 낮은 곳이었다. 그 당시에는 날아다니는 탈것을 얻을 수 없는 시기여서 걸어가야만 했기에 애먹었던 기억이 있다. 위와 같은 느낌의 지형이었고, 고민끝에 나는 경사면을 따라 낮은 곳으로 점점 나아가는 방법을 택했고, 결국 가장 낮은 곳이었던 완료지점까지 도달할 수 있었다. 제목은 경사하강법인데 뜬금없이..

[자료구조] 큐(Queue)의 개념과 구현(1) [내부링크]

큐(Queue)란? 큐는 먼저 들어온 데이터가 먼저 나가는 특성인 선입선출(FIFO)의 특징을 가진 선형 자료구조이다. 큐는 뒤쪽(rear)에서 데이터가 삽입되고, 앞쪽(front)에서 데이터 삭제가 이루어진다. 스택(Stack)과의 차이점 스택(Stack)은 데이터의 삽입과 삭제가 같은 곳(top)에서 이루어지지만, 큐는 데이터의 삽입과 삭제가 다른 곳에서 수행된다. 또한 후입선출(LIFO)의 특징을 가진 스택과는 달리, 큐는 선입선출(FIFO)의 특징을 가지고 있다. 큐의 삽입과 삭제 enqueue : 큐의 맨 뒤(rear)에 원소를 추가 - push() dequeue : 큐의 맨 앞(front)에 있는 원소를 삭제 - pop() 그림과 함께 차례대로 살펴보겠다. 먼저 enqueue(30)을 실행하면..

[자료구조] 연결 리스트(Linked list)와 구현 (2) [내부링크]

지난 게시글에서는 단순 연결 리스트에 관해 작성하였다. 연결 리스트(1) - 단순 연결 리스트 [자료구조] 연결 리스트(Linked list)와 구현 (1) 연결 리스트(Linked list) 연결 리스트란 데이터(data)와 링크(link)로 구성된 개별의 노드(Node)로 연결되어 있는 자료 구조이다. 데이터(data)는 정수, 실수, 문자열 등 말 그대로 데이터를 담고 있고, 링 gbdai.tistory.com 이번 게시글에서는 단순 연결 리스트에 이전 노드로의 링크를 추가한 이중 연결 리스트에 관해 작성해보겠다. 이중 연결 리스트(Doubly linked list) 이중 연결 리스트는 이전 노드와 다음 노드에 대한 링크를 가지고 있는 연결 리스트이며, 양방향 순회가 가능하다는 특징을 가지고 있다...

[자료구조] 연결 리스트(Linked list)와 구현 (1) [내부링크]

연결 리스트(Linked list) 연결 리스트란 데이터(data)와 링크(link)로 구성된 개별의 노드(Node)로 연결되어 있는 자료 구조이다. 데이터(data)는 정수, 실수, 문자열 등 말 그대로 데이터를 담고 있고, 링크(link)는 다음 노드를 가리키는 포인터이다. 노드(node)는 데이터와 링크로 이루어진 연결 리스트 구성 단위로써, 연결 리스트의 각 노드들은 이 링크로 연결되어진다. 연결 리스트의 종류 단순 연결 리스트 다음 노드에 대한 링크만 가지고 있으며, 한쪽 방향으로만 순회가 가능하다 이중 연결 리스트 이전 노드와 다음 노드에 대한 링크를 가지고 있으며, 양방향 순회가 가능하다 원형 연결 리스트 연결 리스트의 마지막 노드 링크가 처음 노드를 가리키도록 구성한 연결 리스트이며, 처음..

[자료구조] 스택(Stack)개념, 구현 [내부링크]

스택(Stack)이란? 톱(Top)이라고 하는 한 쪽 끝에서 모든 삽입과 삭제가 일어나는 순서 리스트이다. 스택에서는 가장 마지막으로 삽입된 원소가 가장 먼저 삭제되는 LIFO(Last-In-First-Out)의 성질을 가진다. 예를 들어, 원소 A, B, C ,D 를 순서대로 스택에 삽입했다고 하면, 다음과 같은 상태가 된다 여기서, 스택의 원소를 삭제해보자. 제일 마지막에 삽입된 원소는 Top에 위치한 "D" 이기 때문에, D가 삭제된다 원소 D는 삭제되고, C가 top 원소가 되었다. 이 상태에서 다시 원소를 삽입하면 다음과 같은 상태가 된다. 스택(Stack)의 구현 위에서 알아본 스택을 c++로 구현해보았다. 배열을 이용해서 진행하였다. stack.hpp #ifndef stack_hpp #def..