Cart
Free US shipping over $10
Proud to be B-Corp

Introduction to Computational Thinking Thomas Mailund

Introduction to Computational Thinking By Thomas Mailund

Introduction to Computational Thinking by Thomas Mailund


$81.69
Condition - New
Only 2 left

Introduction to Computational Thinking Summary

Introduction to Computational Thinking: Problem Solving, Algorithms, Data Structures, and More by Thomas Mailund

Learn approaches of computational thinking and the art of designing algorithms. Most of the algorithms you will see in this book are used in almost all software that runs on your computer.

Learning how to program can be very rewarding. It is a special feeling to seeing a computer translate your thoughts into actions and see it solve your problems for you. To get to that point, however, you must learn to think about computations in a new way-you must learn computational thinking.

This book begins by discussing models of the world and how to formalize problems. This leads onto a definition of computational thinking and putting computational thinking in a broader context. The practical coding in the book is carried out in Python; you'll get an introduction to Python programming, including how to set up your development environment.

What You Will Learn

  • Think in a computational way
  • Acquire general techniques for problem solving
  • See general and concrete algorithmic techniques
  • Program solutions that are both computationally efficient and maintainable

Who This Book Is For

Those new to programming and computer science who are interested in learning how to program algorithms and working with other computational aspects of programming.

About Thomas Mailund

Thomas Mailund, PhD is an associate professor in bioinformatics at Aarhus University, Denmark. He has a background in math and computer science, including experience programming and teaching in the C, Python and R programming languages. For the last decade, his main focus has been on genetics and evolutionary studies, particularly comparative genomics, speciation, and gene flow between emerging species.

Table of Contents

