We may earn an affiliate commission when you visit our partners.
Course image
Prof. Ming Zhang 张铭

学习了基本的数据结构后,我们已经可以用程序来解决现实中的一些问题了。但是,怎样提升程序在运行效率呢?

如何快速地把图书按序号从小到大整理好?如何通过一个ID编号在数据库中高效地查找相对应的信息?如何迅速找到所有内容中含有“数据结构”的文档?《高级数据结构与算法》将通过使用高级的数据结构和高效的算法,让你学会如何解决这些对运行时间要求比较严格的问题。

高级数据结构和算法能够根据实际情况,满足一些复杂问题对数据规模、运行时间的要求,帮助我们更有效地解决问题。当我们面对实际问题的时候,高级数据结构和算法让我们有更广泛的空间,选择出与问题本身最为契合的数据结构,并利用相关算法来提升运行效率。

完成这门课之时,你将掌握多维数组、广义表、Trie树、AVL树、伸展树等高级数据结构,并结合内排序、外排序、检索、索引有关的算法,高效地解决现实生活中一些比较复杂的应用问题。合理使用这些高级数据结构和相关算法是程序运行效率的关键因素,学好这门课会让你在之后的计算机专业课程以及项目设计中更得心应手,同时也将让你站在更高的角度去理解问题、设计程序。

Enroll now

What's inside

Syllabus

