2011년 8월 10일 수요일

Algorithm Analysis :: Big O - notation

*O(n) means to the UPPER BOUND


O(1)     : 자료의 양에 관계없이 일정한 시간이 걸리는 작업
O(lg n)  : 자료 집합을 반으로 나누고 그 반을 다시 반으로 나누는 과정을 반복하는 작업
O(n)     : 자료 집합을 순회하는 작업
O(n*lg n): 자료 집합을 반복해서 둘로 나누고 나뉘어진 반을 순회하는 작업
O(n^2)   : 한 집합의 각 자료에 대해 같은 크기의 다른 집합을 순회하는 작업
O(2^n)   : 집합의 모든 부분집합을 생성하는 작업
O(n!)    : 집합의 모든 순열을 생성하는 작업

Call Stack (maybe...?)

            [Activation Record of Function Foo]


+---------------------------------------------------------+
|                    Input Parameters                     | <= CCS
+---------------------------------------------------------+
|                      Return Value                       |
+---------------------------------------------------------+
|                     Local Variables                     |
+---------------------------------------------------------+
|    EBP (Base Pointer of Previous Activation Record)     |
|  Return Address (Next Command of Current Function Call) |
|                           ...                           |
+---------------------------------------------------------+
| Output Parameters (Input Parameter of Next Call Stack)  | <= NCS


                            ...


* Input Parameters: 현재 콜스택에 실제 복사된 파라미터
* Return Value: 함수 리턴시 리턴된 값의 저장 공간
* Local Variables: 현재 함수의 지역변수
* EBP Register: 이전 콜스택 시작주소의 저장 공간
* Return Address: 현재 함수 호출 후 다음 수행될 명령어 위치의 저장 공간
* Output Parameter: 다음 함수 호출 시 Input Parameters가 됨


*CCS: Current Call Stack
*NCS: Next Call Stack

2011년 8월 9일 화요일

Using Pointer in C

Execution Environment :: VS2010


// #1 type conflict :: warning, runtime error
char *sptr = "abc", *tptr;
*tptr = sptr;
printf("%s\n", tptr);

// #2 type matched :: no error
char *sptr = "abc", *tptr;
tptr = sptr;
printf("%s\n", tptr);

// #3 not-allocated memory space :: runtime error
char *sptr = "abc", *tptr;
*tptr = *sptr;
printf("%s\n", tptr);

// #4 constant integer allocation in integer pointer :: runtime error
int *iptr = (int *)10;
*iptr = 11;
printf("%d\n", *iptr);

// #5 type conflict :: warning, runtime error
int *iptr = 10;
*iptr = 11;
printf("%d\n", *iptr);

// #6 soon fixed :: no error
int *iptr = (int *)10;
iptr = NULL;

2011년 7월 19일 화요일

Meeting with my cousin Kyeongsu,
also with a grandma at bus terminal,
thinking about myself a lot,

I thought I have to be changed.
Even though it will be really hard.

2011년 7월 15일 금요일

rainy

I will stay at my hometown Boeun for about one or two week.
Today is my materal grandfather's birthday. So, my materal cousin has come to my home now. I'm a little nervous to meet him. What conversation we will do? But I'm not sure whether the reason of being nervous is that.

2011년 7월 9일 토요일

에어컨을 틀어서 서늘한 줄 알았더만 역시나 찐득찐득

7시반.
또 그 애 꿈을 꿨다. 마지막이겠지. 이제 미련은 버릴거니까.
말씀을 보고 싶었지만 시간이 그래서 밥을 먼저 먹으러 갔더니
갔다와선 게임 삼매경.

점심을 성현이와 또 먹고는 아예 windows 7을 설치하고
nba2k11과 pes2011을...

시간이 되어 우리 사랑하는 A103호 친구들을 보러나갔다.
나 혼자서는 절대 가보지도 못했을 홍대 근처를 다른사람 신경 안쓰고
마음껏 놀고 얘기하고 꼬장부리고 그랬다.

