알고리즘

알고리즘은 어떻게 만들까?

난 알고리즘을 만드는 방법을 체계적으로 배운 적은 없다. 다만, 그때그때 필요한 일을 시키기 위해서 컴퓨터의 생각 방식과 나의 생각 방식 사이의 연결 관계를 찾았을 뿐이다. 아마 이 작업을 알고리즘을 만드는 작업이라고 하는 것이라고 생각한다. 프로그램 제작을 직업으로 삼아서 일하시는 분들과 비교하면 아주 허접한 수준이지만, 혹시라도 누군가에게 도움이 될 수도 있다면 그것도 좋지 않을까 해서 몇자 적어둔다. 만약 틀린 부분이 있다면 지적해도 좋다.

앞서 얘기한바와 같이, 컴퓨터가 생각하는 것과 내가 생각하는 것 사이의 연결고리를 찾아내는 것이 알고리즘을 만드는 작업이다. 그렇다면, 일단 두가지를 알아야 한다. 1.컴퓨터가 생각하는 방식과 2.내가 생각하는 방식이다.

1.컴퓨터가 생각하는 방식

컴퓨터의 사고 구조는 단순하다. 숫자들을 아주 많이 늘어놓고서, 그 숫자들을 적당히 골라서 산수 계산을 하고, 그 결과를 저장한다. 그리고 이러한 일을 무작정 반복할 수 있다. 이러한 사실로부터 알 수 있는 몇가지 사실들은 컴퓨터에게 주는 자료는 숫자가 되어야 한다는 것과, 그 숫자로부터 얻을 수 있는 결과들은 역시 숫자가 된다는 것이다. 컴퓨터에게 A+B를 입력해봐야 A와 B가 뭔지 알려주지 않으면 그 출력은 A+B일 뿐이다.

2.내가 생각하는 방식

보편적인 사람이 생각하는 방식은 아주 복잡하다. 사람은 컴퓨터와 달리 논리적인 생각을 한다. 그리고 계산의 지름길을 찾아낼 수 있다. 컴퓨터가 하는 계산이 무조건 미친듯이 반복해서 답을 찾아내는 것이라면, 사람이 답을 찾는 계산은 대충 생각해보고 이미 알려진 사실로부터 답을 유도하는 것이다. 컴퓨터가 생각하는 방식으로는 아직 인간의 증명을 따라가기는 힘들다.

하지만, 사람이 할 수 없는 일들을 컴퓨터에게 시킬 수는 있다. 가령, 10425의 계승을 정확히 계산해 내는 일이라든가 등등. 10425의 계승을 사람보고 계산하라고 시키려면 누구라도 일단 짜증부터 내고 하든가 말든가 할 것이다. 하지만 컴퓨터에게 일을 시키는 것은 쉽다. 프로그램을 만들고 컴파일 한 후에 돌리면 된다.

3.알고리즘

따라서, 내가 얻고 싶은 정보와 입력할 수 있는 정보를 숫자로 나타내는 것이 가장 중요하다. 이러한 이유로, 컴퓨터를 이용해서 푸는 방법을 이용한 것이 바로 수치해석이다. 수치해석은 손으로 풀 수 없거나 풀기 힘들거나 아직 안 풀린 문제들을 당장 활용하기 위해서 근사적인 답을 찾아내는 방법을 제안해 준다. 물론 근사적인 답이라도 얼마든지 실용적으로 활용할 수 있으므로 이 분야는 연구할 가치가 있는 분야가 된다.

가령, 미분방정식을 풀어야 한다면, 찾아야 할 함수를 아주 많은 미지수로 두면 된다. 이러한 미지수들 사이의 관계식이 바로 미분방정식이 되고, 입력하는 숫자들은 바로 초기값이나 경계값이 된다.

4.실제 알고리즘은?

가령, 1부터 100까지 더하는 프로그램을 만든다고 하자

그럼 그 가상 코드는 다음과 같다.

출력(1+2+3+…+100)

자, 이 코드는 허무할 정도로 쉽다. 하지만 100까지 더하는 게 아니라 10000까지 더해야 한다면? 프로그램의 길이가 너무 길어지지 않을까? 입력하다가 차라리 계산하고 싶어질 것이다. 잔머리를 굴려라. 컴퓨터는 산수에 있어서는 아주 끝내주는 녀석이다.

