关于人眼模糊查找与数据库索引的思考
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
{
它应该是家具那一类;
}
=======================================================
那么我们在数据结构设计的时候,是否能够根据以上想法得到些什么呢,现在我自己也不知道.有空再作一下仔细归类研究,现在先把大概的意思发出来给各位看看,本文是一次写完,也没有作什么词法修改.可能会有上文对不上下文的情况,但是我的大意就是这样了.
再次声明,我是绝对的菜鸟一个,样样都是乱写的,看官们请不要用专业的眼光来评价本文.我唯一只希望有文明的争论.
某一天,你进入你家,假设你的父亲,母亲,弟弟,妹妹,总共你的四个亲属和你同在一个屋子里面,你可以直接看到他们,你和他们的直线距离之间没有其它障碍物,并且还有一些家具,例如电视机,桌子等等.如果此时要知道弟弟在哪里,可以有两种办法查找:
1 横扫一眼屋子,肯定能够看到.
2 foreach(object o in 屋子里面的所有东西)
{
询问o:"你是不是我弟弟?";
然后等待o的回答,算法省略;
}
我们都能够发现,第二种办法是愚蠢的,而且效率非常低.但是,在计算机的世界里面,我们正是使用第二种办法,因为计算机不能"看到",它只能够遍历判断出 "是" 或者 "不是" .哪怕是有索引,主键等等辅助手段,也脱离不了这个根本算法.
那么什么是"看到"?我们再做一个假设:
如果你弟弟做了整容,而且变化很大,身高和声音都变了.在他还没有和你交流之前,那么即使你能够看到他,你也认不出他是谁,间接地,你就得不到你想要的答案:"弟弟在哪里?".
弟弟的身影现在已经成像在你的视网膜里面,但是在你的记忆中,找不到这些信息对应的是哪一个人.
现在我们就得到了一个简单的答案,"看到",就是在记忆中查找可以对应的信息.
说到这里,两种查找办法的界限就变得模糊了.我们的脑子同样是在对这些信息进行判断"是"或者"不是".那么为什么效率差异会有如此巨大?排开生物计算机(假设人脑就是)和电子计算机的速度差异先不去谈.以我的观点来看,人脑会形成一种"快照".
还是拿你弟弟来说,给他拍两张照片,时间间隔可以任意,在不整容的前提下,你应该可以很容易分辨出这两张照片拍的是同一个人,但是拿给计算机分析,事情就有点麻烦了,时间的间隔,很可能发生头发的摆动不一样,脸上的表情不一样,这还怎么去判断?去和一堆芯片解释表情和发型?
还是拿这两张照片来说,如果问你两个问题:
1 是不是同一个人?
2 是不是同一张照片的两份复制?
得到的回答是不一样的.那么我可以隐约地认为,脑中"快照"的组成结构,并不是和普通意义的照片一样的.它并不是某个XY坐标对应某个LAB值的这么一个简单集合.很可能它是属于一种多维数组,存在着一种"时间"坐标以及一种"常识"坐标.这样我们才可以进行如下的快速分析:
//首先进行常识判断
if(object == 生物)
{
if{object == 人}
{
//常识判断结束,这里进入记忆判断.
while(
//遍历记忆中家人的长象
)
{
//.............肯定能找到结果............
}
}
else
{
它应该是宠物或者昆虫一类.
}
}
else
{
它应该是家具那一类;
}
=======================================================
那么我们在数据结构设计的时候,是否能够根据以上想法得到些什么呢,现在我自己也不知道.有空再作一下仔细归类研究,现在先把大概的意思发出来给各位看看,本文是一次写完,也没有作什么词法修改.可能会有上文对不上下文的情况,但是我的大意就是这样了.
再次声明,我是绝对的菜鸟一个,样样都是乱写的,看官们请不要用专业的眼光来评价本文.我唯一只希望有文明的争论.