하지만...,
하루종일 내 마음은 불편하다.
뭔가 쉬운 것을 놓치고있다.
하나님 앞에 서 있다는 걸 느낄 수 있다면
내가 이렇게 고민만 하고 있을까?
오늘 홍대입구 역까지 오는 길에서 택원이에게 하소연했던 것처럼
하나님 앞에서도 말이 술술 나왔으면 좋겠다...

2011년 7월 8일 금요일

비, 그리고 덥진 않으나 끈적끈적함

"띵동, 띵동띵동"
"어... 나가께에..."
요 며칠은 동영이형이 초인종을 눌러주면서 잠이 깬다.
그 덕분에 하루 세 끼 잘 먹어서 살이 좀 찌려나.

공부가 너무 안 되서 오랜만에 학교에 감.
그 동안 노는 것도 지겨웠던 걸까.
뭘 해야할지 고민고민하다가 낭비한 시간도 꽤 된 듯.
그래도 오디오북 - Magic Tree House도 그렇고 Hackers LC도 그렇고 괜찮았다.
공부가 좀 됐다.

점심엔 화구 3인방 + 동석이형과 설렁탕을.
오후엔 조금 더 빈둥대다가 5시가 되면서 집으로 돌아왔던 듯.

돌아오자마자 - 그래도 조금 공부했다는 사실이 좋았다 - 동영이형네랑 저녁 먹고
아, 그리고나서 게임을 했구나.
Runescape라는 게임. 흐음.. 아마 끊는 게 좋겠지..?
영어가 좀더 재미있어졌음 좋겠다.

흠.. 너무 빈둥대도 시간이 빨리가는구나.
10시에 자려고 했는데 벌써 12시반이라니.
내일은 우리 A103호 아이들을 보러가는 날.
좀 기대되지만 택원이나 다른 애들은 더 설레하겠지?
아이들을 좋아하는 마음은 아마도 내가 제일 적을거야?
그나마 내가 해야하는 건 부담없이 하고싶은대로 시간을 보내며 즐기다 오는 것.
아이들이 좋아할 수 있게.

It's time to go to bed.
There is nothing to worry about.

2011년 7월 4일 월요일

찝찝한 날씨

새벽 2시. 악몽을 꿨다. 왠지 바로 잘 수가 없길래 잠깐 휴게실에서 말씀을 보았다.
무서웠는지 마음이 많이 약해져서 조금은 내 영혼이 말씀을 잘 받아먹었던 것 같다.

오전 6시.
그리고 오전 8시.
현우와 아침을 먹고 아무런 생각없이 미드 시청.
침대에 누운채로 ㅇ.ㅇ
엉덩이를 빼고 책상에 엎드려 ㅇ.ㅇ
현우가 나가고는 어김없이 만화책과 워3로 5시를 찍었다.

버스를 타는 시간. 점점 지겨워진다. 허리만 아프고...
7시 화정 모임에 참석하여 드디어 첫 게임.
저번 신금호부터 왠지 몸이 말을 안 듣는다.
부상.
아욱.. 괜히 승질만 나고. 게임도 못 뛰고.
아니.. 어쩌면 다행인지도. 요즘의 생각과 생활의 패턴을 전환할 필요가 있다.
모임이 끝나기도 전에 귀가.
언제나처럼 늦은 귀가에 고픈 배를 컵라면과 이번엔 샌드위치, 그리고 입가심으로 커피우유.

공부도 안하고. 그렇다고 딱히 하는 것도. 생각도 없는.
이런 내가 싫은데. 그런데 잘 바뀌진 않는다.
또 착잡한 마음. 그래선지 말씀을 또다시 듣게 된다.

"혼자 있을때... 하나님을 바라보는 시간"
들은 말씀 중 가장 기억해야할 부분인 것 같다.
하나님, 말씀을 들으면 적어도 한 문장은 가슴과 머리속에 꼭 내장하게 해주세요.
내가 힘들때 주님 생각 안날때 기억나고 되새겨서 다시금 그리스도를 떠올릴 수 있게.

2011년 6월 28일 화요일