숫자=1

반복(만약 숫자가 100과 같거나 작으면 계속하고, 100보다 크면 그만해라)[합=합+숫자, 숫자=숫자+1]

출력(합)

이러면 좀 짧아졌나? 게다가 원하는대로 100보다 더 많은 숫자를 넣을 때도 고칠 곳이 딱 두군데 뿐이다. 물론 코드의 길이를 더 줄일 수 있는 여지가 있지만, 그건 각자 해 보시라.

컴퓨터 프로그램 언어에는 기본적으로 다음과 같은 명령들이 있다

A=B

이 명령은 B를 A에 대입한다. 정확히는, =의 오른쪽에 있는 녀석이 가진 값들을 왼쪽에 있는 녀석의 값으로 입력해 준다.

만약(조건)[실행문] ; 아니면[실행문] ;

보통은 if ~ else 문으로 주어지는데, 계산을 하다가 멈추거나, 다른 조건들을 대입할 필요가 있을때 등, 아무튼 뭔가 판단할 때 사용할 수 있다.

반복(조건)[실행문]

이건 조건이 맞으면 조건이 틀릴 때 까지 계속 실행문을 반복실행한다. 따라서, 실행문 안에 원하는 만큼 계산을 했으면 조건을 틀리게 만드는 명령을 넣지 않으면 무한루프에 빠져버리게 될 것이므로 조심하자.

+, -, *, /, %

당연히 사칙연산 계산이다 %는 앞에 있는 수를 뒤에 있는 수로 나눈 다음에 그 나머지가 궁금할 때 사용한다.

실제로, 이것만 이용해서도 꽤 많은 것들을 할 수 있다. 가령, 3n+1문제라든가, 조화진동자 문제 등을 해결할 수 있다는 거다.

Hello, world!

Hello, world!

가장 기본적인 영어 문장이다.

누군가에게 인사를 할 때 사용할 수 있으며, 그때는 world 대신에 상대방의 이름을 적으면 된다.

핵공격에 못 견디는 인터넷

기사는 아래 링크 참고.

http://www.inews24.com/php/news_view.php?g_serial=240620&g_menu=020600

이번 지진이 강타한 곳이 해저 케이블 밀집 지역이라고 했다. 전문가가 얘기하기로, 이번 사건으로부터 배울 점이 이 지역에 더 많은 케이블을 설치할 필요가 있다고 한다. 이건 번역을 잘못했거나 이 아저씨가 잘못 얘기했거나 둘 중 하나임이 명백하다. 왜? 지진은 원래 났던데서 계속 일어난다. 그러므로 지진이 난 곳에 케이블이 끊어져서 문제가 됐다면, 그 케이블과 같은 역할을 하는 케이블을 지진이 나지 않은 곳을 경유하도록 연결해야 하는 것이다. 지진때문에 끊어지는 케이블이라면 몇개가 있든지 상관 없이 끊어진다. 인터넷이 핵 공격에도 견딜 수 있다는 얘기는, 우회할 수 있는 경로가 아주 많이 있기 때문에 어느 한 곳의 링크가 깨지더라도 다른 곳을 경유해서 원하는 곳의 정보를 얻을 수 있다는 뜻이다. 이번 사건은 허브와 허브를 연결하는 링크가 깨졌기 때문에 발생한 장애이다. 따라서 이 사고를 막으려면 허브와 허브를 연결하는 링크를 더 많이 만들어야 한다. 하지만 같은 지역에 더 많은 케이블을 설치하는 건 종이위에 연필로 덧칠하는 것과 같다.

과거로 명령을 보내서 사람을 자기 맘대로 조종할 수 있다

방금 엄청난 장면을 봤다. S선배님이 N모 선배님을 자기 맘대로 조종하는 모습을 말이다. 한가지 흥미로운건, S선배님이 한 명령을 그대로 N선배님이 수행하는 건 맞는데, 시간적 순서를 보면 N선배님의 행동이 S선배님의 명령보다 이르다는 점이다.

