## Algorithmic Thinking (Part 1)

Start Date: 12/13/2020

 Course Type: Common Course

#### About Course

Experienced Computer Scientists analyze and solve computational problems at a level of abstraction that is beyond that of any particular programming language. This two-part course builds on the principles that you learned in our Principles of Computing course and is designed to train students in the mathematical concepts and process of "Algorithmic Thinking", allowing them to build simpler, more efficient solutions to real-world computational problems. In part 1 of this course, we will study the notion of algorithmic efficiency and consider its application to several problems from graph theory. As the central part of the course, students will implement several important graph algorithms in Python and then use these algorithms to analyze two large real-world data sets. The main focus of these tasks is to understand interaction between the algorithms and the structure of the data sets being analyzed by these algorithms. Recommended Background - Students should be comfortable writing intermediate size (300+ line) programs in Python and have a basic understanding of searching, sorting, and recursion. Students should also have a solid math background that includes algebra, pre-calculus and a familiarity with the math concepts covered in "Principles of Computing".

#### Course Introduction

Algorithmic Thinking (Part 1) In this first part, we will focus on the topic of how to find functions in a computer program. We will cover basic algorithmic ideas and some of the techniques used to find functions using a set of rules. We will discuss some of the most important ideas and algorithms for finding functions, as well as some of the subtleties in the rules that are used to find functions. We will also introduce a very powerful algorithm for finding functions, and use it to solve a very interesting problem. In part 2, we will focus on a different key finding algorithm, and will discuss more complex problems that may require a more sophisticated algorithm to solve. Good luck as you get started! Algorithmic Thinking: Part 1 - Finding Functions in a Computer Program Good luck as you get started! Algorithmic Thinking: Part 2 - Finding Functions in a Computer Program Algorithmic Thinking: Part 3 - Finding Functions in a Computer Program Algorithmic Thinking: Part 4 - Finding Functions in a Computer Program Algorithmic Thinking (Part 2) In this second part, we will focus on the topic of how to find functions in a computer program. We will cover basic algorithmic ideas and some of the techniques used to find functions. We will discuss some of the most important ideas and algorithms for finding functions, as well as some of the subtleties in the rules

#### Course Tag

Graph Theory Algorithms Python Programming Graph Algorithms

#### Related Wiki Topic

Article Example
Unified structured inventive thinking Engineering and science are mostly based on an algorithmic-type of problem solving developed by applied mathematicians. Inventing is not an algorithmic process; it is a result of unrestricted creative thinking—inspiration. Lacking in algorithmic processes, inventive-type problem solving methodology has eluded much of academia. Many methodologies have been developed and marketed for filling this gap. Though they may or may not involve algorithms, they often entail structured methodology. USIT has structure, but no algorithms.
Algorithmic paradigm An algorithmic paradigm, algorithm design paradigm, algorithmic technique, or algorithmic strategy is a generic method or approach which underlies the design of a class of algorithms. It is an abstraction higher than the notion of an algorithm, just as an algorithm is an abstraction higher than a computer program. Examples of algorithmic paradigms include the greedy algorithm in optimization problems, dynamic programming, prune and search, and divide and conquer algorithms. More specialized algorithmic paradigms used in parameterized complexity include kernelization and iterative compression. In computational geometry, additional algorithmic paradigms include sweep line algorithms, rotating calipers, and randomized incremental construction.
Algorithmic art Algorithmic art, also known as "algorithm art", is art, mostly visual art, of which the design is generated by an algorithm. Algorithmic artists are sometimes called algorists.
Distributed algorithmic mechanism design Distributed algorithmic mechanism design (DAMD) is an extension of algorithmic mechanism design.
Algorithmic logic Algorithmic logic is one of many logics of programs.
Algorithmic art Algorithmic art, also known as computer-generated art, is a subset of generative art (generated by an autonomous system) and is related to systems art (influenced by systems theory). Fractal art is an example of algorithmic art.
Algorithmic trading Algorithmic trading has been shown to substantially improve market liquidity among other benefits. However, improvements in productivity brought by algorithmic trading have been opposed by human brokers and traders facing stiff competition from computers.
Algorithmic probability In algorithmic information theory, algorithmic probability, also known as Solomonoff probability, is a mathematical method of assigning a prior probability to a given observation. It was invented by Ray Solomonoff in the 1960s.
Algorithmic logic The formalized language of algorithmic logic (and of algorithmic theories of various data structures) contains three types of well formed expressions: "Terms" - i.e. expressions denoting operations on elements of data structures,
Critical thinking In the ‘second wave’ of critical thinking, as defined by Kerry S. Walters (Re-thinking Reason, 1994, p. 1 ), many authors moved away from the logocentric mode of critical thinking that the ‘first wave’ privileged, especially in institutions of higher learning. Walters summarizes logicism as "the unwarranted assumption that good thinking is reducible to logical thinking" (1994, p. 1).
Statistical thinking Statistical thinking is a recognised method used as part of Six Sigma methodologies.
Computational thinking As far as a physical facility, in Central New Jersey, there is a small institution, named Storming Robots, offering technology programs to Grade 4 to 12 with an emphasis on Algorithmic and Computational Thinking via robotics projects throughout the school year. Students may follow its road map starting from Grade 4 until they graduate to college.
Algorithmic probability Solomonoff invented the concept of algorithmic probability with its associated invariance theorem around 1960, publishing a report on it: "A Preliminary Report on a General Theory of Inductive Inference." He clarified these ideas more fully in 1964 with "A Formal Theory of Inductive Inference," Part I and Part II.
Algorithmic art "Algorist" is a term used for digital artists who create algorithmic art.
Algorithmic cooling Algorithmic cooling can be discussed using classical and quantum thermodynamics points of view.
Algorithmic logic The following diagram helps to locate algorithmic logic among other logics.
Algorithmic composition Algorithmic composition is the technique of using algorithms to create music.
Algorithmic Lovász local lemma In theoretical computer science, the algorithmic Lovász local lemma gives an algorithmic way of constructing objects that obey a system of constraints with limited dependence.
Algorithmic Traders Association The Algorithmic Traders Association is a professional organization and resource center for the discussion of algorithmic trading strategy, methods, software, and technical analysis.
Algorithmic trading A third of all European Union and United States stock trades in 2006 were driven by automatic programs, or algorithms. As of 2009, studies suggested HFT firms accounted for 60-73% of all US equity trading volume, with that number falling to approximately 50% in 2012. In 2006, at the London Stock Exchange, over 40% of all orders were entered by algorithmic traders, with 60% predicted for 2007. American markets and European markets generally have a higher proportion of algorithmic trades than other markets, and estimates for 2008 range as high as an 80% proportion in some markets. Foreign exchange markets also have active algorithmic trading (about 25% of orders in 2006). Futures markets are considered fairly easy to integrate into algorithmic trading, with about 20% of options volume expected to be computer-generated by 2010. Bond markets are moving toward more access to algorithmic traders.