맑았다가 밤에 갑자기 비

마침내, 귀찮음과 무기력함을 이겨내고 운동을 시작했음.
생명빛교회에 가서 기타를 치고, 데스크탑을 새로 설정함.
교회에 있는 시간이 그래도 좋았음. 매일 기타나 피아노를 치고 싶다.

저녁에는 하나스퀘어에서 토익공부를 했음.
하기 싫은 마음도 있었지만 하나님께 기도하며 공부함.

기분이 좋은 하루.
오늘 아침의 말씀에서 잡은 기도제목이 뭐였더라.
"나의 영혼이 잘 되는 것으로부터 시작"
감사합니다 주님. 내 기도가 응답된 것 같습니다.
내 영혼이 더욱 잘 되기를 기도합니다.
내 영혼이 잘 됨같이 범사에 강건하기를 기도합니다.



'안수현'이라는 사람은 의사이기에 자신의 직업속에서 하는
말과 행동 하나하나가 전도와 연결될 수 있었습니다.

그러면 나는, 컴퓨터과학자로서 나는,
내가 손가락으로 두드리는 행동들과
개발되어 사용되는 프로그램과 기계들이
어떻게 전도로 연결될 수 있을까요, 하나님?

2011년 6월 20일 월요일

Chrome AngryBirds

link: http://chrome.angrybirds.com/

angry birds 한번 해보고 싶었는데 이렇게 가능하네 ㅎㅎ
재밌네.. 신기신기~

6월 20일 월요일 후덥찌근




새벽까지 미드를 본 관계로 아침은 사망.
점심까지 계속 자서 밥도 못 먹을 뻔.
아마도 내 기억에 의하면 뭔가 욕망을 자극하는 꿈을 꾼 것 같기도.

이러면 안되겠다 싶어 얼른 샤워 후 수박이 나온 점심을 먹음.
점심때 TV에 나온 국군포로에 관한 프로그램에 관심이 감.

토익책을 들고 갔으나 영어공부하기가 싫었던지 도서관으로 가서 CCNA책을 펴봄.
서문을 읽고 충동이랄지 도전이랄지 책을 사야겠다고 맘을 먹음.
공부를 좀 더 하다가 시간에 맞춰 CCNA 수험서를 사고 지교회 예배에 도착.
참, 지현이가 추천해준 <그 청년 바보의사>란 책도 한권 삼.
아마도 전공에 막혀 가뭄든 논두렁처럼 답답하게 굳어있는
내 머리속을 좀 뚫어보고 싶었으리라.

지교회 예배를 드리고 나름 하나님만 바라보고 싶었으나..
역시나 치유받을 게 많다는 걸 깨닫게 됨.

지현이, 성욱이, 목사님, 교수님과 함께 저녁식사 후에는
헤어에센스와 린스를 사고 상우형의 호출에 잠시 농구장에 들렀다 집에 돌아옴.
버스안은 왜그리 졸린지... 자리에 앉기만하면 눈뜨면 집앞.

돌아와서는 또 공부하기도 말씀보기도 싫어져
약간의 미드를 시청 후 동영이형과 음료하나를 마시러 감.
생각난 김에 현우것도 하나 구입.
자려던 찰나에 못났던 하루라도 기록에 남겨두는 게 좋을 거 같아 
손가락 운동을 좀 함.

그리고 이렇게 졸린데 시간은 벌써 12:20
아마도 내일도 늦게 일어나지 싶은데...
이런 일기보다도 "주님께대화체" 형식으로 쓰는 게 유익할 듯 싶구나.
그건 내일부터.
그만 자자... ㅎㅎ

2011년 6월 18일 토요일

Hamachi :: Virual LAN program

download link: (mac) http://logmein-hamachi.en.softonic.com/mac
download link: (windows) http://hamachi.en.softonic.com/

워크래프트3를 재원이랑 같이 하려다보니...
배틀넷 시디키는 없고...
발견한 방법인데 너무 좋다 ㅎㅎ
보물섬을 찾아낸 느낌

