javascript数据结构和算法 零(前记+序言)

前记

这本书Data Structure and Algorithm with Javascript

我将其翻译成<< javascript 数据结构和算法>>

为什么这么翻译?而不是翻译成"用javascript实现数据结构和算法"

原因有二:

一个,我觉的它更加简洁,第二个,我是想强调我们在这里使用的是javascript.

我不喜欢一些翻译的人把一个简单的语句进行加工,搞得晦涩难懂.我更喜欢外国人写书的

那种原汁原味.同样,我很喜欢外国人的那种分享精神,它深深的打动了我.

Just try to share !

=========译者注========

序言

在过去几年里,Javascript通过Nodejs和SpiderMonkey平台 被越来越多的应用于服务端编程.由于Javascript编程正在移出浏览器端,程序员发现他们需要那些 原本只为传统语言如C++,Java提供的工具.这其中包括链表,栈,队列,图等经典的数据的数据结构同时包括经典算法如排序算法和查找算法.

这本书讨论如何为服务端的Javascript实现这些数据结构和算法.

Javascript 程序员将会发现这本书非常的有用,因为它讨论了如何实现这些数据结构和算法,同时包括Javascript实现它们时的一些限制.比如数组实际是对象,过度的全局变量和基于原型的对象系统.

Javascript 被不平等的称为是一门很”糟糕”的编程语言,但是这本书向你证明了怎样用该语言的”精华”部分来实现有效和高效的数据结构和算法.

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

我姑且认为大多数阅读这本书的读者并没有系统的学习过计算机科学.如果你确实学习过,那么你已经明白为什么学习数据结构和算法如此重要.如果你没有深入的学习计算机科学或者并没有学习过这些话题,那么你应该阅读该模块.

计算机科学家Nicklaus Wirth在他一本编程书的标题中这样写道:”算法+数据结构=编程”.

这个标题就是计算机编程的本质.

任何编程语言只要不是类似于”hello world”这样简单的语句,多多少少都需要某种类型的结构去组织这个程序;伴随着一个或者多个将输入的数据翻译成输出的数据的算法.

对于在学校没有学习过计算机科学的程序员,他们唯一熟知的数据结构就是数组.数组对于解决一些问题是很棒的.但是对于一些复杂的问题来说(事实上它们并没有想象的那么复杂).许多有经验的程序员必须承认,对于一些编程问题,一旦他们想到了合适的数据结构,解决该问题的算法是很容易设计和实现的.

例如:通向高效算法的数据结构就是二叉搜索树.二叉搜索树的设计使在集合中寻找最小值和最大值非常方便,比任何查找算法都要高效.不熟悉二叉搜索树的程序员将使用简单的数据结构,结果导致低效率的程序.

学习算法是非常重要的因为对于解决一个问题往往有很多的算法可以做到.对于开发人员来说了解哪种算法最高效是非常重要的.举个例子,对于列表中的元素排序,往往会有六七种算法可以实现,但是知道快速排序法比选择排序法高效将会使整个排序过程非常高效.

再例如对于列表中的数据用顺序查询或者线性查询是非常简单的,但是如果知道二分排序算法将比顺序查询算法高效两倍将会写出更好的程序.

深入的学习数据结构和算法教会你的不仅仅是哪个算法或者数据结构是最高效的,还有让你知道对于正在面对的问题,选择哪种算法或者数据结构是最合适的.在写程序的时候需要取舍,尤其是在Javascript环境中,了解本书包含的各种数据结构和算法将会帮助你对任何特殊的编程问题做出合适的决定.

javascript数据结构和算法 零(前记+序言)

时间: 2024-12-20 13:11:31

javascript数据结构和算法 零(前记+序言)的相关文章

javascript数据结构与算法---列表

前言:在日常生活中,人们经常要使用列表,比如我们有时候要去购物时,为了购物时东西要买全,我们可以在去之前,列下要买的东西,这就要用的列表了,或者我们小时候上学那段时间,每次考完试后,学校都会列出这次考试成绩前十名的同学的排名及成绩单,等等这些都是列表的列子.我们计算机内也在使用列表,那么列表适合使用在什么地方呢?不适合使用在什么地方呢? 适合使用在:当列表的元素不是很多的情况下,可以使用列表,因为对列表中的元素查找或者排序时,效率还算非常高,反之:如果列表元素非常多的情况下,就不适合使用列表了.

