计算机导读从摇滚开始无名氏No.60413427 只看PO
2023-12-04(一)01:21:43 ID:22b93o1 回应
这是一个从零开始的计算机学教程。教程里不会出现太过于深奥的内容,而是鼓励肥哥们根据串内的推荐自行学习。这个串只起到初步解释和导读的作用。
为了让计算机学更加有趣,也为了满足我的摇滚癖好,计算机和摇滚会在这个串里有机地结合起来,毕竟学习时听听音乐不也挺好嘛(ゝ∀・)
无标题无名氏No.62933040
2024-06-30(日)17:31:12 ID: 22b93o1 (PO主)
https://y.music.163.com/m/song/20045591
除了排序后列表这种最基础的数据结构,算法界常用的数据结构还有树(Tree),图(Graph),哈希表(Hash Table,又名散列表),队列(Queue),栈(Stack),链表(Linked List)等。
其中,树可以被看做是满足特殊规则的图,队列和栈可以被看做是所带函数更加受限的列表。
但这不代表树就是比图更加“低端”,或者更加没用。原因主要有二:第一,人们更容易将树与一些应用联系起来,为这些应用设计或实现树的算法,并将图与另一种应用联系起来;第二,一个树常常比同等大小的图有更少的排列组合可能性,使得其在被筛选时复杂度更低,这就像瑞士军刀固然功能性多,但匕首用起来更干脆利落。
每一个数据结构都有一堆对应的,利用该数据结构特性的算法。因为各种数据结构的性质,有些适用于图的算法也可以用于树,适用于队列的算法也可以用于列表。
但可以用≠高效,毕竟如果不是要创造出对应的高效算法,何必多此一举创造出规则更特殊的数据结构呢?
在此,po不多赘述其他数据结构和对应算法,尽管知道它们对于了解计算机科学(和通过大厂笔试)来说是非常重要的。一个合格的程序员在看见一个问题的那一刻,心里就应该有几种备选的数据结构与算法方案。
对于这些数据结构和算法的研究也从未终止过,并且这些研究很多都在为所谓的PNP问题以及更难的类似问题做出贡献。由于这个问题非常难以表述,请读者自行查阅。理解PNP问题需要先理解常见算法与数据结构→集合论→图灵机与可计算性→逻辑与SAT问题→库克理论。
数据结构大家族就像马戏团,每个成员都以特殊——有时候看起来甚至可笑——的形式出现,但都有其不可替代的意义。
无标题无名氏No.63221477
2024-07-26(五)16:52:12 ID: 22b93o1 (PO主)
http://music.163.com/album/1603461
编程语言
人们对程序员的定义就是“能够使用编程语言达成预期目的的职业”。并且,计算机科学研究中非常神奇的一点就在于99%的研究成果可以直接用编程语言来复现。这种高效的理论-产品转化率也是计算机科学蓬勃发展的原因之一。
那么什么是编程语言?在了解编程语言之前,我们需要先知道什么是计算机科学范畴下的符号与语言。
>符号
语言由符号组成。从集合论的领域来说,我们称一个符号是它从属于的符号集Σ中的一个元素,符号集Σ是由符号组成的集合(听不懂就请先自行了解集合论基础理论)。
例如对于二进制语言来说,Σbinary={0, 1}。0与1为符号,Σbinary为二进制符号集。类似的,英语符号集包含了26个英语字母和英语标点符号。
符号集容纳了一个语言可能使用到的所有符号(文字)。一个由符号集Σ中符号构成的,任意长度排列组合叫做语句。例如,1001是二进制语言的一个语句,Rock&Roll是英语的语句。
在离散数学中,我们不是一笔一划地“写下”一个语句,而是从符号集中按顺序选择一个个符号来形成语句。
如果没有语法(grammar)限制,一个非空符号集所能构成的语句的集合Σ*中有无限个元素,并且所有只含某符号集内符号的排列组合都是该符号集的语句。但很可惜,我们有语法来规范什么语句是合法的,什么语句是非法的。
>语法
语法是任何将一个符号集中符号的排列组合分割为合法语句与非法语句的筛选规则。我们定义满足语法的语句是合法的,否则是非法的。一般来说,我们并不讨论非法的语句,除非我们想利用某种规则将其改成合法的。
例如,我们可以定义一种二进制语言的语法是必须要以1为开头,那么100是一句合法语句,而0110则不是。
语法也可以很复杂,特别是自然语言的。例如根据复杂的英语语法,I is fishes是不合法的,而Am I a fish?则是合法的。
一个语言可以有自下而上的数套语法一齐规范。例如在自然语言处理(Natural Language Processing,NLP)的理论中,英语有三重语法,分别是词义(lexical),句法(syntactic)和语义(semantic)。例如I am a waorker中含有错误拼写的词语,不符合词义语法。I a worker am并没有按主谓宾的结构排列,不符合句法。而I am a TV则在语义上没什么道理,只适合在前卫摇滚中出现。
我们想要有一种方式来系统化/自动化地判断一种符号的排列组合是否满足某语法。为此,我们发展/利用了许多理论,例如状态机(State Machine),无上下文语法(Context Free Grammar,CFG)等。利用基于诸如此类的理论所创造工具,程序可以自动判断你写的句子是否符合某种语法,甚至还能纠错。
>语言
我们定义语言为一套符号集与其对应的语法。取决于人们的需求,语言可以是二进制数字,中文,说出来的话,手语,音乐,图片,分子的理论运动轨迹(考虑到量子的离散性)等等等等,因为它们都是符号的排列组合,都可以用符号的排列组合来精准定义。
对于语言这种抽象概念的广泛存在,一些最早将前卫要素引入金属乐的人已经意识到了。音乐也可以是图片,或者文字。Images & Words.