Let's Learn About A.I. Episode 6 - Graphs, Trees and Complexity

Hi everyone!
We’re back after the holidays, and our first episode of the new year discusses some math and computer science topics that will come up frequently in future episodes.

We discuss graphs first, which are a data structure used to store relationships between objects. You’ve probably heard the term “social graph” used to describe the friendships in a social network like Facebook or Twitter. These structures pop up frequently in computer science, the natural sciences, and in other areas. I give an example of when a graph might be useful, and try to clarify when it may not be useful.

https://en.wikipedia.org/wiki/Graph_(discrete_mathematics)

https://en.wikipedia.org/wiki/Graph_(abstract_data_type)

After graphs, we go to a specific subset of graphs, called trees. Whereas a graph can look like a spider’s web, or a grid of streets, all trees look very similar - much like a family tree or an org chart of a large company. I discuss when and why trees are appropriate.

https://en.wikipedia.org/wiki/Tree_(data_structure)

https://medium.freecodecamp.org/all-you-need-to-know-about-tree-data-structures-bceacb85490c

Finally, we discuss computational complexity and algorithm analysis. These topics come up frequently when writing code to solve interesting problems. Computational complexity theory is the study of classifying problems by their complexity (in terms of run time, memory used, etc). Algorithm analysis is concerned with finding the amount of time, memory or other resources needed for an algorithm, usually as a function of the size of the input. Together, these tools allow for structured reasoning about the complexity of problems, and what problems are feasible or unfeasible, given our current understanding and current hardware. Interestingly, “hard” math problems that can not be solved by our current computing resources are actually the foundation for secure internet communication - cryptographers rely on what are called trap-door functions to create secure encryption algorithms.

https://en.wikipedia.org/wiki/Computational_complexity_theory

https://en.wikipedia.org/wiki/Analysis_of_algorithms

https://en.wikipedia.org/wiki/Trapdoor_function

https://en.wikipedia.org/wiki/Discrete_logarithm

I hope you all enjoy the episode, and I will talk to you soon!
Nick