2011년 6월 12일 일요일

해바라기 - 행복을 주는 사람 (1983年)



행복하지 않은 요즘.
무엇때문일까.
취업일까.
학점일까.
밤새는 날들이 많아서일까.

얼마전..
형 면회가 끝나는 날.
엄마와 함께 학교 근처에서 냉면을 먹고
남부터미널로 가서
엄마를 시골로 내려가는 버스에 태워드리고
손을 흔들며 인사를 했는데..
왠지 모르게 살짝 눈물이 났다.
서울에 올라와서 내가 뭘 하고있나 싶은 생각이 들었던 걸까?


하나님, 나는 아무것도 가진 게 없습니다.
성적도 안 좋고, 돈도 없고, 세상도 잘 모릅니다.
그래도 내가 행복한 건 (다른 많은 이유들도 있겠지만)
당신이 나를 구원하셨고 지금 나의 곁에 계시기 때문입니다.
그러니까 하나님 내가,
가장 멋있는 컴퓨터공학자가 되게 해주세요.

모든 것이 다 갖춰진 걸 바라지는 않습니다.
복음때문에 행복한 컴퓨터공학자가 되게 해주시고.
복음때문에 컴퓨터가 재밌고 좋은 컴퓨터공학자가 되게 해주시고.
복음때문에 가장 인간적인 컴퓨터공학자가 되게 해주시고.
복음때문에 가장 복음을 잘 전하는 컴퓨터공학자가 되게 해주세요.

복음때문에 사람이 좋고 컴퓨터가 좋고 복음이 좋은 사람.
사람에게 따뜻함을 주고 좋은 프로그램을 주고 이 세상에서 가장 좋은 복음을 주는 사람.

2011년 5월 25일 수요일

C++ :: error c2533 : constructors not allowed a return type

link: http://www.evilskel.com/220

클래스를 선언하고 ;(세미콜론)을 안 주면
생성자가 return type을 가진다는 에러를 주는구나..

C랑 Java랑 너무 헷갈리는 요즘 ㅋ

CTF :: example problems

1. decrypt ciphertext
    - l33t
    - page source

2. admin login

3. HTTP GET

4. vim jail & system cracking
    - Ctrl + z : escape without exiting vim program
    - password file : /etc/passwd    /etc/shadow
    - using vim more : http://developersnote.blogspot.com/2011/01/vi.html
5. hidden key in BMP file
    - vim command: wc (number of lines, words, characters of a file), du(size of file)
    - hexedit (hex editor) & bmp file format

6. weird icon

7. basic BOF
    - stack frame
    - using perl : ./(execution_file) `perl 'print -e "A"x16 . "\x50"'`

8. advanced BOF
    - shellcode

9. reversing
    - link: http://uiandwe.tistory.com/category/%EB%87%8C%EC%84%B8%ED%8F%AC%EB%8D%A9%EC%96%B4%EB%A6%AC%22%22/%EB%A6%AC%EB%B2%84%EC%8B%B1

reference
-----------
When searching result is bad ... GO TO YOUTUBE !
CTF problems type : http://beist.org/new_ver_board/read.html?table=new_freeboard&uid=199&page=93
Web application attack type : http://blog.daum.net/f85t75/2576448http://acc.ahnlab.com/secu_view.asp?seq=4743



2011년 5월 23일 월요일

이산수학 숙제를 하다가..

하나님 오늘은 왠지 공부가 잘 되네요.
어쩌면 말씀을 보며 하루를 시작해서 그런지도 모르겠습니다.
아직도 할 게 많고 걱정이 많아요.
하지만..,
보이는 사실을 보지 말고 함께 하시는 당신을 기억하게 해주세요.
내일도 바르게 시작했으면 좋겠습니다.

2011년 5월 8일 일요일

MFC :: Console Window에서 printf() 로 Log 확인하기

link: http://blog.daum.net/michaelryu/102763


MFC 프로그래밍을 하게되면, stdafx.h 파일이 있을 것이다.
이 파일의 맨 처음에 아래의 내용만 추가해주면 된다.
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")


