没有合适的资源?快使用搜索试试~ 我知道了~
首页编程与解谜学习算法:实践与探索
编程与解谜学习算法:实践与探索
需积分: 33 28 下载量 57 浏览量
更新于2024-07-17
收藏 5.14MB PDF 举报
"《通过编程与解谜学习算法》是一本由Alexander Kulikov和Pavel Pevzner合著的教材,于2018年由Leanpub出版。这本书是Coursera上热门数据结构与算法在线专精课程以及edX上的在线微硕士项目的核心资源。自2016年在线课程上线以来,已有数十万学生参与,通过解决书中详尽的编程挑战和算法谜题来深化理解。 该书强调实践学习,将理论与实际编程技能相结合,涵盖了包括C、C++、Java、JavaScript、Python、Scala、C#、Haskell、Ruby和Rust(后四种语言仅在Coursera平台上支持)在内的多种编程语言。编程挑战旨在引导读者在这些语言中实现遇到的算法,让学生在实践中掌握和巩固理论知识。 此外,书中还设计了算法谜题,以创新的方式激发学生的思维,鼓励他们独立发明算法。这些谜题不仅增加了学习的乐趣,即使在解决过程中遇到困难,也能帮助学生更深入地理解算法的美妙和力量。通过这种方式,学生们可以在自我探索和互动中以适合自己的节奏学习,与其他来自世界各地的优秀学生共同进步。 无论是想要提升编程技能还是深入了解算法原理,这本书都是一个理想的工具。它不仅适合初学者,也适合有经验的专业人士进一步深化对算法的理解。参与Coursera或edX的在线课程,结合书中的丰富资源,将极大地推动你在算法学习之旅中的成长。"
资源详情
资源推荐
What Lies Ahead xv
What Lies Ahead
Watch for our future editions that will cover the following topics.
Data Structures
Arrays and Lists
Priority Queues
Disjoint Sets
Hash Tables
Binary Search Trees
Algorithms on Graphs
Graphs Decomposition
Shortest Paths in Graphs
Minimum Spanning Trees
Shortest Paths in Real Life
Algorithms on Strings
Pattern Matching
Suffix Trees
Suffix Arrays
Burrows–Wheeler Transform
Advanced Algorithms and Complexity
Flows in Networks
Linear Programmings
NP-complete Problems
Coping with NP-completeness
Streaming Algorithms
xvi Meet the Authors
Meet the Authors
Alexander S. Kulikov is a senior research fellow
at Steklov Mathematical Institute of the Russian
Academy of Sciences, Saint Petersburg, Russia and
a lecturer at the Department of Computer Science and
Engineering at University of California, San Diego,
USA. He also directs the Computer Science Center in
Saint Petersburg that provides free advanced computer
science courses complementing the standard univer-
sity curricula. Alexander holds a Ph. D. from Steklov
Mathematical Institute. His research interests include
algorithms and complexity theory. He co-authored
online courses “Data Structures and Algorithms” and
“Introduction to Discrete Mathematics for Computer
Science” that are available at Coursera and edX.
Pavel Pevzner is Ronald R. Taylor Professor of Com-
puter Science at the University of California, San
Diego. He holds a Ph. D. from Moscow Institute
of Physics and Technology, Russia and an Honorary
Degree from Simon Fraser University. He is a Howard
Hughes Medical Institute Professor (2006), an As-
sociation for Computing Machinery Fellow (2010),
an International Society for Computational Biology
Fellow (2012), and a Member of the the Academia
Europaea (2016). He has authored the textbooks
Computational Molecular Biology: An Algorithmic
Approach (2000), An Introduction to Bioinformatics
Algorithms (2004) (jointly with Neil Jones), and Bioin-
formatics Algorithms: An Active Learning Approach
(2014) (jointly with Phillip Compeau). He co-authored
online courses “Data Structures and Algorithms”,
“Bioinformatics”, and “Analyze Your Genome!” that
are available at Coursera and edX.
Meet Our Online Co-Instructors xvii
Meet Our Online Co-Instructors
Daniel Kane is an associate professor at the University
of California, San Diego with a joint appointment
between the Department of Computer Science and
Engineering and the Department of Mathematics. He
has diverse interests in mathematics and theoretical
computer science, though most of his work fits into the
broad categories of number theory, complexity theory,
or combinatorics.
Michael Levin is an Associate Professor at the
Computer Science Department of Higher School of
Economics, Moscow, Russia and the Chief Data Sci-
entist at the Yandex.Market, Moscow, Russia. He also
teaches Algorithms and Data Structures at the Yandex
School of Data Analysis.
Neil Rhodes is a lecturer in the Computer Science and
Engineering department at the University of Califor-
nia, San Diego and formerly a staff software engineer
at Google. Neil holds a B.A. and M.S. in Computer
Science from UCSD. He left the Ph.D. program at
UCSD to start a company, Palomar Software, and spent
fifteen years writing software, books on software de-
velopment, and designing and teaching programming
courses for Apple and Palm. He’s taught Algorithms,
Machine Learning, Operating Systems, Discrete Math-
ematics, Automata and Computability Theory, and
Software Engineering at UCSD and Harvey Mudd
College in Claremont, California.
xviii Acknowledgments
Acknowledgments
This book was greatly improved by the efforts of a large number of indi-
viduals, to whom we owe a debt of gratitude.
Our co-instructors and partners in crime Daniel Kane, Michael Levin,
and Neil Rhodes invested countless hours in the development of our on-
line courses at Coursera and edX platforms.
Hundreds of thousands of our online students provided valuable feed-
back that led to many improvements in our MOOCs and this MOOC book.
In particular, we are grateful to the mentors of the Algorithmic Toolbox
class at Coursera: Ayoub Falah, Denys Diachenko, Kishaan Jeeveswaran,
Irina Pinjaeva, Fernando Gonzales Vigil Richter, and Gabrio Secco.
We thank our colleagues who helped us with preparing programming
challenges: Maxim Akhmedov, Roman Andreev, Gleb Evstropov, Niko-
lai Karpov, Sergey Poromov, Sergey Kopeliovich, Ilya Kornakov, Gennady
Korotkevich, Paul Melnichuk, and Alexander Tiunov.
We are grateful to Anton Konev for leading the development of inter-
active puzzles as well as Anton Belyaev and Kirill Banaru for help with
some of the puzzles.
We thank Alexey Kladov and Alexander Smal for help with the “Good
Programming Practices” section of the book.
Randall Christopher brought to life our idea for the textbook cover.
Finally, our families helped us preserve our sanity when we were work-
ing on this MOOC book.
A. K. and P. P.
Saint Petersburg and San Diego
December 2017
Chapter 1: Algorithms and Complexity
This book presents programming challenges that will teach you how to
design and implement algorithms. Solving a programming challenge is
one of the best ways to understand an algorithm’s design as well as to
identify its potential weaknesses and fix them.
1.1 What Is an Algorithm?
Roughly speaking, an algorithm is a sequence of instructions that one
must perform in order to solve a well-formulated problem. We will spec-
ify problems in terms of their inputs and their outputs, and the algorithm
will be the method of translating the inputs into the outputs. A well-
formulated problem is unambiguous and precise, leaving no room for mis-
interpretation.
After you designed an algorithm, two important questions to ask are:
“Does it work correctly?” and “How much time will it take?” Certainly
you would not be satisfied with an algorithm that only returned correct
results half the time, or took 1000 years to arrive at an answer.
1.2 Pseudocode
To understand how an algorithm works, we need some way of listing the
steps that the algorithm takes, while being neither too vague nor too for-
mal. We will use pseudocode, a language computer scientists often use
to describe algorithms. Pseudocode ignores many of the details that are
required in a programming language, yet it is more precise and less am-
biguous than, say, a recipe in a cookbook.
1.3 Problem Versus Problem Instance
A problem describes a class of computational tasks. A problem instance is
one particular input from that class. To illustrate the difference between
a problem and an instance of a problem, consider the following example.
You find yourself in a bookstore buying a book for $4.23 which you pay
1
剩余137页未读,继续阅读
loveinsilence
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- zlib-1.2.12压缩包解析与技术要点
- 微信小程序滑动选项卡源码模版发布
- Unity虚拟人物唇同步插件Oculus Lipsync介绍
- Nginx 1.18.0版本WinSW自动安装与管理指南
- Java Swing和JDBC实现的ATM系统源码解析
- 掌握Spark Streaming与Maven集成的分布式大数据处理
- 深入学习推荐系统:教程、案例与项目实践
- Web开发者必备的取色工具软件介绍
- C语言实现李春葆数据结构实验程序
- 超市管理系统开发:asp+SQL Server 2005实战
- Redis伪集群搭建教程与实践
- 掌握网络活动细节:Wireshark v3.6.3网络嗅探工具详解
- 全面掌握美赛:建模、分析与编程实现教程
- Java图书馆系统完整项目源码及SQL文件解析
- PCtoLCD2002软件:高效图片和字符取模转换
- Java开发的体育赛事在线购票系统源码分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功