数据结构与算法分析 订阅
《数据结构与算法分析》是2007年人民邮电出版社出版的一本图书,作者是Mark Allen Weiss。 展开全文
《数据结构与算法分析》是2007年人民邮电出版社出版的一本图书,作者是Mark Allen Weiss。
信息
原版名称
Data Structures and Algorithm Analysis
作    者
Mark Allen Weiss
定    价
49.00元
书    名
数据结构与算法分析
出版时间
2007年
开    本
16开
出版社
人民邮电出版社
ISBN
9787115139238
数据结构与算法分析图书简介
《数据结构与算法分析C++描述>(第3版)是数据结构和算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书的内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、摊还分析、查找树算法、k-d树和配对堆等。
收起全文
精华内容
下载资源
问答
  • 数据结构与算法分析—C语言描述 扫描清晰
  • 数据结构与算法分析习题答案

    热门讨论 2009-08-17 23:54:15
    数据结构与算法分析每章练习的答案 数据结构与算法分析每章练习的答案
  • 数据结构与算法分析 C++描述

    热门讨论 2013-04-10 14:55:34
    可谓经典中的经典的,《数据结构与算法分析:C++描述(第3版)》秉承Weiss著作一贯的严谨风格,同时又突出了实践。书中充分应用了现代C++语言特性,透彻地讲述了数据结构的原理和应用,不仅使学生具备算法分析能力,...
  • 数据结构与算法分析C语言描述习题答案 数据结构与算法分析C语言描述习题答案 数据结构与算法分析C语言描述习题答案 数据结构与算法分析C语言描述习题答案 数据结构与算法分析C语言描述习题答案 数据结构与算法分析...
  • 数据结构与算法分析:C语言描述》曾被评为20世纪顶尖的30部计算机著作之一,作者在数据结构算法分析方面卓有建树,他的数据结构算法分析的著作尤其畅销,并受到广泛好评,已被世界500余所大学选作教材。...
  • 数据结构与算法分析C++描述第三版中文

    千次下载 热门讨论 2010-06-03 08:53:18
    数据结构与算法分析C++描述第三版中文 数据结构与算法分析C++描述第三版中文
  • 数据结构与算法分析(java语言描述)中文第二版 以及习题答案(英文的) 数据结构与算法(java语言描述)中文第二版 以上3本书都在,给学习数据结构的java开发人员学习。
  • 数据结构与算法分析_Java语言描述(第2版)
  • 数据结构与算法分析 c++描述 第三版 及 相应课后习题答案 (两个pdf文件)高清 完整 数据结构的经典之作 【作 者】(美)Mark Allen Weiss
  • 前言都说数据结构与算法分析是程序员的内功,想要理解计算机世界就不能不懂点数据结构与算法,然而这也备受争议,因为大多数的业务需求都用不上数据结构与算法,又或者说已经有封装好的库可以直接调用,例如Java中的...

    一、前言

    都说数据结构与算法分析是程序员的内功,想要理解计算机世界就不能不懂点数据结构与算法,然而这也备受争议,因为大多数的业务需求都用不上数据结构与算法,又或者说已经有封装好的库可以直接调用,例如Java中的ArrayList与LinkedList,直接调用add、remove等方法就已经可以完成插入删除等基本操作,实现业务逻辑,而无需关注其内部实现。如果说一样东西有没有用是根据用不用得上来衡量的话,那么只写业务逻辑确实没什么卵用,但是个人觉得有没有用是根据对自己有没有帮助来判断的,对自己有帮助==这个东西对我有用。

    实话说,自己一开始是因为要准备企业面试才打算学习的数据结构与算法(趁着当当网搞活动的时候买了本《数据结构与算法分析Java语言描述》,打算在寒假的时候看),期间也看过不少文章,开复先生就曾经写过一篇文章聊算法的重要性,当时就觉得懂算法的人好厉害。但真正让我开始重视数据结构与算法的是Leetcode的第一道题目TwoSum.

    给定一个数组和一个得数,返回数组中两个数字相加等于得数的这两个数字的索引
    example

    Given nums = [2, 7, 11, 15], target = 9,
    
    Because nums[0] + nums[1] = 2 + 7 = 9,
    return [0, 1].

    我的解法

    public class Solution {
        public int[] twoSum(int[] nums, int target) {
            int result[] = new int[2];
            for(int x = 0;x<nums.length;x++){
                for(int y = x+1;y<nums.length;y++){
                    if((nums[x]+nums[y])==target){
                        result[0] = x;
                        result[1] = y;
                    }
                }
            }
            return result;
        }
    }

    别人的解法

    public int[] twoSum(int[] numbers, int target) { 
        int[] result = new int[2]; 
        Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
        for (int i = 0; i < numbers.length; i++) { 
            if (map.containsKey(target - numbers[i])) { 
                result[1] = i + 1; 
                result[0] = map.get(target - numbers[i]); 
                return result; 
            } 
            map.put(numbers[i], i + 1); 
        } return result; 
    }

    虽然都可以运行,但是明显别人的解法比我的优雅的太多太多。我的想法是用两个循环穷举,而别人是用了HashMap来存储数据,并且在循环中同时进行插入和判断,时间复杂度我的是O(n2),而别人的是O(n),如果数据规模大,运行时间则相差巨大。
    可见同样的问题,不同人采取的解决方式是可以体现出差别的,这就关系到数据结构与算法

    目前对数据结构与算法的理解
    数据结构:为了解决问题采用的更有效率的数据组织方式
    算法:为了解决问题采用的更加快速的程序设计思想

    作为一个想在技术领域打拼十年的菜鸟,有必要学习数据结构与算法。讲真,这还是挺难学的,《数据结构与算法Java语言描述》这本书看了有一半,后面的还看不太懂,前面的又忘了,觉得有必要总结一下。
    网络上也有人非常详细的总结了这本书前两章的内容数据结构与算法分析(一):基础算法分析,在这里就不重复造轮子了,只总结一些想加深印象的内容。

    二、如何进行算法分析

    (一)分析前提

    计算模型:假设有无限内存的模型机做任一件简单的工作都恰好花费一个时间单位,并且不存在矩阵求逆或排序之类的想象操作。

    (二)分析重点

    1.运行时间(时间复杂度)
    影响因素:输入大小n以及所使用的算法
    2.占用内存(空间复杂度)
    影响因素:算法本身存储占用、输入输出数据占用以及算法运行过程临时占用

    (三)时间复杂度计算——大O标记法(运行时间的上界,注意简化常数项与低阶项)

    example:计算 Ni=0i3 的运行时间

    public static int sum(int n) {
          int partialSum;
           partialSum = 0;
           for(int i = 1; i <= n; i ++)
           partialSum += i * i * i;
           return partialSum;
    }

    所有的声明均不计时间
    第3行和第6行各占一个时间单元
    第5行每执行一次占用4个时间单元(两次乘法、一次加法、一次赋值),执行N次共4N个时间单元
    第4行初始化i占用1个时间单元、测试i<=n为N+1个时间单元、i++自增运算为N个时间单元,共2N+2个时间单元
    忽略调用方法和返回值的开销,共6N+4个时间单元
    故该方法是O(N)的

    快速判断法则:
    1.for循环
    一个for循环的运行时间至多是该for循环内部那些语句(包括测试)的总运行时间乘以迭代的次数
    2.嵌套的for循环
    从里向外,一组嵌套循环内部的一条语句总的运行时间为该语句的运行时间乘以该组所有的for循环的大小的乘积
    3.顺序语句
    各语句运行时间求和
    4.if/else语句
    一个if/else语的运行时间不超过 判断的运行时间+if语句/else语句中较长的运行时间

    分析的基本策略是从内部(或最深层的部分)向外展开工作的。有方法调用则首先分析方法调用;有递归过程,则具体情况具体分析

    (四)空间复杂度计算

    当算法占用空间大小不随数据量n变化而变化,其空间复杂度可记为O(1)
    当算法占用空间大小随数据量n变化而线性变化,其空间复杂度可记为O(n)

    在程序开发中,我们所指的复杂度不做特别说明的情况下,就是指时间复杂度。现在的硬件发展速度之快使得我们完全可以不用考虑算法所占的内存,通常都是用空间换取时间。加之算法的空间复杂度比较难算,所以我们都侧重于时间复杂度。

    三、数据结构与算法分析学习目标

    学习,要以解决问题为导向,因此要:
    1.了解各种数据结构的结构性质,以便遇到问题可以快速选取合适的数据结构
    2.了解各大算法的性能及应用场景,以便遇到问题可以快速选取合适的算法


    参考资料及资源站点
    《数据结构与算法分析:Java语言描述》
    数据结构与算法动态可视化中文站点
    数据结构与算法/leetcode/lintcode题解

    展开全文
  • 数据结构与算法分析经典高清珍藏版 http://download.csdn.net/detail/oyy_ou/5071561

    数据结构与算法分析经典高清珍藏版

    http://download.csdn.net/detail/oyy_ou/5071561


    展开全文
  • 数据结构与算法分析(一)

    千次阅读 2019-07-27 19:08:17
    数据结构与算法分析(一) 前言:大学生活过了一年了,这是我写的第一篇博客,惭愧惭愧,诸多不足望见谅。 数据结构 + 算法 = 程序 数据结构主要研究组织大量数据的方法,算法分析是对算法运行的时间的评估。 ...

    数据结构与算法分析(一)

    数据结构 + 算法 = 程序
    数据结构主要研究组织大量数据的方法,算法分析是对算法运行的时间的评估。

    第一章 基本概念

    第一节 数据结构

    1.1 基本术语和概念

    (1)数据(Data):是指描述客观事物的符号,是计算机可以操作的对象,能被计算机识别,并输入给计算机处理的符号或符号集合。万物皆可为数据,不止局限于数字,字符,一个图像,一段视频都是数据。

    (2)数据对象(data object):是性质相同数据元素的集合,是数据的一个子集。例如所有的视频数据可以成为一个数据对象。

    (3)数据元素(data element):是数据的基本单位。也叫结点或记录。例如一个视频。

    (4)数据项(data item):是数据的最小单位。例如视频里的每一帧。

    (5)数据结构(data structure):是数据元素之间的组织方式。

    1.2. 数据的逻辑结构

    逻辑结构(logical structure):指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。

    数据结构有四种不同的逻辑结构:

    (1)集合结构:集合中的各个元素是平等的,元素之间没有任何联系,仅是共处于同一集合。

    (2)线性结构:元素结构关系是一对一的,并且是一种先后的次序。

    (3)树形结构:元素结构关系是一对多的,并且存在父子级。

    (4)图形结构:元素结构关系是多对多的。

    1.3 数据的存储结构

    存储结构(storage structure) 也成为物理结构(physical structure),是指数据的逻辑结构在计算机中的存储形式,一般可以反映数据元素之间的逻辑关系。

    数据结构有两种不同的存储结构:

    (1)顺序存储结构:把数据元素存储在地址连续的存储单元中,数据间的逻辑关系和物理关系是一致的。

    (2)链式存储结构:把数据元素存储在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

    1.4 抽象数据类型

    抽象数据类型(abstract data type,ADT) 是一些操作的集合。描述数据类型的方法不依赖于具体实现,与存放的机器无关,与数据存储的物理结构无关,与实现操作的算法和编程语言无关,只描述数据对象集合相关操作集“是什么”,并不干涉“如何做到”。

    表ADT 栈ADT 队列ADT

    第二节 算法及性能分析

    2.1 算法

    算法(algorithm) 是一系列为特定问题而规定指令的集合。有以下特性:

    • 输入,是指算法具有零个或多个输入。

    • 输出,是指算法至少有一个或多个输出。

    • 有穷性,是指算法在执行有限的步骤之后,自动结束而不是出现无限循环,并且每一个步骤在可接受的时间内完成。

    • 确定性,是指相同输入只能有一个唯一的输出结果,不会出现二义性。

    • 可行性,是指算法每一步骤都必须可行,能够通过有限的执行次数完成。

    2.2时间复杂度

    ​ 算法的时间复杂度,也就是算法的时间量度,记作: T(n)=O(f(n))。它表示随问题规模 n的增大算法执行时间的增长率和 f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中 f(n)是问题规模 n的某个函数。

    2.2.1计算方法:

    1.用常数1取代函数中所有的常数

    2.只保留最高项

    3.最好情况时间复杂度:代码在最坏情况下执行的时间复杂度。

    常用的时间复杂度所耗费的时间从小到大依次是

    • O(1) < O(log n) < O(n) < O(nlog n) < O(n2) < O(n3) < O(n!) < O(nn)
    2.2.2 一般法则

    法则 1-----for循环

    一次for循环的运行时间至多是该for循环内语句的运行时间X循环的次数。

    for(i = 1 ; i <= n ; i++)
    {
        x = x + 1;		/* 时间复杂度为O(n) */
    }

    法则 2-----嵌套的for循环

    从里向外分析,在一组嵌套循环内部的一跳语句总的运行时间为该语句的运行时间X该组所有for循环的大小的乘积。

    for( i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
            k++;		/* 时间复杂度为O(n*n) */
    }

    法则 3-----顺序语句

    将各个语句的运行时间求和即可,其中的最大值即为运行时间。

    for(i = 1 ; i <= n ; i++)
    {
        x = x + 1;		/* 时间复杂度为O(n) */
    }
    for( i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
            k++;		/* 时间复杂度为O(n*n) */
    }
    /* 总时间复杂度为O(n*n) */

    法则 4-----while语句

    int count = 1;
    while(count < n){
    	count *= 2;
    	/*时间复杂度为 O(1) 的程序步骤序列*/
    }
    
    /* 2^x = n  时间复杂度为O(log n) */

    2.3 空间复杂度

    算法的空间复杂度是通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作: S(n)=O(f(n))S(n)=O(f(n)) S(n) = O(f(n))S(n)=O(f(n)) 。其中,n 为问题的规模, f(n)f(n) f(n)f(n) 为语句关于 n 所占存储空间的函数。

    2.4 递归:

    int F(int x)
    {
        if(x == 0)
            retuen 0;
        else 
            return 2 * F(x-1) + X * X;
    }
    1.它是否就是循环逻辑?

    答案是:虽然函数会用到这个函数本身,但是我们并没有用函数本身来定义函数的一个特定的实例。即使用F(5)来得到F(5)的值才是循环,通过F(4)来得到F(5)的值不是循环的。

    2.实现递归的基本准则:

    基准情形:递归中必须要有某些基准情形,他们不用递归就能求解。

    不断推进:对于那些需要递归求解的情形,递归调用必须总能朝着产生基准情形的方向推进。

    设计法则:假设所有的递归调用都能运行。

    合成效益法则:在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作。

    展开全文
  • 这段时间,该开始数据结构与算法分析的学习了。跟以前一样,学习同时整理成博文是个不错的学习方式,因此,后面一段时间将对数据结构与算法分析进行讲解学习,希望有兴趣的同学一起讨论学习。数据结构,即组织大量...

    这段时间,该开始数据结构与算法分析的学习了。跟以前一样,学习同时整理成博文是个不错的学习方式,因此,后面一段时间将对数据结构与算法分析进行讲解学习,希望有兴趣的同学一起讨论学习。


    数据结构,即组织大量数据的方法;算法分析,即算法运行时间的估计。很多时候,写出一个工作程序并不够,如果这个程序需要在巨大的数据集上运行,那么运行时间就成为了重要的问题。

    1 级数

    (1) i=1i2i=2
    (2) i=1NikNk+1|k+1|,k1
    (3)调和数 HN=i=1N1ilogeN

    2 证明数据结构分析中的结论的常用方法

    (1)归纳法证明
    (2)证法证明

    3 递归的基本法则

    当一个函数用它自己来定义时就称为递归。
    (1)基准情形
    必须总要有某些基准情形,它无需递归就能解出
    (2)不断推进
    对于那些需要递归求解的情形,每一次递归调用都必须要使状况朝向一种基准情形推进
    (3)设计法则
    当设计递归程序时一般没有必要知道簿记管理的细节,不必试图追踪大量的递归调用
    (4)合法效益法则
    在求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作,如使用递归计算斐波那契数之类简单数学函数的值就不高效

    展开全文
  • 数据结构与算法分析—C语言描述 pdf

    千次阅读 2018-11-14 18:41:25
    数据结构与算法分析—C语言描述 pdf
  • 数据结构与算法分析算法分析

    千次阅读 2018-09-21 21:17:54
     算法4:只对数据进行一次扫描,一旦A[i]读入并被处理,它就不再需要被记忆 int MaxSequenceMax(const int A[],int N){ int ThisSum,MaxSum,j; ThisSum=MaxSum=0; for(j=0;j;j++){ ThisSum+=A[j]; if...
  • 数据结构与算法分析:C语言描述(高清扫描第二版)

    千次下载 热门讨论 2013-02-19 10:00:39
    首先向作者和译者致敬 感谢他们的努力 当然还有扫描者 不用说了 是很经典的书 我比较喜欢C语言版的 而且这个是我见过的比较清晰的一个版本 不妨下来看看 不喜欢再删呗
  • 数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss 可用于自学数据结构与算法,数据结构与算法分析对于C++的学习至关重要,应该努力掌握好! 百度网盘: 链接:...
  • 数据结构与算法分析Java版pdf

    千次阅读 2018-02-05 20:49:00
    下载地址:网盘下载本书是国外数据结构与算法分析方面...本书把算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面、缜密严格,并细致讲解精心构造程序的方法。 转载于:https://www.c...
  • 数据结构与算法分析—C语言描述 高清版

    千次下载 热门讨论 2008-04-05 21:01:56
    本书是国外数据结构与算法分析方面的标准教材,介绍了数据结构(大量数据的组织方法)以及算法分析(算法运行时间的估算)。本书的编写目标是同时讲授好的程序设计和算法分析技巧,使读者可以开发出具有最高效率的...
  • 数据结构与算法分析:C语言描述(原书第2版)是《data structures and algorithm analysis in c》一书第2版的简体中译本。原书曾被评为20世纪顶尖的30部计算机著作之一,作者mark allen weiss在数据结构算法分析...
  • 数据结构与算法分析(C++版) 第二版 张铭 等译 A Pratical Introduction to Data Structures and Algorithm Analysis(Second Edition) 由于官网上面说了,旧的版本的教材和资料已经不再提供,所以如下的资源...
  • 数据结构与算法分析:C语言描述(原书第2版)》内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度...
  • 最近在慢慢写数据结构与算法分析(C语言描述)的课后习题答案。 地址:https://github.com/seineo/Data-Structures-and-Algorithm-Analysis-in-C ...
  • 数据结构与算法分析:C语言描述(原书第2版)》内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度...
  • 数据结构与算法分析(C++语言版)张琨答案———第一章 资源来自网络,有错误请联系我更正(772173629),侵权请联系我删除,谢谢!
  • 1.数据结构算法解决是“如何让计算机更快时间、更省空间的解决问题”。 2.因此需从执行时间和占用空间两个维度来评估数据结构算法的性能。 3.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为...
  • 数据结构与算法分析 Java语言描述 第三版 【美】马克·艾伦·维斯 本书目标:  本书新的Java版论述数据结构——组织大量数据的方法,以及算法分析——算法运行时间的估计。随着计算机的速度越来越快,对于能够...
  • 数据结构与算法分析 C语言描述(原书第2版)下载链接: https://pan.baidu.com/s/1VrsrvtCujFHbseuJjXJACA 提取码获取方式:关注下面微信公众号,回复关键字: 1136
  • 数据结构与算法分析(一)基础

    千次阅读 2019-07-19 18:32:45
    什么是数据结构?什么是算法? 广义:数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。 例子:图书馆存储图书,为了方便查找,图书管理员一般会将书籍分门别类进行存储。按照一定规律编号,就是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 593,596
精华内容 237,438
关键字:

数据结构与算法分析

数据结构 订阅