重读《学习JavaScript数据结构与算法-第三版》- 第3章 数组(一)

定场诗 大将生来胆气豪,腰横秋水雁翎刀. 风吹鼍鼓山河动,电闪旌旗日月高. 天上麒麟原有种,穴中蝼蚁岂能逃. 太平待诏归来日,朕与先生解战袍. 此处应该有掌声... 前言 读<学习JavaScript数据结构与算法>- 第3章 数组,本节将为各位小伙伴分享数组的相关知识:概念.创建方式.常见方法以及ES6数组的新功能. 数组 数组是最简单的内存数据结构,用于存储一系列同一种数据类型的值. 注:虽然数组支持存储不同类型的值,但建议遵守最佳实践. 一.数组基础 创建和初始化数组 new Array

JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 之所以把冒泡排序.选择排序.插入排序放在一起比较,是因为它们的平均时间复杂度都为 O(n2). 请大家带着问题:为什么插入排序比冒泡排序更受欢迎 ?来阅读下文. 2. 如何分析一个排序算法 复杂度分析是整个算法学习的精髓. 时间复杂度: 一个算法执行所耗费的时间. 空间复杂度:

javascript数据结构与算法--二叉树(插入节点、生成二叉树)

javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ /*用来生成一个节点*/ function Node(data, left, right) { this.data = data;//节点存储的数据 this.left = left; this.right = right; this.show = show; } function sh

javascript数据结构与算法---队列

队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素反而被优先处理.我们现在可以把队列想象对我们去餐馆吃饭的情景,很多人排队吃饭,排在最前面的人先打饭.新来的人只能在后面排队.直到轮到他们为止. 一:对队列的操作 队列有2种主要的操作,向队尾中插入新元素enqueue()方法和删除队列中的队首的元素的dequeue()方法,另外我们还有一个读取队头的元素,这个方法我们可以叫front()方法.该

javascript数据结构和算法 第一章(编程体验)一

声明和初始化变量 Javascript变量默认是全局作用域的.严格来说,使用之前是不需要定义的. 当一个javascript变量在没有被声明之前直接进行初始化,它就是一个全局变量.在这本书中,我们沿用编译语言如c++和java的编程约定.在使用变量之前都进行声明. 这还有一个附带的好处,声明的变量可以作为本地变量. 我们将会在本章节的后面讨论更多关于变量的作用域. 声明javascript变量,使用关键字var 变量名称.可选择的,可以带上赋值表达式. 下面是一些例子 var number; v

javascript数据结构和算法 第一章(编程体验)三

变量作用域 变量作用域就是指在一个程序中,变量的值在哪里可以被获取到.javascript函数作用域被定义为函数作用域,这意味着变量的值在定义和声明该变量的函数,包括任何在该函数的嵌套函数里是可见的. 当一个变量定义在函数的外面,在主程序中,该变量将会拥有全局作用域.这就意味着它的值可以被程序的任何地方,包括函数获取. 下面的小程序演示全局变量时如何工作的. function showScope() { return scope; } var scope = "global"; pri

javascript数据结构和算法 第一章(Javascript编程环境和模型) 一

这一章介绍了我们在这本书中使用的描述各种数据结构和算法的Javascript的编程环境和编程架构. Javascript 环境 Javascript 在很长一段时间都是被作为web浏览器内置脚本编程语言来使用. 然而,在过去几年里,javascript编程环境得到了极大的发展,他们可以使javascript在桌面或者服务端运行. 在我们这本书中,我们使用其中的一个javascript环境:javascript shell:是Mozilla公司的javascript环境,被称为SpiderMonk

javascript数据结构和算法 一(本书组织结构)

环境 我们在本书中使用的Javascript编程环境是基于SpiderMonkey 引擎的javascript shell. 第一章讲述了在你的环境中下载 shell的介绍. 其他的shell例如Nodejs同样可以工作,虽然你可能需要简单的改变下代码. 除了shell,唯一你要准备的就是文本编辑器. 本书的组织结构 第一章:javascript语言的概览,至少是在本书中使用的javascript的一些特征.这一章同时展示了在整本书中使用的一些编程风格. 第二章:讨论了在计算机科学中最通用的数据