/datastructure

Repository for DCA0209, an undergraduate course about Data Structure and Algorithms

Primary LanguageJupyter NotebookMIT LicenseMIT

Federal University of Rio Grande do Norte

Technology Center

Department of Computer Engineering and Automation

Algorithms and Data Structure II

References

  • 📚 Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser. Data Structures and Algorithms in Python [Link]
  • 📚 Mark Newman. Networks [Link]
  • 📚 Menczer, Filippo; Fortunato, Santo; A. Davis, Clayton. A First Course in Network Science [Link]
  • 📚 Dmitry Zinoviev. Complex Network Analysis in Python [Link]
  • 📚 Coscia, Michele. The Atlas for the Aspiring Network Scientist [Link]
Tools

Lessons

Week 01: Course Outline Open in PDF

  • Python for Data Engineering: Fundamentals Part I Open in Dataquest
    • You'll learn the fundamentals of programming with Python for data engineers: a) Processing numerical data and text data, b) Performing basic Python operations such as creating variables and lists, c) Analyzing data using for loops, d) Writing conditional statements and using comparison operators.
    • ⏳ Estimated time: 6h
  • Git and Version Control Open in Dataquest
    • You'll learn how to: a) organize your code using version control, b) resolve conflicts in version control, c) employ Git and Github to collaborate with others.
    • 👊 getting a git repository.
    • ⏳ Estimated time: 5h
  • Complementary materials
    • Google Colab Introduction Open in Loom
    • Google Colab Cont. [optional] Open in Loom Jupyter
    • ⏳ Estimated time: 2h

Week 02: A brief introduction to data structure in Python

  • Python for Data Engineering: Fundamentals Part II Open in Dataquest
    • You will see: a) refining fundamental Python knowledge for data engineering; b) introducing basic Python concepts like dictionaries, functions, and default arguments; c) building proficiency in the use of Jupyter Notebook; d) practical application of your newly acquired data skills in a data project for your portfolio.
    • ⏳ Estimated time: 10h
  • Object Oriented Programming (OOP) introduction Open in Dataquest
    • ⏳ Estimated time: 3h
  • OOP practice problems Open in Dataquest
    • ⏳ Estimated time: 1.5h

Week 03: Complexity Algorithm I Open in PDF

  • Exercises Open in PDF
    • Part I Open in Loom
    • Part II Open in Loom
  • Challenge template Jupyter
  • Complementary notebook Jupyter
  • Time Complexity of Algorithms Open in Dataquest
    • you will learn how: a) measure the execution time of a algorithm; b) generate random inputs for an algorithm; c) model the execution time of an algorithm.
    • ⏳ Estimated time: 1h
  • Constant Time Complexity Open in Dataquest
    • you will learn: a) Identify constant time operations; b) Identify how computers manage memory; c) Refine computing time complexity models; d) Identify hidden function calls in Python. e) Identify how lists and strings are stored in memory.
    • ⏳ Estimated time: 2h
  • Case Studies Open in PDF

Week 04: Complexity Algorithm II

  • Big $O$, $\Theta$ , $\Omega$ notations Open in PDF
    • Big $O$ notation Open in Loom
    • Big $\Omega$ notation Open in Loom
    • Big $\Theta$ notation Open in Loom
    • ⏳ Estimated time: 1h
  • Logarithmic time complexity Open in PDF
    • Binary search algorithm Jupyter
    • Crash course about Logarithmic time complexity Open in Dataquest
      • you will learn: a) explain logarithms and logarithmic complexity; b) apply the binary search algorithm to find elements in sorted lists.
      • ⏳ Estimated time: 1h
  • Sorting Algorithms Complexity Open in PDF
    • Selection Sort Open in Dataquest Jupyter
      • you will learn: a) apply a sorting algorithm; b) identify the time complexity of sorting in Python.
      • ⏳ Estimated time: 1h

Week 05, 06: Project I

Week 07: Network Elements I

  • Part 01 Open in PDF
  • Part 02 Open in PDF
    • Basic Definitions Open in Loom
    • Extended Graphs Open in Loom
    • Density, Sparsity and Subnetworks Open in Loom
    • Degree and Network Representation Open in Loom
    • ⏳ Estimated time: 2h
  • Hands on
    • Network elements using networkx and graph-tool Jupyter

Week 08: Network Elements II

  • Exercise Jupyter
    • ⏳ Estimated time: 6h