邓俊辉,数据结构C?
学数据结构用c或者C++都可以。
既然你问的是数据结构用C++描述的,那下列推荐几本给到你,可以参考。
1、数据结构、算法与应用 C++语言描述(原书第2版)
有卖,60元左右,老胡电脑里还有它PDF版本,要的小伙伴找我拿。
本书分三个部分。
之一部分从第1章到第4章,旨在复习C++程序设计的概念以及程序性能的分析和测量 。
第二部分从第5章到第16章,研究数据结构,包括线性表、数组和矩阵、栈、队列、字典、二叉树、优先级队列、竞赛树、搜索树和图等。
第三部分从第17章到第21章,研究常用算法,包括贪婪算法、分而治之算法、动态规划、回溯算法和分枝定界算法。本书有800多道练习题和50多个应用实例。内容广博,组织合理,论述清晰,循序渐进,而且对程序性能的分析和测量系统入微。本书不仅是数据结构和算法的经典教材,而且是计算机科学与工程领域的理想参考书。
2、数据结构C++语言版
邓俊辉著作 数据结构(C++语言版 第3版), 价68.5元。
3、数据结构与算法分析(C++版)
这本书是美国人 Clifford A. Shaffer著作的。百度有PDF版可以搜索下载可以看一下。
我想题主应该是要看数据结构C++语言版,可以 搜索PDF下载下来看看,适合自己,再花钱买实体书。
你们生活中用过更高级的算法知识是什么?
蝉的生命周期为什么是13或17这种素数。
这个是邓俊辉老师在讲解“hash函数的除数取余法为什么尽量取素数”这个问题时讲到的,感觉数据结构和算法很神奇,大自然更神奇。
“我们知道在实际应用中,我们所处理的数据通常都具有一定的局部性。其中一种典型的现象是:数据序列中的数据项 大多是按某一步长单调变化。如果数据序列的步长为S,我们来考察S与M(散列表更大长度)的更大公因子,将其记作G。
而你的数据序列,将从某一个位置开始,以S为间隔,逐次的转入下一项,以及再下一项。当然如果你的数据序列足够长,它就有可能会从另一端回到这个空间,并且继续以S为间隔在散列地址空间中逐次访问下去。
现在考察这个数据序列在散列地址空间中留下的足迹,这些足迹能够遍历整个散列表空间吗?如果能,那么这种散列 就具有均匀性;反之就不具有。
借助数论的知识不难知道,数据序列的足迹能够遍布整个散列表,当且仅当刚才这个更大公因子等于1。请注意,因为可能有不同的程序,而每个程序的每一次运行所对应的这个步长,必然未必相等。也就是说,这里的M,相对于几乎任何S更大公因子都只能是1,这意味着什么呢,意味着M应该是一个素数。
很有意思的是,很多动物,包括一些昆虫都懂得这个道理。在这里我们再次向蝉学习,学习它的哲学。昆虫学告诉我们,蝉有很多变种,每一个变种都有其固定的生命周期,比如有些蝉是13年,而有些却是17年,为什么没有14、15或16呢?
不妨回到我们的散列表。实际上,每一只蝉的生命周期,都可以对应为一个散列表。蝉的寿命有多长,散列表也就有多长,所以有些种类的蝉所对应的散列表长度为13,有些对应于17,当然也可能是11等等这类的素数。
我们知道在自然界蝉是弱势群体,它有很多天敌,每一种天敌大致也有一个自己的生命周期,这就相当于我们这里的步长S,每经过S年,蝉的天敌都会更新一代。当然。蝉不能去改变弱肉强食的法则,它唯一能期望的只能是,在同一年,不要遇到更多的天敌。相应的,反过来,所有的天敌都应该在每一年分布的更加均匀,这更有利于蝉作为一个物种得以在自然界延续下去。
用数学的语言来说,如果蝉能够选择自己的生命周期,那么自然的就应该选择与天敌的生命周期保持更大公约数为1,而为了与更多的天敌在生命周期上保持这种关系。尽管蝉有不同的变种 但是在经过长时间的进化之后,每一个变种都会聪明的将其生命周期设定为素数,正像我们所看到的那样 取做17,13等等。”
上面这一大长段解释出自学堂在线的邓俊辉老师的课《数据结构与算法》第九章“词典”第三节“散列:散列函数”,基本上都取自老师的字幕,略有修改。邓老师这门课讲得太棒了,春风化雨,旁征博引,极其用心。教材内容、课件 、讲课语言无一不充满美感。这是一门融计算机、数学、哲学、艺术于一体的课,我也不知道该怎么夸了,算了,不夸了。