그렇다. 이 현상을

“S선배님은 드디어 시간을 뛰어넘어 과거의 타인에게 명령을 보내는 능력을 얻었다”



해석

할 수도 있다.

이 아이디어는 S모 선배님의 아이디어를 그냥 퍼왔다. -_-;

“선발”에 대한 공정성에 관하여

취업난과 입시난의 공통점은? 둘 다 들어가기 힘들다는 것!

우리나라는 예로부터 과거 시험을 통해 인재를 선발했고, 시험을 잘 보는 것이 곧 인재임을 증명하는 가장 빠르고 확실한 길이었다. 그리고, 지금에 이르러서는 엄청나게 많은 종류의 시험이 있다. 초등학교때부터 고등학교때까지 12년간 계속되는 중간-기말 시험. 뭐, 초등학교때는 없어졌다지만, 그래도 중학교때부터는 확실하게 6년간, 1년에 4번씩 24번의 시험을 통과해야한다. 그리고 각 시험마다 10개 이상의 과목을 시험을 보니, 대략 300번 정도의 시험을 본다는 얘기다. 여기에 지능검사, 성격검사, 적성검사 등등. 운전면허 시험은 당연히 보는 거고. 토익, 토플, 텝스 등등, 국제화시대에 맞춰 영어시험도 국산화한다고 난리다. 대학을 가기 위해서 수능 시험을 봐야 하는데, 여기에 공부해야 할 과목은 6개 이상이다. 물론 논술과 면접도 준비해야 한다. 논술도 요새는 통합형이라 전과목을 꽤 알아두고 시사 일반 상식도 공부해두지 않으면 떨어진다. 각종 컴퓨터 자격증도 여러가지가 있고, 이름도 들어본 적이 없는 생소한 자격증이 넘쳐나고 있다. 대학에 와서도 1년에 4번, 계절학기까지 들으면 최고 1년에 8번의 시험을 볼 수 있고, 4년간 32번의 시험을 볼 수 있다. 회사에 들어가려면 면접도 통과해야 한다. 대학원 입학시험도 전공과목이랑 영어시험을 보는 곳이 있다. 공무원이 되려면 행정고시를 봐야 하고, 법관이 되려면 사법고시, 선생님이 되려면 임용고시를 봐야 한다. 물론 각각 공부해야 하는 과목은 여러가지다.

시험이 넘쳐나는 세상 속에서 살고 있다는 얘기를 좀 길게 해 봤다.

자, 근데, 여기서 묻고 싶은 것이 있다. 저 수많은 자격증이 꼭 필요할까? 그 수많은 과목들이 꼭 필요한 걸까?

웃기는 얘기가 있다. 이 얘기 읽고 여성분들 오해하지 말기 바란다. 어느 나라의 왕이 왕비를 뽑는데, 지원자중 한명은 머리가 좋고, 한명은 돈이 많다. 누가 왕비가 됐을까? 답은 ->

둘 중에 예쁜 여자.

어떤 빌딩의 경비원을

한명

뽑는데 신입, 경력직, 석사, 박사급 인력을 포함해서 200대 1의 경쟁률을 보였다는 얘기를 들은적이 있다. 이거 일 하는데 석사 학위가 필요할까? 경비 업무와 관련된 학위가 있는지는 모르겠지만, 그런 정도의 학위가 아니라면 다른 학위는 절대 필요 없다고 본다. 물론 경비 업무와 관련된 학위 소지자가 지원했다면 그 사람을 선발할 적절한 이유가 된다. 하지만 단 한명도 그런 관련 소지자가 지원하지 않았다면?

또 다른 예를 들어 보자. 가령, 어떤 회사의 신입사원을 1명 뽑는데 최종 면접까지 전부 우수한 성적으로 통과한 사람이 3명 있다고 가정해 보자. 이 3사람은 이름과 주민등록번호를 제외하고 다 똑같다. 인맥, 출신 학교, 성적, 면접 대답 성향, 가족관계, 교우관계 등등. 한명을 뽑으라고 하면 참 난감한 상황이다. 그런데 제출 자료를 다시 찬찬히 살펴보니 그중 한명이 토익점수가 다른 사람보다 1점 높았다. 그래서 뽑혔다고 하면, 나머지 두명, 대단히 억울하지 않을까?