欢迎来到高级数据结构与算法
学习了基本的数据结构后,我们已经可以用程序来解决现实中的一些问题了。但是,怎样提升程序在运行效率呢? 如何快速地把图书按序号从小到大整理好?如何通过一个ID编号在数据库中高效地查找相对应的信息?如何迅速找到所有内容中含有“数据结构”的文档?《高级数据结构与算法》将通过使用高级的数据结构和高效的算法,让你学会如何解决这些对运行时间要求比较严格的问题。 高级数据结构和算法能够根据实际情况,满足一些复杂问题对数据规模、运行时间的要求,帮助我们更有效地解决问题。当我们面对实际问题的时候,高级数据结构和算法让我们有更广泛的空间,选择出与问题本身最为契合的数据结构,并利用相关算法来提升运行效率。 完成这门课之时,你将掌握多维数组、广义表、Trie树、AVL树、伸展树等高级数据结构,并结合内排序、外排序、检索、索引有关的算法,高效地解决现实生活中一些比较复杂的应用问题。合理使用这些高级数据结构和相关算法是程序运行效率的关键因素,学好这门课会让你在之后的计算机专业课程以及项目设计中更得心应手,同时也将让你站在更高的角度去理解问题、设计程序。PS:我们这门课程一直处在不断地建设与优化当中,吸取了很多以往课程的经典视频,所以如果你看到视频中出现了不同课程的名字,也不要惊讶哦,因为你正在集百家所长:)
Read more
内排序(上)
生活中,排序操作无处不在,列队出操的时候,需要让同学们从矮到高依次站好,举行运动会的时候,会把每位运动员的成绩从高到低排序。在计算机的存储结构中,分为内存和外存,前者相对后者来说速度快、容量小,因此,当整个排序过程中所有的记录都可以直接放入内存中时,我们称之为内排序。可以按照什么策略来进行排序?每种排序算法的时间代价是多少?这一模块中,你将会学到三种类型的排序算法:插入排序、选择排序和交换排序,并了解到各个算法的稳定性和时间代价。重点:排序问题的基本概念,时间和空间复杂度分析(比较次数和移动次数,一个swap操作是3次移动);直接插入排序、Shell排序、直接选择排序、堆排序、冒泡排序、快速排序的实现。难点:快速排序的实现及其优化、时间复杂度分析。PS:我们这门课程一直处在不断地建设与优化当中,吸取了很多以往课程的经典视频,所以如果你看到视频中出现了不同课程的名字,也不要惊讶哦,因为你正在集百家所长:)
内排序(下)
有些算法时间代价太大?有的时候可以根据数据本身的特性,或是排序的特殊要求,调整排序的策略。例如,现在要将一叠试卷按得分从高到低排序,假设老师只给了“合格”、“不合格”两种分数,相信你立马就能整理好。原因就在于你并不需要再去整理所有“合格”试卷的相对次序了。本模块中,你将会学习到归并排序、分配排序和索引排序,并了解它们各自的基本思想、适用范围和时间代价。 重点:归并排序及其优化、桶式排序、静态/链式基数排序的实现、地址索引排序的结果整理。 难点:归并排序的实现、排序问题的下限的决策树分析方法(了解即可)。
外排序
当待处理的数据对象非常多,以至于内存容纳不下所有数据时,如果我们仍旧按照内排序的算法进行排序,大量的I/O会使得时间代价非常大,那应该怎么办呢?一般我们需要将数据文件分成若干段,每次将一段放入内存中进行排序,得到一系列的顺串,最后通过逐趟归并顺串,形成对整个数据文件的排序文件。在这一模块中,你将学到如何让初始文件形成尽可能长的初始顺串、如何通过增加每次参与归并的顺串个数,来减少对数据扫描的趟数,从而减少访问外存次数提高排序效率。 重点:置换选择算法、二路归并算法、赢者树算法的基本思想和实现。 难点:败者树的类定义及其成员函数的实现。
检索
检索是一种常见的、也是必不可少的运算。在数据量很小的时候,顺序检索就可以快速找到目标,但当数据量很大的时候,顺序检索的效率就很差了。那如何在这种情况下进行检索呢?生活中,比如我们要查一个英文单词在字典的哪一页,我们可以根据拼写,判断这个单词是在当前页之前还是之后;又比如我们也可以问一个“天才”,他能直接告诉我们那个词在第几页。那如何找到、创造这样的“天才”呢?通过本模块的学习,除了检索的基本知识、基于线性表的检索方法、对集合的检索外,你还会学习到一种可以根据关键码值直接找到记录存储地址的方法——基于散列表的检索。 重点:检索最重要的度量是平均检索长度ASL。检索效率的分析需要注意成功检索和失败检索两种情况。散列函数的选择、冲突和聚集的解决方案(开散列、闭散列),散列方法的实现及其效率分析。 难点:负载因子、散列函数的选择、闭散列方法中的双散列。
索引
索引相当于图书馆的卡片目录,有了卡片目录之后,就不需要在整个书库中搜索某一本书,而可以在卡片目录中检索到该书的位置。有了索引技术之后,我们可以高效地进行检索、插入、删除等操作。如何来实现索引?如何动态地调整索引?如何提高在索引中的检索效率?通过这一模块的学习,你会了解静态索引、倒排索引的相关知识,B树B+树是如何维护的,红黑树又是通过怎样的调整,提高增删和检索效率的。 重点:要充分理解索引的意义。也就是(key, pointer)。基于属性的倒排、对正文文件的倒排、B/B+树的概念及相关操作、红黑树的定义和数学性质、红黑树的插入/删除操作。 难点:注意多级索引的建立是动态的,在整个建索引的过程中都要保持结构,并且保持性能。B/B+树要注意阶(子结点数)和关键码数目的限制,另外要注意插入时候的分离,删除时候的借关键码、合并结点。B树的隐含指针(指向key本身在外部主文件中的地址)。红黑树插入算法首先是采用BST的方法把结点插入到位,然后注意调整,尤其是“红红”冲突的解决。
高级线性结构
生活中,很多事物是有层次结构关系的,如果只是用线性表之类的简单数据结构来描述,就会丢失一些重要的信息。另一方面,为了支持动态数据结构,操作系统需要对内存进行动态地分配和回收,但也因此会产生如“碎片问题”、“内存泄露”等问题。如何利用高级数据结构来描述实际问题?如何实现相应的高级数据结构?如何管理内存分配,使内存利用率更高?通过本模块的学习,你将会了解多维数组、广义表这两个高级数据结构的实现,以及多种内存动态分配和回收的技术。 重点:特殊矩阵和稀疏矩阵的计算,了解索引下标的规律(例如,特殊矩阵多维到一维下标的相互映射)。广义表的存储结构可以看成是树和图结构的综合,理解和运用广义表的 head(), tail()两个函数。内存管理系统可以看成线性结构的应用。 难点:稀疏矩阵的十字链表存储有很多应用。广义表的结构和遍历,注意广义表的线性表顺序结构、树层次结构、图mark标记的结合
高级树形结构
你是不是发现,二叉搜索树的运行效率并没有想象中那么好?这是因为二叉搜索树是一种基于对象空间分解的数据结构,即关键码范围的分解是由树中的对象决定的,并受到关键码输入的影响,因此就有可能变得非常不平衡,例如退化为线性结构。那如何来改进二叉搜索树呢?在这一模块中,你将学到Trie树、AVL树、伸展树的基本思想以及他们在具体进行插入删除操作时,是如何调整树的结构以保持平衡的。重点:Trie树的概念及其改进、AVL树的概念及插入删除操作、伸展树的概念及其旋转操作。
期末考试,向毕业项目出发!
祝贺大家完成了《高级数据结构与算法》这门课的所有教学模块,只要顺利通过期末考试,你就向成为优秀的程序设计人员的梦想又迈进了一步哦!如果你同时也完成了《程序设计与算法》专项课程的其他部分,那么恭喜你,你已经由轻叩计算机世界大门的初学者,成长到了一名优秀的准程序员啦!快来通过期末考试,向我们的毕业项目出发,用实际的企业开发案例证明你的实力吧!

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
深入讲解高级数据结构,如多维数组、广义表、Trie树、AVL树、伸展树,提升解决问题的能力。
涵盖检索、索引等算法,提高程序运行效率,满足复杂问题对数据规模和运行时间的要求。
Taught by Prof. Ming Zhang 张铭, who has extensive experience in data structures and algorithms
适合具有数据结构基础,想进一步提升编程能力的学习者。
通过课程学习,可以有效提高程序运行效率,提升实际问题解决能力。
课程提供了大量的代码示例和实践练习,帮助学习者巩固知识,提升动手能力。

