为什么要学习数据结构与算法javascript描述

在过去的几年中,得益于Node.js和SpiderMonkey这样的平台,JavaScript越来越多地被用于服务器端编程。鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言,比如C++和Java提供的工具。这些工具包括经典的数据结构,如链表、栈、队列、图等,也包括经典的排序和查找算法。本书即讨论了在使用JavaScript进行服务器端编程时,如何实现这些经典的数据结构和算法。

JavaScript程序员会发现本书很有用,因为本书讨论了在JavaScript语言的限制之下,如何实现经典的数据结构和算法。这些限制包括:数组即对象、无处不在的全局变量、基于原型的对象模型等。JavaScript作为一种编程语言,名声有点“不大好”,但是本书展示了如何使用JavaScript语言中“好的一面”去实现高效的数据结构和算法。

为什么要学习数据结构和算法

我假设本书的读者中,有很多人没接受过正规的计算机科学教育。如果你接受过正规的计算机科学教育,那么,你已经知道了学习数据结构和算法为何如此重要。如果你没有一个计算机科学的学位或者没有正规学习过计算机科学,那么请耐心读完本节。

计算机科学家Nicklaus Wirth写过一本书,书名叫:算法 + 数据结构 = 程序 (Prentice-Hall)。这个书名就概括了计算机编程的精要。除过那些儿戏式的程序,比如“Hello world!”,任何一个有些规模的程序都需要某种形式的数据结构来保存程序中用到的数据,还需要一个或多个算法将数据从输入转换为输出。

对于那些没有在学校学习过计算机科学的程序员来说,唯一熟悉的数据结构就是数组。在处理一些问题时,数组无疑是很好的,但对于很多复杂的问题,数组就显得太过简陋了。大多数有经验的程序员都愿意承认这样一个事实:对于很多编程问题,当他们想出一个合适的数据结构,设计和实现解决这些问题的算法就变得手到擒来。

二叉查找树(BST)就是一个这样的例子。设计二叉查找树的目的是为了方便查找一组数据中的最小值和最大值,由这个数据结构自然引申出一个查找算法,该算法比市面上最好的查找算法效率还要高。不熟悉二叉查找树(BST)的程序员可能会使用一个更简单的数据结构,效率上就打了个折扣。

学习算法非常重要,因为解决同样的问题,往往存在多种算法,知道哪种算法效率最高对一个高效的程序员非常重要。比如,现在至少有六、七种排序算法,如果知道快速排序比选择排序效率更高,那么就会让排序过程变得高效。又比如,实现一个线性查找的算法很简单,但是如果知道有时二分查找可能比线性查找快两倍以上,势必会写出一个更好的程序。

深入学习数据结构和算法,不仅是学习哪种数据结构或算法更高效,还要学习在数据结构和算法之间做出选择,哪种数据结构和算法对你手头上的问题是最合适的?写程序,尤其是拿JavaScript写程序时,经常会面临这样的权衡,知道了本书覆盖到的数据结构和算法的优缺点,可以在解决任何特定问题时帮助你做出正确的选择。

阅读本书需要的工具

本书使用的编程环境是基于SpiderMonkey JavaScript引擎提供的JavaScript Shell。第一章提供了下载和安装该shell的说明。也可以使用其他一些JavaScript Shell,比如Node.js提供的JavaScript Shell,但是你需要自己对书中的程序做一些转换,以便可以运行在Node.js上。除了JavaScript Shell,再有一个文本编辑器就够了,你将使用文本编辑器编写JavaScript程序。

本书的组织结构

  • 第一章对JavaScript语言做了一个简单介绍,或者说,至少对本书用到的JavaScript特性做了介绍。本章还展示了贯穿全书的编程风格。
  • 第二章讨论了计算机编程中最常见的数据结构:数组。数组是JavaScript原生的数据类型。
  • 第三章介绍了我们实现的第一个数据结构:列表。
  • 第四章介绍了栈。栈是一种贯穿计算机科学的数据结构,编译器和操作系统的实现都用到了栈。
  • 第五章讨论了队列。队列是对你在银行或杂货店里排队时的一种抽象。队列被大量用在一些模拟软件中,在处理数据之前,必须先把数据按顺序排成一队。
  • 第六章介绍了链表。链表是在列表的基础上进行修改,链表里的每个元素都是一个单独的对象,该对象和它两边中的任何一个元素相连。当程序中需要多次插入和删除元素时,使用链表会非常高效。
  • 第七章展示了如何实现是使用字典,字典是一种保存键值对的数据结构。
  • 实现字典的一种方法是通过哈希表,第八章讨论了如何实现哈希表和存储数据的哈希算法。
  • 第九章介绍了集合。和数据结构相关的书通常不会介绍集合,但是当某个数据集不允许有重复元素出现时,使用集合是一个很好的选择。
  • 第十章的重点是二叉树和二叉查找树。前面提到过,二叉查找树是一种存储有序元素的极佳选择。
  • 第十一章介绍了图和图的算法。图用来表示诸如计算机网络上的节点、或者地图上的城市这样的数据。
  • 第十二章转向算法,讨论了各种排序算法,包括简单的易实现的算法,但这种算法在大的数据集上工作起来效率不高;也包括为大数据集量身定做的复杂一点的算法。
  • 第十三章还是介绍算法,不过这回是查找算法。介绍了线性查找和二分查找。
  • 第十四章是本书的最后一章,讨论了一些更高级的算法——动态规划和贪心算法。

  • 这些算法能解决一些很难的问题,通常的算法在面对这些问题时要么执行速度太慢,要么难于实现。我们会分析几个经典的用动态规划和贪心算法解决的问题。
 
需要的可以去我的网盘里面下载https://yunpan.cn/cRhGHxab5yaIy (提取码:71e7)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值