토익점수가 평가 기준에 들어간다고 한다면 할말이 없긴 하지만, 그래도 억울할것 같다.

가정을 바꿔보자. 토익점수가 평가 기준에 들어가지 않는다고 하자. 그럼 아마 진짜로 억울하고 할말도 많을 것이다. “토익점수는 평가 기준에 들어가지 않는데 1점 높다고 저 사람을 뽑는다는 건 공정하지 않다”라고 분명히 주장할 것이다. 그렇다고 딱히 대안이 있는 건 아니다. “그럼 어떻게 해야 공정한데?”라고 물어봐도, 별 대안은 없다. 하지만 억울하다.

난 여기서 공정한 경쟁을 만들려면, 다른 조건이 똑같다면 추첨을 하는게 낫다고 생각한다. 물론 이것을 최선책이랍시고 제안하는 것은 아니다. 다만, 적어도 추첨이 가장 나쁜 방법은 아니라고 확신할 수는 있다. 하나의 자리에 여러명이 앉을려고 싸우는데, 누가 앉아도 회사의 업무 효율에 영향이 없다면

아무나

뽑자는 거다. 뭐 자격증 하나 더 있으면 좋겠지 하는 마음을 버리자는 얘기를 하고 싶다.

들려오는 얘기에 의하면 직장인들에게 물어봤을 때, 자신이 하는 일 중에서 고등학교까지만 나왔어도 일을 할 수 있을 거라는 사람들이 절반이나 됐다

.

따라서, 굳이 대학을 나와야, 대학원을 나와야 할 수 있는 일을 시킬게 아니라면, 대졸 신입을 뽑지 말고 고졸 이상으로 선발하고, 거기서 추첨을 하라는 거다.

그럼 당연히 대학에 꼭 가야 할 필요가 없게 되고, 고등학교만 졸업해서 직장 생활을 할테니 경제활동 진입 연령이 빨라진다. 또한 대학 입시 지옥이 어느정도 해소될 수 있을 것이다. 그리고 대학교가 취업 사관학교가 아니라 진정한 학문의 상아탑으로 다시 설 수 있을 거라고 생각한다.

석사학위받고 청소부 할 수도 있다. 석사학위 받고서 청소부를 하지 말라는 얘기가 아니다. 청소부가 하찮은 직업이라는 얘기도 결코 아니다. 다만, 청소부 일 하는데 석사학위가 필요가 없다면, 석사학위를 받았건 말건 그건 청소부 뽑는데 절대로 영향을 미쳐서는 안된다는 얘기다.

지독한 노래

지독한 노래 (노래 : 크라잉넛)

길을 걷다 바닥에 붙은 껌에 발목 짤려 와~ 하고 웃어버리고

아라비아 황제가 송유관을 번쩍 들어 내려치니 파리가 죽네

세상에 반칙이 어디있나 야구선수 공잘친다 (파하하하하)

아주까리 메밀꽃에 밤꽃냄새 정액냄새 상한게 분명하구나

부모형제 아내처제 고종사촌 이종사촌 조폭에 팔아버리고

탁치니 억죽고 물먹이니 얼싸죽고 사람이 마분지로 보이냐

만원짜리 형광등에 백열전구 박아놓고 아침식사 대접해주마

세상에 진실이 있긴있냐 그래 너는 노는물이 틀리는구나

역겹지만 즐거운 이야기 호러엽기 족킥’s 환타스틱

춘향아 어서나와 어부바하자 나는요 차라리 내이웃을 먹을래요

전선위에 참새가 고압선을 씹어먹고 불사조가 하늘을 나네

벽오동 심은 뜻은 장농짓고 궤짝짜니 봉황은 갈곳이 없네

바람의 팔할은 먼지요 황사니 내눈엔 너의 모습이

슬퍼도 우지마라 내일은 해가뜬다 우리에게 미래는 없다

지나가던 과객이 목이말라 물좀주소 여인네가 쪽박을 깨네

불쌍한 과객이 급하게 물을먹다 식도가 터져버렸네