Save this course

Save 高级数据结构与算法 to your list so you can find it easily later:
Save

Reviews summary

Data structures and algorithms mastery

Students enjoyed this course, finding the content well-suited for those wanting to enhance their programming skills. Some students noted that the course could be improved by offering clearer explanations. Overall, most students found this course to be a valuable learning experience.
Highly educational for those looking to improve their programming skills.
"非常经典的课程!值得好好学习!"
Unclear explanations may be challenging for some.
"讲的很不清晰,我连作业都不会做!"

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in 高级数据结构与算法 with these activities:
练习习题和LeetCode题目
通过解决习题和LeetCode题目,你可以巩固所学知识并提高解决问题的能力。
Show steps
  • 完成课后习题和编程练习
  • 选择难度适中的LeetCode题目进行练习
帮助其他同学学习高级数据结构
通过帮助其他同学学习,可以巩固自己的知识,加深对高级数据结构的理解。
Show steps
  • 主动回答其他同学的问题,并提供帮助。
  • 参与讨论区,帮助其他同学解决疑难问题。
  • 组织学习小组,与其他同学一起复习和练习。
Show all two activities

Career center

Learners who complete 高级数据结构与算法 will develop knowledge and skills that may be useful to these careers:
Software Engineer
Software Engineers design, develop, test, deploy, maintain, and manage software applications. This course would be helpful for those who wish to enter a career of Software Engineering. It provides knowledge and practice of data structures and algorithms, which are essential for building efficient and effective software. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in software engineering.
Quantitative Analyst
Quantitative Analysts use mathematical and statistical methods to analyze and interpret data, and make informed decisions. This course may be useful for those who wish to enter a career as a Quantitative Analyst. It provides knowledge and practice of data structures and algorithms, which are essential for managing and analyzing large datasets. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in quantitative finance.
Data Scientist
Data Scientists use scientific methods to extract knowledge and insights from data, and solve real-world problems. This course may be useful for those who wish to enter a career as a Data Scientist. It provides knowledge and practice of data structures and algorithms, which are essential for managing and analyzing large datasets. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in data science.
Information Security Analyst
Information Security Analysts protect computer networks and systems from unauthorized access, use, disclosure, disruption, modification, or destruction. This course may be useful for those who wish to enter a career as an Information Security Analyst. It provides knowledge and practice of data structures and algorithms, which are essential for building secure software and systems. The course focuses on advanced data structures and algorithms, such as AVL trees and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in information security.
Computer Architect
Computer Architects design and develop the hardware and software systems that make up computers. This course may be useful for those who wish to enter a career as a Computer Architect. It provides knowledge and practice of data structures and algorithms, which are essential for designing and implementing efficient computer systems. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in computer hardware architecture.
Network Engineer
Network Engineers design, build, and maintain computer networks. This course may be useful for those who wish to enter a career as a Network Engineer. It provides knowledge and practice of data structures and algorithms, which are essential for designing and implementing efficient networks. The course focuses on advanced data structures and algorithms, such as AVL trees and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in network engineering.
DevOps Engineer
DevOps Engineers work to improve the collaboration and communication between software developers and IT operations professionals. This course may be useful for those who wish to enter a career as a DevOps Engineer. It provides knowledge and practice of data structures and algorithms, which are essential for building and managing software systems. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in DevOps.
Algorithm Engineer
Algorithms Engineers develop, analyze, and optimize algorithms. This course would be helpful for those who wish to enter a career as an Algorithm Engineer. It provides knowledge and practice of data structures and algorithms, which are essential for developing efficient and effective algorithms. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in algorithm engineering.
Backend Developer
Backend Developers design and develop the server-side of web applications. This course may be useful for those who wish to enter a career as a Backend Developer. It provides knowledge and practice of data structures and algorithms, which are essential for designing and implementing efficient backend systems. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in backend development.
Cloud Engineer
Cloud Engineers design and manage cloud computing systems. This course may be useful for those who wish to enter a career as a Cloud Engineer. It provides knowledge and practice of data structures and algorithms, which are essential for designing and implementing efficient cloud systems. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in cloud engineering.
System Administrator
System Administrators maintain and repair computer systems and networks. This course may be useful for those who wish to enter a career as a System Administrator. It provides knowledge and practice of data structures and algorithms, which are essential for managing and maintaining computer systems. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in system administration.
IT Consultant
IT Consultants help organizations improve their use of information technology. This course may be useful for those who wish to enter a career as an IT Consultant. It provides knowledge and practice of data structures and algorithms, which are essential for analyzing and solving IT problems. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in IT consulting.
Cybersecurity Analyst
Cybersecurity Analysts protect computer networks and systems from unauthorized access, use, disclosure, disruption, modification, or destruction. This course may be useful for those who wish to enter a career as a Cybersecurity Analyst. It provides knowledge and practice of data structures and algorithms, which are essential for building secure software and systems. The course focuses on advanced data structures and algorithms, such as AVL trees and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in cybersecurity.
Database Administrator
Database Administrators maintain and manage databases. This course may be useful for those who wish to enter a career as a Database Administrator. It provides knowledge and practice of data structures and algorithms, which are essential for designing and implementing efficient databases. The course focuses on advanced data structures and algorithms, such as Trie trees, AVL trees, and 伸展树, which are not typically covered in introductory computer science courses. This makes the course particularly relevant for those who wish to specialize in database administration.
Computer Programmer
Computer Programmers design, develop, test, deploy, and maintain computer software. This course may be useful for those who wish to enter a career as a Computer Programmer. It provides knowledge and practice of data structures and algorithms, which are essential for building efficient and effective software. The course focuses on advanced data structures and algorithms, such as AVL trees and 伸展树, which are not typically covered in introductory computer science courses.

