查找思维在生活中的应用场景
作者:互联网
学了计算机之后,远没有其他专业同学学的那么高大上,随便懂点的人似乎都能和你聊两句计算机,不过,计算思维的影响真的是渗透进人的思维。
今早室友问这个月有30号吗?我直接模糊问题,将问题抽象成这个月是大月还是小月?(其实除了2月都有30号,我审题不清,在这里先暂且忽略。)
判断一个月是大月还是小月,用计算机怎么解决?先说说我是怎么解决的。
方法一:hash查找,详细的说明到处都是,我只说一下优点:快。
我的第一判断:78月是大月,第二判断才是这个月是哪月
这一点似乎没什么,但这是一种自顶向下的思维,简单来说,我在一瞬间提供了解决同类问题的方法,而不是针对这个问题,将问题扩展成一个抽象问题来解决。举例:先制定加法规则,再进行运算,而不是针对诸多运算,抽象出加法规则。这种和鸡生蛋还是蛋生鸡问题不同,算是一种潜移默化的思维改变?
不简单说一下,我的面向对象又变成了同学,简单说一下hash查找,它会将数据通过内容映射到地址,最简单的hash查找就是数组,有了下标,不用依次访问元素,直接找到位置,举例一:我排名147,想找到我,就到147号房间找我,不用依次敲开前146个房间的门看看里面的人是不是我。
简单的hash扩展:举例二:我捡到一个学生卡,知道了同学的专业,我可以通过专业找到分配的寝室楼,甚至寝室楼层(发现是9楼,噢,假装没捡(非强制义务终止,正常你要放回去,假装没捡,捡了最好对物品负责,跑题了))。这样是不是比其他方法快?理想的hash查找的时间复杂度是常数,和查找范围无关。
78月是大月,在我的大脑里是一个常数的查找,我只需要在它附近查找就行。
举例三:在大海上捡到一个学生卡,是哈尔滨工业大学的,由内容映射的地址,后面需要再在里面进行查找,emmm…这个思维叫迭代,有兴趣了解,我先不展开了。
6月7月相邻,6月是小月,这个是顺序查找,就是一个接一个,举例一里敲了146次门那种。
至此,我得到了第一个答案,但作为严谨的大学生,我怎么也要
检查一下,于是想到方法二。
方法二,顺序查找,同举例一敲了146次门。
但难倒我的是这个方法需要有两个内容互相挤占缓存(冲突不命中),要同时记得当前查到第几个月了,和第几个月是大月还是小月。其实这并不简单。
举例子:0a1b2c3d4e5f6h7i8j9k10l11m12n13……问n是第几个字母,它相邻了12和13,你要记得它和12对应还是和13对应,这需要一个额外的标记,总之就是,不快。(不快的原因:逻辑性差,可读性差,没加注释,没写规约,大脑是程序员,你是用户,两者之间沟通过程太多)
方法二时间太久不想了,换个方法
想想都任性,就是方法学的多。
两个月一组,先分组,6可以被2整除,是2个月1个组,抽象出两个等价类,取代表元素,{1月,6月},1月是大月,6月是小月。
方法三:这种方法类似于顺序查找,但每次有跳跃的进行,快一点,但只是线性的缩减,时间复杂度依旧是线性的,对于个位数的体现不明显。学就要较真的学,方法可行,验证成功。
小结:全部过程中,我想到了3种查找方法(hash,顺序,顺序的改进+等价),对两种进行了运算,得到了两个相同的结果,验证成功,在生活中印证学习的收获,用学习的方法解决生活中的问题,同时使我了解到基础知识的重要性,让我对自己过去的知识产生新的认识:温故而知新。
故事的后续交流:
我:“这个月是6月(同时进行上述思考过程),没有。”
室友某某波:“嗯?是吗?(奇怪的语气让我重新审题,想到30号)”
我:“噢,我错了,我以后一定仔细审题。”
所有 斜体加粗 的内容是我的大脑思考,全部用时不到两秒,在交流过程中几乎没有停顿,这就是思维的魅力。多次回忆越发感觉有趣,写于此留念。
标签:思维,场景,hash,在生活中,查找,举例,审题,方法 来源: https://blog.csdn.net/awhiteknow0/article/details/118299688