봉합수술 받으려면 진료는 의사에게 약국은 약사에게

마이신에 밥말아먹고 내손은 약손이다 목이터져라 진짜터졌네

세상이 다 그렇지 말못하면 쪽박차지 힘만세도 출세만하지

개그맨이 되기전에 살을 빼고 얼굴깎고 아이돌이 되어나보자

개새끼, 소새끼, 말새끼, 씨발새끼, 웃기지도 않는다고나

입찢어서 귀에걸어줄까 허파를 뚫어줄까 입닥치고 한판붙자

개인적으로, 이런 종류의 노래를 좋아한다.

영화 “다세포 소녀”

봐버렸다.


스포일러 있다.

일단, 기대하고 본 사람들은 완전 대 실망할 정도의 작품이다. 욕할 생각이라면 절대 보지 말 것. 무지막지하게 유치하다는 걸 꼭 명심하고 봐야 한다.

엄청나게 유치찬란한 장면들이 휘리릭 지나가는데, 나름 재미있었다. 일단, 배우들 캐스팅은 그럭저럭 괜찮은 것 같다. 연기 잘하는 베테랑 연기자들은 역시 그 캐릭터의 분위기를 아주 잘 살려줬다. 이건 작품 전체의 품질을 떠나서 베테랑 연기자들의 연기 자체는 아주 좋다. 다만 연기력이 부족한 배우들이 눈에 밟힐 뿐. 외눈박이의 경우, 배우보다는 그래픽을 쓰는게 좋지 않았을까 싶은 생각이 들지만, 뭐 그런데 돈 쓸 여유는 없었을 테니 넘어가자. 나름 코믹도 있고. 나름 성교육적인 측면도 좀 있고. 근데 마지막에 음풍신공/양풍신공은 웃기긴 한데 너무 웃기기만 했다. 리얼하지가 않잖아! 원작이 만화라 그런지 애니메이션으로 만들었으면 좋을 장면이 너무 많았다. 아무튼 재미있긴 한데, 아마 다른 사람들은 시간이 아까웠을 것 같다.

주제전달은 원작보다 좀 더 의도적이다. 원작 다세포소녀는 결코 뭔가를 주장하지 않고, 독자들이 느끼게 하는 맛이 있었다. 독자가 천명이면 천개의 해석이 가능하달까나? 하지만 영화는 뭔가를 의도적으로 전달하려는 느낌이 든다. 나쁘다는 건 아니지만, 원작에 충실하지는 않은 부분인 것 같다. 가난을 등에 업은 소녀는 캐스팅은 괜찮은 것 같은데, 독백이 좀 어색했다는 생각이 든다. 마지막에 가난이랑 헤어지는 장면은 좀 오바. 사실 우리나라에서 가난과 헤어지고 싶다고 헤어질 수 있는 사람은 흔치 않다고 생각한다. 물론 인생이 드라마보다 더 드라마틱하다는 점은 분명하지만.

신 암행어사 극장판

크리스마스에 애니메이션이라니. 음, 아무튼 좋다.

이번엔 신 암행어사를 보았다. 만화책으로 잘 알고 있는 작품이어서 애니메이션은 어떨까 했는데, 일단은 만화책의 내용을 충실하게 표현했다는 점에 한표. 오리지널 스토리가 아니라 살짝 아쉬웠찌만, 아무튼 나름 재밌게 보았다.

가장 가슴속에 꽂힌 말은 “닥쳐, 병신들아! 구원만 바라고 있는 녀석들에게 기적은 일어나지 않아!”라는 대목. 음, 역시 나랑 작가의 사상이 통한 부분이랄까. 감나무 밑에서 입 벌리고 있는 녀석에게 감은 주어지지 않는다. 우연히 감이 떨어진다고 해도 그건 그냥 우연일 뿐, 두번 다시 그런 사건을 기대해서는 안된다. 감을 먹고 싶다면 나무에 오르든가 오를 수 없다면 나무를 찍어서 넘어트리든가 그것도 안되면 발로 차서 흔들기라도 해야 한다.

“만약 기적이라고 적혀 있다면, 그건 사기라고 읽어야겠지” 라는 대사도 와닿은 문장.