Reading list

We've selected nine books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in 高级数据结构与算法.
中文经典教材《算法导论》。它涵盖了算法的基本原则和各种数据结构,为学习算法提供了一个扎实的基础。
This classic textbook on algorithms provides a comprehensive and in-depth treatment of the subject, making it an excellent resource for students who want to learn more about the theoretical foundations of algorithms.
这是一本经典的算法教材,全面介绍了各种算法的设计、分析和实现,对于理解高级数据结构和算法的原理和应用非常有帮助。另外,书中还提供了丰富的习题和练习,可以帮助巩固对所学知识的理解。
Provides a comprehensive overview of data structures and algorithms, making it a valuable resource for students who want to gain a deeper understanding of the concepts covered in this course.
This textbook provides a comprehensive overview of data structures and algorithms in Java, making it a good choice for students who want to learn how to implement these concepts in code.
This textbook provides a comprehensive overview of data structures and algorithms in C++, making it a good choice for students who want to learn how to implement these concepts in code.
This textbook provides a comprehensive overview of data structures and algorithms in JavaScript, making it a good choice for students who want to learn how to implement these concepts in code.
Is written in Python, the same language used in this course, making it very easy to understand and apply the concepts and techniques discussed in the course.
This textbook provides a clear and concise introduction to algorithms, making it a good choice for students who are new to the subject.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to 高级数据结构与算法.
数据结构基础
Most relevant
计算机系统基础(一) :程序的表示、转换与链接
Most relevant
数据结构和算法 Data Structures and Algorithms
Most relevant
算法设计与分析 Design and Analysis of Algorithms
Most relevant
Data Structures and Algorithms (I)
Most relevant
生物信息学: 导论与方法
Most relevant
Data Structures and Algorithm Design Part II |...
Most relevant
用Python玩转数据 Data Processing Using Python
Most relevant
离散数学
Most relevant
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser