数据类型/数据结构
Stack and Queue :
Stack : Last in First out
Queue: First in First out
===================================================
Symbol Tables( 符号表)
A SYMBOL TABLE IS A DATA type that we use to associate values with keys
For example, a university might associate information such as a student’s name, home address, and grades (the value) with that student’s Social Security number (the key), so that each student’s record can be accessed by specifying a Social Security number.
Application: Count frequency
Ordered keys
Binany Searching Tree (BST)二叉搜索树
多的就去右边,少的就左边
===================================================
红黑树:
它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的:它可以在 O(logN) 时间内做查找,插入和删除,这里的 N 是树中元素的数目。logN也叫做树的height
===================================================
API(应用程序编程接口):API就是操作系统给应用程序的调用接口,应用程序通过调用操作系统的API而使操作系统去执行应用程序的命令(动作)。
Abstract Data Type 简称ADT 抽象数据类型
===================================================
问题:
logN的底数究竟是多少。
解答:
算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。
如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然。
不过无论底数是什么,log级别的渐进意义是一样的。
也就是说该算法的时间复杂度的增长与处理数据多少的增长的关系是一样的。
我们先考虑O(logx(n))和O(logy(n)),x!=y,我们是在考虑n趋于无穷的情况。
求当n趋于无穷大时logx(n)/logy(n)的极限可以发现,极限等于lny/lnx,也就是一个常数,
也就是说,在n趋于无穷大的时候,这两个东西仅差一个常数。
所以从研究算法的角度log的底数不重要。
最后,结合上面,我也说一下关于大O的定义(算法导论28页的定义),
注意把这个定义和高等数学中的极限部分做比较,
显然可以发现,这里的定义正是体现了一个极限的思想,
假设我们将n0取一个非常大的数字,
显然,当n大于n0的时候,我们可以发现任意底数的一个对数函数其实都相差一个常数倍而已。
所以书上说写的O(logn)已经可以表达所有底数的对数了,就像O(n^2)一样。
没有非常严格的证明,不过我觉得这样说比较好理解,如果有兴趣证明,完全可以参照高数上对极限趋于无穷的证明。
参考:原文链接:https://blog.csdn.net/jdbc/article/details/42173751
————————————————
===================================================
Of the following, which is the most important reason not to use a linked list for a symbol-table implementation?
因为时间复杂度 O(n) 太慢了