나는 지능형 자료구조를 IDS(Intelligence Data Structure)라고 부른다.
IDS는 주로 노드와 엣지로 구성되어 있기 때문에, IG(Intelligence Graph)라고도 부르는데, '노드'라는 객체를 따로 만드는 반면에, '엣지'라는 객체는 따로 만들지 않기 때문에 완전한 그래프라고 부르기는 어렵지만, 어쨌거나 노드와 노드의 참조(reference)로 이루어지는 면에서 있어서는 거의 같다고 볼 수 있기 때문에, 그래프라고 불러도 무방하다.
그래서 IDS를 이용한 전자계산기는 IGC(Intelligence Graph Calculator)라고 부르고, 데이터베이스는 IGD(Intelligence Graph Database)라고 부른다.
IDS의 목적은 당연히 지능이 구사하는 자료 저장과 참조 방식을 그대로 구현하는 것이지만, 현재 지능의 물리적 구조가 완전히 밝혀지지 않은 관계로, 지능이 가능한 것을 IDS도 가능하도록 알고리즘 구성을 하는 것이 우선의 목적이라 할 수 있을 것이다.
지능은 노드와 참조로 구성되는데, 예를 들어 '미술관 옆 동물원'이라는 개념은
(1) node 1 : 미술관
(2) node 2 : 동물원
이렇게 두 가지 노드로 구성되어 있고,
(3) 미술관 -> 동물원
과 같은 관계로 연결되어 있다.
(3)에서 '->'가 뜻하는 것은 '미술관'이 '동물원'을 참조할 수 있다는 말이고, 그 역은 불가능하다. 즉, '동물원'은 '미술관'을 참조할 수 없다는 뜻이다. 이를 좀 더 명확히 하기 위해, '편의점 옆 동물원'이란 개념을 하나 더 추가하면,
(4) node 3 : '편의점'
(5) 편의점 -> 동물원
과 같이 표현할 수 있고, 이것은
과 같이 도시할 수 있다. 이 그림이 뜻하는 것은 만약 어떤 인간의 머리 속에 그림 속의 세가지 노드 밖에 없다면, 외부에서 누군가 '미술관'이나 '편의점'을 입력하면(혹은 스스로 그 개념을 지각하면), 이 사람은 반드시 '동물원'을 떠올린다는 것을 의미한다. 하지만 역으로 누군가 '동물원'을 입력한다고 해도, 이 사람은 '미술관'이나 '편의점'을 떠올릴 수는 없다. 참조가 단방향으로만 되어 있기 때문이다.
기억에 방향성이 있다는 것은 매우 풍부한 실증적 예들이 있다. 가령, '물'과 '바다'의 관계를 생각했을 때, 바다는 반드시 물을 떠올리지만, 물이 꼭 바다를 떠올린다는 법은 없다. 산과 나무도 마찬가지다. 산은 거의 반드시 나무로 이어지지만, 나무가 꼭 산으로 이어지지는 않는다. 이런 일반적인 예가 아니더라도 개인마다 이런 경험이 흔하다. 나의 경우에는 어느 지역의 '국민은행' 옆의 '다이소'를 떠올리기는 쉬운데, 역으로 '다이소' 옆의 '국민은행'은 떠올릴 수 없다. '산토끼'를 능숙하게 발음하는 사람이라도, '끼토산'으로 역배열하기는 쉽지 않다. 기억에 방향이 있기 때문이다.
기억에 방향이 존재한다는 것은 자료구조적으로 많은 의미가 있다. 가령, 세가지 빈 칸을 채우는 문제가 있다고 하자.
(6) _ _ _
여기에 들어갈 말은 'abc'여야 한다. 그래서 어떤 사람이
(7) a _ _
(8) a b _
(9) a b c
라는 식으로 빈 칸을 채웠다. 그런데 옆에 있는 다른 사람은
(10) _ b _
(11) _ b c
(12) a b c
라고 채웠다고 해 보자. 답으로 체출된 9)와 12)는 분명히 결과로서는 같은 답이지만, 전자는 a->b->c라는 순서를 가지고 있고, 후자는 b->c->a라는 순서를 가지고 있으므로, 우리 지능은 두 답을 다른 답으로 인식할 수 있다. 우리가 답을 제출한 두 사람이 각각 다른 방식으로 정답을 적었다는 것을 인식할 수 있다는 것 자체가 우리가 시간순으로(그러니까 방향을 가지고) 기억을 유지하고 있다는 말이고, 단지 결론만으로 사건을 판단하지 않는다는 말이 된다.
이런 기억의 특징때문에 IDS는 자료를 저장할 때, 반드시 개념과 순서를 저장하기 위하여 '단방향' 참조를 이용한다. 모든 것은 시간에 의한 방향성을 가지기 때문에, 이를 '순서있는 배열'이라고 하기도 한다. 단방향 참조와 비교하여 '양방향 참조'란 단방향 참조가 두 번 이루어진 별도의 과정이라고 이해할 수 있다. 우리는 a와 b를 양방향 참조하기 위해서는 a->b, b->a라는 두 번의 단방향 연산을 해야 한다. 그러면, a에서 b를, b에서 a를 떠올릴 수 있다. 대부분의 사람들에게 있어서 '아빠'가 '엄마'를, '엄마'가 '아빠'를 즉각적으로 떠올리는 것은 바로 이런 연산의 결과이다.
===Steem AD===
스팀은 역시 jSteem(http://jsteem.com)