아 이렇게 쉬운 방법이... T.T

2011년 5월 7일 토요일

가변인수 (Variable Arguments)

link: http://www.winapi.co.kr/clec/cpp2/15-3-1.htm

printf() 함수와 같이 argument의 길이에 제한이 없는 것을 말한다.

MFC를 하면서 알게 된 건 새롭고 좋은데,
쓸모가 있을지는 모르겠다... 일단 급한건 UI 구현이니...

2011년 5월 6일 금요일

토요일 새벽... 시간은 흘러가고..

나의 MFC에 대한 이해도는 올라가지 않는다...

아악#*($@(^#%...

ㅜ.ㅜ 어떻게 하면 빨리 이해할 수 있지...
악.. 모르겠어.. 도와주세요..ㅠ

2011년 5월 5일 목요일

War Games (1983)

link: WarGames on Zuguide.com

synopsis: A young man finds a back door into a military central computer in which reality is confused with game-playing, possibly starting World War III.


AI 와 Hacking에 관한 영화.
다음 영화는... Hackers (1995) ?

vmware-tools install in Debian 5


link: http://wiki.debian.org/VMware

Fedora 14를 설치할 때 했던 vmware-tools install
Debian에서는 우분투처럼 yum이 아닌 apt-get을 쓰는구나
다음을 수행한 후 vmware-install.pl을 터미널에서 실행해주면 끝.

#apt-get update
#apt-get install gcc linux-headers-$(uname -r)

그런데..
Debian에서는 왜 tab이 먹지 않을까... 너무 불편하네


그리고 추가하자면,
vmware-install.pl을 실행한 상태에서 위의 코드를 수행하면 경로를 잡지 못한다.
그럴 때는 아래의 명령을 수행하여 설정이 완료되도록 한다.


#./usr/bin/vmware-config-tools.pl

2011년 5월 1일 일요일

MFC :: 윈도우 프로그래밍의 시작

MFC 공부를 시작하는 새벽 2시 17분.
사실 상우형 프로젝트를 도와 하는 것이기도 하지만
공부해두면 정보보호 프로젝트를 할때도 어차피 사용할 것이기도 하고
새로운 걸 배우는 게 재미있기도 하다.

하지만 그 모든 것 위에 가장 소중한 걸 잊지 않도록 하자.
내가 무엇때문에 행복한지를 생각해보고
내가 무너지는 것은 한 순간임을 기억해야할지도 모른다.

TCP header :: ECN (Explicit Congestion Notification)

link: http://yamoe.tistory.com/4


HLEN과 Reserved, Code bit부분은 순서데로 연결되어지며 16bit이다. 그중 HLEN은 4bit를 차지하며 Reserved는 향후 사용될지도 모름을 감안하여 예약된 공간이며 6bit를 차지하고 Code bit가 6bit를 차지한다. Code bit는 Control bit(제어비트)라고도 하며 패킷의 중요한 정보를 뜻한다. Ethereal에서는 위에 명시된 6가지의 Code bit 외에 예약된 공간에 있는 2개의 bit를 더 설명하고 있다. 그것은 CWR(Congestion window reduced)와 ECE(ECN-Echo)이다. 이것은 사용되지 않고 있다. 정의된 바로는 ECN(Explicit Congestion Notification)이라 하여 실제 3bit로 정의되어있으며 NS(Nonce Sum) 1bit와 CWR(Congestion window reduced) 1bit, ECE(ECN-Echo) 1bit로 이루어진다. 하지만 사용되어지지 않으며 Reserved는 zero로 채워진다.

2011년 4월 28일 목요일

Wireshark 구현 :: Visual Studio 2008로 개발환경 전환

1. winpcap 다운로드 및 설치http://www.winpcap.org/install/default.htm

2. winpcap 개발자팩(Wpdpack) 다운로드http://www.winpcap.org/devel.htm
    *압축 푼 폴더 위치설정: 
예를 들면 C:\WpdPack

