原来排序与查找如此重要
今天不用实习,非常珍惜宝贵的学习时间,所以将今天学习的东西都尽量做了一个简单的记录。
上午主要是再次温习了「编码」问题,这次终于完全理解了 Unicode 究竟是怎么一回事。字符编码问题可是从我开始学习编程就一直伴随我左右的梦魇,不过这梦魇倒是慢慢被我降服。随着编程经验的积累,我对编程本身的领悟也越来越多,终于基本搞懂了字符编码的里里外外,虽然依然只是一个轮廓,但脉络清晰,该有的都有了。
为了巩固,也为了以后更加深入地学习编码知识,我这次特地粗略了解了一下几种主流编程语言以及 web 中 url、html、js 的字符串编码方案。
这么粗略地了解下来,还是挺受益,以后遇到问题时能更快地定位问题来源了。
编码问题只能算是温习,而今天对「查找和排序」算法的概览式学习才是最大的收获。对这些算法的初步理解已经让我意识到了之前轻视数据结构和算法的行为是多么的可笑和愚蠢。
查找和排序凝聚了计算机科学中的大量智慧性创见,如今已经成为计算机计算性应用的基础性支撑。
为什么要查找呢?为什么要排序呢?
因为我们干得绝大多数事情就是排序和查找啊。
一个无序的世界,必然不会是我们喜欢,对我们也一般没啥好处的世界。我们喜欢的世界,我们创造的世界,一般都充满着某种秩序性。
这种秩序性一方面体现在纯粹的「某种意义之下的顺序」之上,另一方面也体现在看似散漫,实则充满顺序性的序列对之上。
高效的查找建立在「有序性」之上,虽然排序本身挺费事的,但却是值得的:往往都是一次排序,多次查找。
- 针对事先未排序的乱序数据,我们需要来个大排序
- 针对超大量数据,那些无法一次性载入内存的数据,我们需要优先队列
- 有这么一大类:组织数据的时候,就已经建立起数据之间的顺序关系
顺序是个很关键的要素,在很多问题中都值得被首先关注。
顺序意味着优先级,意味着所在的处境,细思一下,不难发现人类社会本质上是一个优先级非常分明的协作网络,你就想想吧,什么事情没有个先来后到呢?如果没有的话,那只会是另一个优先级大过先来后到的因素在起作用。到头来,不还是个顺序问题吗?拼命努力一辈子,不就是为了跑到别人头里去吗?不就是为了能出人头地吗?
这些都是顺序和优先级问题。
此外,我们在获取信息,甚至处理事情时,使用方法的都是「以键取值」的方法:我们只负责记住最关键的信息,然后再通过关键信息去索取必要信息。
所有的编程问题,本质上还是人类自身的现实和需求问题呀!包括如今大火的人工智能,依旧是为了有效扩充人类「以键取值」的快捷性和效率性。
不知是该恭喜,还是该怎样,总之阅读到该文的,你是第 人。每一次刷新,都是不同的自己。