Spiga

关于人眼模糊查找与数据库索引的思考

2007-03-03 22:42 by 梁逸晨, 2670 visits, 收藏, 编辑
首先我先声明,我是绝对的菜鸟一个.这篇文章也是我乱写着玩的.请各位看官不要用专业的眼光来评价.


某一天,你进入你家,假设你的父亲,母亲,弟弟,妹妹,总共你的四个亲属和你同在一个屋子里面,你可以直接看到他们,你和他们的直线距离之间没有其它障碍物,并且还有一些家具,例如电视机,桌子等等.如果此时要知道弟弟在哪里,可以有两种办法查找:

1 横扫一眼屋子,肯定能够看到.

2 foreach(object o in 屋子里面的所有东西)
    {
       询问o:"你是不是我弟弟?";
       然后等待o的回答,算法省略;
    }

我们都能够发现,第二种办法是愚蠢的,而且效率非常低.但是,在计算机的世界里面,我们正是使用第二种办法,因为计算机不能"看到",它只能够遍历判断出 "是" 或者 "不是" .哪怕是有索引,主键等等辅助手段,也脱离不了这个根本算法.

那么什么是"看到"?我们再做一个假设:

如果你弟弟做了整容,而且变化很大,身高和声音都变了.在他还没有和你交流之前,那么即使你能够看到他,你也认不出他是谁,间接地,你就得不到你想要的答案:"弟弟在哪里?".
弟弟的身影现在已经成像在你的视网膜里面,但是在你的记忆中,找不到这些信息对应的是哪一个人.
现在我们就得到了一个简单的答案,"看到",就是在记忆中查找可以对应的信息.

说到这里,两种查找办法的界限就变得模糊了.我们的脑子同样是在对这些信息进行判断"是"或者"不是".那么为什么效率差异会有如此巨大?排开生物计算机(假设人脑就是)和电子计算机的速度差异先不去谈.以我的观点来看,人脑会形成一种"快照".

还是拿你弟弟来说,给他拍两张照片,时间间隔可以任意,在不整容的前提下,你应该可以很容易分辨出这两张照片拍的是同一个人,但是拿给计算机分析,事情就有点麻烦了,时间的间隔,很可能发生头发的摆动不一样,脸上的表情不一样,这还怎么去判断?去和一堆芯片解释表情和发型?

还是拿这两张照片来说,如果问你两个问题:

1 是不是同一个人?
2 是不是同一张照片的两份复制?

得到的回答是不一样的.那么我可以隐约地认为,脑中"快照"的组成结构,并不是和普通意义的照片一样的.它并不是某个XY坐标对应某个LAB值的这么一个简单集合.很可能它是属于一种多维数组,存在着一种"时间"坐标以及一种"常识"坐标.这样我们才可以进行如下的快速分析:

//首先进行常识判断
if(object == 生物)
{
    if{object == 人}
    {
       //常识判断结束,这里进入记忆判断.
       while(
          //遍历记忆中家人的长象
         )
        {
          //.............肯定能找到结果............
        }
    }
    else
    {
       它应该是宠物或者昆虫一类.
    }

}
else
{
    它应该是家具那一类;

}

=======================================================

那么我们在数据结构设计的时候,是否能够根据以上想法得到些什么呢,现在我自己也不知道.有空再作一下仔细归类研究,现在先把大概的意思发出来给各位看看,本文是一次写完,也没有作什么词法修改.可能会有上文对不上下文的情况,但是我的大意就是这样了.


再次声明,我是绝对的菜鸟一个,样样都是乱写的,看官们请不要用专业的眼光来评价本文.我唯一只希望有文明的争论.