3. Visual Studio 2008 실행 & New Project 생성

4. Include Directory 추가 (pcap.h 등 헤더파일 폴더)

5. Library Directory 추가 (wpcap.lib 등 라이브러리파일 폴더)

6. 추가종속성(Additional Dependencies)에 라이브러리 파일 추가

6. 모든 설정이 끝났으므로 프로젝트에 .c 파일(소스 코드)을 작성하여 컴파일 & 실행 ㄱㄱ


-끝-

2011년 4월 25일 월요일

Classic Music

link: http://www.classiccat.net/index.php

클래식 음악을 들을 수 있는 곳

Searching Pop-music

link: http://circlash.tistory.com/303

너무 대놓고 올리셔서.. 불법이 아닌가?
에라 모르겠다..

Blogger에 BGM 설정하기

link: http://www.blogdoctor.me/2007/02/music-in-your-blog.html


<EMBED    src="LINK OF SOUND FILE AT FREE HOST" 
                     autostart=true 
                     loop=false 
                     volume=100 
                     hidden=true>
</EMBED>


아휴 힘들어..
그래도 간신히 해냈네 ㅎㅎ 기분 좋다.

위와 같이 html 코드에 추가시켜주면 되긴 한데,
해당 링크의 블로거는 방법은 알려주지만 추천하진 않는구나.
아래와 같은 이유로 인해...


Background music in blogs and websites is not appreciated by many viewers 
since it disturbs attention, gathers unwanted attention and wastes bandwidth. 
However there are many methods to do this and many websites catering to this demand......

요즘 공부하는 장소


나의 기록을 남겨보고자..

UNIX :: File Extension .a

link: http://extensions.pndesign.cz/


.file extension a - Object library (Unix)


lwpcap.a 라는 파일이 무슨 파일인가했더니
windows에서 .lib파일이 unix에서 .a파일이었음 (라이브러리 파일)
위의 링크는 파일 확장자를 찾아볼 수 있는 유용한 사이트니 참고하도록.

2011년 4월 23일 토요일

Shortcoming of Google Blogger

다른 건 다 참을 수 있겠는데 파일 업로드가 불가능한 걸 참을 수 없다.

하지만 이해는 간다.
그로 인한 보안상의 문제가 무지막지하니 구글로서는 아마 이런 수밖에 없었나 싶다.
(뭐 나의 추측이지만...)

어쨌거나 너무 불편해...
메일처럼 exe를 제외한 파일포맷은 허용하던가..

CT :: Ch1. Regular Language

1. Finite Automata
 1) Definition of FA
 Define FA M = (Q, ∑, δ, q0, F)
 Q : a finite set of states
 ∑ : a finite set of alphabets
 δ : transition function ( Q x ∑ -> Q )
 q0: start state
 F : the set of accept states


2. Language and Machine
 1) Relation of Language and Machine
  Let A is the set of all strings that machine M accepts,
  <-> A is the language of machine M
  <-> L(M) = A
  <-> M recognizes A
  <-> A = { w | M accepts w}

 2) Acceptability
 M accepts w
  <-> a sequence of states r0, r1 … r(n) is 
      Q exists with 3 conditions:
     1) r0 = q0
     2) Delta( r(i), w(i+1) ) = r(i+1)
     3) r(n) ∈ F

  ※ How can we prove the fact that Automata A equals Automata B?
   : prove that L(A) = L(B) like this.
     …