1 Introduction 1Models of the world and formalising problems . . 4What is computational thinking? . . . . . . . . . 6Computational thinking in a broader context . . . 12What is to come . . . . . . . . . . . . . . . . . . 152 Introducing Python programming 19Obtaining Python . . . . . . . . . . . . . . . . . 20Running Python . . . . . . . . . . . . . . . . . . 22Expressions in Python . . . . . . . . . . . . . . . 22Logical (or boolean) expressions . . . . . . . . . . 26Variables . . . . . . . . . . . . . . . . . . . . . . 30Working with strings . . . . . . . . . . . . . . . . 32Lists . . . . . . . . . . . . . . . . . . . . . . . . 36Tuples . . . . . . . . . . . . . . . . . . . . . . . 41iiiSets and dictionaries . . . . . . . . . . . . . . . . 42Input and output . . . . . . . . . . . . . . . . . . 44Conditional statements (if statements) . . . . . . 47Loops (for and while) . . . . . . . . . . . . . . . 50Using modules . . . . . . . . . . . . . . . . . . . 543 Introduction to algorithms 57Designing algorithms . . . . . . . . . . . . . . . 62Exercises for sequential algorithms . . . . . . . . 81Exercises on lists . . . . . . . . . . . . . . . . . . 874 Algorithmic eciency 95The RAM model of a computer and its primitiveoperations . . . . . . . . . . . . . . . . . . 97Types of eciency . . . . . . . . . . . . . . . . . 107Asymptotic running time and big-Oh notation . . 116Empirically validating an algorithms running time 1355 Searching and sorting 141Searching . . . . . . . . . . . . . . . . . . . . . . 142Sorting . . . . . . . . . . . . . . . . . . . . . . . 147Generalising searching and sorting . . . . . . . . 182How computers represent numbers . . . . . . . . 1866 Functions 197Parameters and local and global variables . . . . . 203Side eects . . . . . . . . . . . . . . . . . . . . . 210Returning from a function . . . . . . . . . . . . . 215Higher order functions . . . . . . . . . . . . . . . 221Functions vs function instances . . . . . . . . . . 227Default parameters and keyword arguments . . . 230Generalising parameters . . . . . . . . . . . . . . 234Exceptions . . . . . . . . . . . . . . . . . . . . . 239Writing your own Python modules . . . . . . . . 2517 Inner functions 253A comparison function for a search algorithm . . 256Counter function . . . . . . . . . . . . . . . . . . 261Apply . . . . . . . . . . . . . . . . . . . . . . . . 265Currying functions . . . . . . . . . . . . . . . . . 269Function composition . . . . . . . . . . . . . . . 274Thunks and lazy evaluation . . . . . . . . . . . . 276Decorators . . . . . . . . . . . . . . . . . . . . . 281Eciency . . . . . . . . . . . . . . . . . . . . . . 2888 Recursion 291Denitions of recursion . . . . . . . . . . . . . . 291Recursive functions . . . . . . . . . . . . . . . . 293Recursion stacks . . . . . . . . . . . . . . . . . . 297Recursion and iteration . . . . . . . . . . . . . . 307Tail-calls . . . . . . . . . . . . . . . . . . . . . . 316Continuations . . . . . . . . . . . . . . . . . . . 324Continuations, thunks and trampolines . . . . . . 3359 Divide and conquer and dynamic programming 343Divide and conquer running times . . . . . . . . 355Dynamic programming . . . . . . . . . . . . . . 371Representing oating point numbers . . . . . . . 39210 Hidden Markov models 399Probabilities . . . . . . . . . . . . . . . . . . . . 399Conditional probabilities and dependency graphs . 410Markov models . . . . . . . . . . . . . . . . . . . 412Hidden Markov models . . . . . . . . . . . . . . 421Forward algorithm . . . . . . . . . . . . . . . . . 425Viterbi algorithm . . . . . . . . . . . . . . . . . . 43311 Data structures, objects and classes 439Classes . . . . . . . . . . . . . . . . . . . . . . . 441Exceptions and classes . . . . . . . . . . . . . . . 448Methods . . . . . . . . . . . . . . . . . . . . . . 453Magical methods . . . . . . . . . . . . . . . . . . 460Class variables . . . . . . . . . . . . . . . . . . . 464Objects, classes, meta-classes, and attributes . . . 471Return of the decorator . . . . . . . . . . . . . . 494Polymorphism . . . . . . . . . . . . . . . . . . . 500Abstract data structures . . . . . . . . . . . . . . 50412 Class hierarchies and inheritance 507Inheritance and code reuse . . . . . . . . . . . . 516Multiple inheritance . . . . . . . . . . . . . . . . 524Mixins . . . . . . . . . . . . . . . . . . . . . . . 53213 Sequences 537Sequences . . . . . . . . . . . . . . . . . . . . . 538Linked lists sequences . . . . . . . . . . . . . . . 540Doubly linked lists . . . . . . . . . . . . . . . . . 560A word on garbage collection . . . . . . . . . . . 579Iterators . . . . . . . . . . . . . . . . . . . . . . 587Python iterators and other interfaces . . . . . . . 590Generators . . . . . . . . . . . . . . . . . . . . . 59814 Sets 607Sets with builtin lists . . . . . . . . . . . . . . . . 612Linked lists sets . . . . . . . . . . . . . . . . . . . 618Search trees . . . . . . . . . . . . . . . . . . . . 620Hash table . . . . . . . . . . . . . . . . . . . . . 648Dictionaries . . . . . . . . . . . . . . . . . . . . 66315 Red-black search trees 669A persistent recursive solution . . . . . . . . . . . 670An iterative solution . . . . . . . . . . . . . . . . 71216 Stacks and queues 739Building stacks and queues from scratch . . . . . 745Expression stacks and stack machines . . . . . . . 748Quick-sort and the call stack . . . . . . . . . . . . 761Writing an iterator for a search tree . . . . . . . . 763Merge sort with an explicit stack . . . . . . . . . . 768Breadth-rst tree traversal and queues . . . . . . 77517 Priority queues 779A tree representation for a heap . . . . . . . . . . 782Leftist heaps . . . . . . . . . . . . . . . . . . . . 786Binomial heaps . . . . . . . . . . . . . . . . . . . 794Binary heaps . . . . . . . . . . . . . . . . . . . . 814Adding keys and values . . . . . . . . . . . . . . 825Comparisons . . . . . . . . . . . . . . . . . . . . 842Human encoding . . . . . . . . . . . . . . . . . 84618 Conclusions 853Where to go from here . . . . . . . . . . . . . . 855

Additional information

NLS9781484270769
9781484270769
1484270762
Introduction to Computational Thinking: Problem Solving, Algorithms, Data Structures, and More by Thomas Mailund
New
Paperback
APress
2021-07-17
657
N/A
Book picture is for illustrative purposes only, actual binding, cover or edition may vary.
This is a new book - be the first to read this copy. With untouched pages and a perfect binding, your brand new copy is ready to be opened for the first time

Customer Reviews - Introduction to Computational Thinking