3. Regular Language
 1) Definition of RL
  Language A is a regular language if some FA recognizes it
  (Exam) Design FA that recognizes given regular language. 

 2) Operations:
  Let A, B be regular languages,
  (1) Union:   A ∪ B = { x | x ∈ A or x ∈ B }
  (2) Concatenation:  A  B = { xy | x ∈ A and y ∈ B }
  (3) Star:   A* = { x₁x₂ … x(k) | k ≥ 0, x(i) ∈ A }
        = A ∪ A₁ ∪ A₂ ∪ …

 3) Closed under the union operator?
  <-> if A, B are RLs then so is A ∪ B
  (proof)
  Let A, B be RLs,
     L(M1) = A, L(M2) = B,
     M1 = (Q1, ∑, δ1, q1, F1),
     M2 = (Q2, ∑, δ2, q2, F2)

 Define M’ = (Q, ∑, δ, q0, F).
 Q = { (r1, r2) | r1 ∈ Q1 and r2 ∈ Q2 }
 δ = δ( (r1, r2) , a ) = ( δ(r1, a) , δ(r2, a) )
 q0= (q1, q2)
 F = (F1 x Q2) ∪ (Q1 x F2) = { (r1, r2) | r1 ∈ F1 or r2 ∈ F2 }
  

 Since FA M’ which recognizes A ∪ B is defined,
 so by RL definition, A ∪ B is RL.

 4) Closed under the concatenation operator?
 <-> if A, B are RLs then so is A ∘ B.
 (Problem) Where should we break its input into 2 pieces? 
           We don’t know …


4. Nondeterminism
 1) Characteristics
 δ: a state may have 0, 1, more arrows for each alphabet symbol
 ∑: a state may have arrows labeled with the alphabet or ε
 Acceptability: if anyone of transition paths acceptable, 
                NFA accepts the input

 2) Definition of NFA
 NFA N = (Q, ∑, δ, q0, F)
 Q : a finite set of states
 ∑ : a finite set of alphabets
 δ : transition function ( Q x ∑ε -> P(Q) )
 q0: start state
 F : the set of accept states

 3) Equivalence of NFAs and DFAs
 (proof by induction)
 Let  A be RL
  NFA N = (Q, ∑, δ, q0, F)
  DFA M = (Q’, ∑, δ’, q0’, F’)

 - Basis
   : 만약 N이 ε을 accept할 때, 
     q0로부터 ε으로 transition가능한 state집합을 E(q0)라고 하면,
     q0’ = E(q0)이고 for r ∈ q0’, ∈ F, thus q0’ ∈ F’,
     so that, M accept ε.

     또한 N이 symbol x를 accept할 때, 
     q0로부터 x로 transition가능한 state집합을 E(q1)라고 하면,
     q1’ = E(q1)이고 q1’의 ∈ q1’, ∈ F, thus q1’ ∈ F’
     so that, M accepts every string w whose length is 1.

 - Steps:
   : 만약 N이 w ∈ A(n)를 accept한다면, 
     M이 w ∈ A(n)를 accept한다고 가정하자.
     그리고 w가 n번째 symbol일때,
     N이 도착한 state를 q(n), M이 도착한 state를 r(n)이라 하자.


     이 때, 만약 NFA N이 |v| = n+1인 v를 accept한다면, 
     NFA N이 q(n)까지 오는 동안 n개에 대해 transition하고,
     q(n)에서 마지막 symbol 1개에 대한 transition을 accept한다.
  
     그리고 가정에서 n개 이하의 길이에 대해
     N이 accept하면 M도 accept하므로,
     DFA M도 r(n)까지 오는 동안 n개에 대해 transition하고,
     r(n)에서 마지막 symbol 1개에 대한 transition을 accept한다.

     즉, NFA N이 w ∈ A(n)를 accept할 때, M이 w ∈ A(n)를 accept하고,
     NFA N이 |v| = n+1인 v를 accept할 때, DFA M도 v를 accept한다.
     그러므로 만약 N이 w’ ∈ A(n+1)를 accept한다면, 
     M도 w’ ∈ A(n+1)를 accept한다.

 - Conclusion:
   : By Basis and Steps, L(N)-> L(M),
     and L(M)->L(N)
     ∴ NFA = DFA (동치)

 4) Relation of Regular Language and NFA
 : A is a RL if and only if there exist NFA recognizes A
 (proof)
 NFA can be converted into an equivalent DFA
 Therefore, there exist DFA recognizes A


5. Closure under the Regular Operation (3)
 1) Union    ∪
 If L1, L2 be RLs, (L1 ∪ L2) is a RL
 Let N1, N2 are NFAs such that L1 = L(N1), L2 = L(N2)
 (proof)
 <->  there exist NFA N recognizes (L1 ∪ L2)
 Let N1 = (Q1, ∑, δ1, q1, F1)
     N2 = (Q2, ∑, δ2, q2, F2)

 Construct N = (Q, ∑, δ, q0, F) to recognize (L1 ∪ L2)
 Q = Q1 U Q2 U {q0}
 δ = δ1(q, a)  if q ∈ Q1
     δ2(q, a)  if q ∈ Q2
     {q1, q2}  if q = q0 and a ∈ ε
              if q = q0 and a ∉ ε
 F = F1 U F2

 1) Concatenation ∘ 
 If L1, L2 be RLs, (L1 ∘ L2) is a RL
 Let N1, N2 are NFAs such that L1 = L(N1), L2 = L(N2)
 (proof)
 <->  there exist NFA N recognizes (L1 ∘ L2)
 Let N1 = (Q1, ∑, δ1, q1, F1)
     N2 = (Q2, ∑, δ2, q2, F2)

 Construct N = (Q, ∑, δ, q1, F2) to recognize (L1 ∘ L2)
 Q = Q1 U Q2
 δ = δ1(q, a)         if q ∈ Q1, q ∉ F1
     δ1(q, a)         if q ∈ F1, a ∉ ε
     δ1(q, a) U {q2}  if q ∈ F1, a ∈ ε
     δ2(q, a)         if q ∈ Q2

 1) Kleene Star *
 If L1 be a RL, L1* is a RL
 Let N are NFAs such that L1 = L(N)
 (proof)
 <->  there exist NFA N recognizes L1*
 Let N1 = (Q1, ∑, δ1, q1, F1)

 Construct N = (Q, ∑, δ, q0, F1) to recognize L1*
 Q = Q1 U {q0}
 δ = δ1(q, a)         if q ∈ Q1, q ∉ F1
     δ1(q, a)         if q ∈ F1, a ∉ ε
     δ1(q, a) U {q1}  if q ∈ F1, a ∈ ε
     {q1}             if q = q0, a ∈ ε
                     if q = q0, a ∉ ε


6. Regular Expression
 1) Definition of RE
    : R is a regular expression if R is
  (1) symbol a for some a in the alphabet ∑,
  (2) ε,
  (3) ∅,
  (4) (R1 U R2), where R1 and R2 are REs,
  (5) (R1 ∘ R2), where R1 and R2 are REs,
  (6) R1*, where R1 is a RE.

 2) Equivalence between RE with FA
    A is a RL if and only if there exists a RE describes it
    (proof: two direction)
  (1) If A is described by a RE, then A is a RL
     (proof by case-by-case)
     if R = a, ◯─a
     if R = ε, 
     if R = ∅, 
     if R = R1 U R2
     if R = R1 ∘ R2
     if R = R1*

  (2) If A is a RL, there exists a RE describes it
     (concept: converting from DFA to GNFA, from GNFA to RE)

7. Non-Regular Language
   *Pumping Lemma: Technique for proving non-regularity 
    If A is a RL, 
    s is any string in A, |s| >= p,
    which may be divided into three pieces, s = xyz,
    satisfying the following 3 conditions:

    1. for each i >= 0, x(y^i)z ∈ A,
    2. |y| > 0, 
    3. |xy| <= p.

    (proof concept)
    There exist a FA accepting finite every input string.
    About infinite length, 
    Let total number of states be p.
    
    If length of string s is p, necessary amount is p+1.
    Thus, by pigeonhole principle
    at least one state is duplicated.
    
    About duplicated 2 state, 
    Let the state be q1, q2.
    
    We can think that string of q0~q1 be x,
                      string of q1~q2 be y,
                      string of q2~q(p+1) be z.
    and since q1 = q2,
    1. for i >= 0, x(y^i)z ∈ A

    2. |y| = q1~q2 > 0 (at least 1, because between 2 states)

    3. |xy| = q0~q2 <= p (maximum p, because max-length is p)