Table of Contents

เนื้อหาทั้งหมด 7 วันมีเรื่องอะไรบ้าง?

Pro Plan for Lifelong Learners

  • เข้าถึงเนื้อหาได้ตลอดเพื่อทบทวนทีหลัง ไม่ต้องรอเปิด class
  • เห็น problem-solving process ของปัญหาที่ยากขึ้น ผ่านบทความพิเศษในแต่ละบท
  • เข้าใจการประยุกต์ใช้เนื้อหามากขึ้นผ่านโจทย์คัดพิเศษ พร้อมเฉลยละเอียดในแต่ละบท (ปล่อยใน class #3)
Day #0

Introduction

คอร์ส Data Structures and Algorithms Fundamentals เกี่ยวกับอะไรและเหมาะกับใคร? รูปแบบคอร์สเป็นยังไง? และคำถามที่พบบ่อยต่าง ๆ ก่อนเริ่มเรียน

🧑🏻‍💻 Exercises และ 1 challenge problem ท้ายบท

Day #1

Big O Notation

Big O notation คืออะไร? เราจะวัด efficiency ของ algorithm ได้ยังไง? space and time complexity คืออะไร?

🧑🏻‍💻 Exercises และ 1 challenge problem ท้ายบท

Premium

Asymptotic Analysis

Asymptotic analysis คืออะไร? เข้าใจนิยามของ big O notation และ asymptotic notation อื่น ๆ อย่าง big omega และ big theta ผ่านภาษาของคณิตศาสตร์

🧑🏻‍💻 +3 challenge problem พร้อมเฉลยละเอียดท้ายบท

(สำหรับ +3 challenge problems จะเพิ่มใน class #3 นะครับ)

Day #2

Binary Search

Binary search คืออะไร? เอามาใช้แก้ปัญหาอะไรได้บ้าง? และ binary search จำเป็นต้องใช้บนข้อมูลที่เรียงจากมากไปน้อยหรือน้อยไปมากเท่านั้นจริงหรอ!?

🧑🏻‍💻 Exercises และ 1 challenge problem ท้ายบท

Premium

Writing Correct Binary Search

Binary search เป็น algorithm ที่ถึงแม้ไอเดียจะเรียบง่าย แต่การ implement ให้ถูกนั้นเป็นเรื่องที่ยากมาก บทความนี้พามาชวน implement binary search แบบ step by step ผ่านการกำหนด pre-condition, post-condition, bound functions และ loop invariant

🧑🏻‍💻 +3 challenge problem พร้อมเฉลยละเอียดท้ายบท

(สำหรับ +3 challenge problems จะเพิ่มใน class #3 นะครับ)

Day #3

Recursion

Recursion คืออะไร? recursive function คืออะไร? เราต้องมองปัญหาอย่างไรเพื่อที่เราจะสามารถคิด recursive algorithm ที่แก้ปัญหาออกมาได้?

🧑🏻‍💻 Exercises และ 1 challenge problem ท้ายบท

Premium

Divide and Conquer

Divide and conquer คืออะไร? แตกต่างกับ dynamic programming อย่างไร? เราสามารถใช้ recursion tree method และ master theorem ในการประเมิน time complexity ได้อย่างไร?

🧑🏻‍💻 +3 challenge problem พร้อมเฉลยละเอียดท้ายบท

(สำหรับ +3 challenge problems จะเพิ่มใน class #3 นะครับ)

Day #4

Data Structures

Data structures คืออะไร? เราสามารถนำ data structures มาใช้แก้ปัญหาได้อย่างไร? และทำไม data structures ถึงเป็นเหมือนกับหัวใจหลักของการเขียนโปรแกรม?

🧑🏻‍💻 Exercises และ 1 challenge problem ท้ายบท

Premium

Bloom Filter

Abstract data types (ADT) ต่างกับ data structure อย่างไรและทำไมถึงสำคัญ? bloom filter คืออะไร? probabilistic data structure คืออะไร? ทำความเข้าใจผ่านการออกแบบระบบ recommendation system อย่างง่าย (BookTok)

🧑🏻‍💻 +3 challenge problem พร้อมเฉลยละเอียดท้ายบท

(สำหรับ +3 challenge problems จะเพิ่มใน class #3 นะครับ)

Day #5

Graph Theory

Graph theory คืออะไร? เราสามารถ implement graph แบบไหนได้บ้าง? graph เอาไปใช้ในการแก้ปัญหาอะไรได้บ้าง?

🧑🏻‍💻 Exercises และ 1 challenge problem ท้ายบท

Premium

Shortest Path Algorithm

Shortest path problem คืออะไร? และเราสามารถออกแบบ algorithm อย่างไรได้บ้างเพื่อแก้ปัญหาดังกล่าว (DFS/BFS, Dijkstra, A* algorithm)

🧑🏻‍💻 +3 challenge problem พร้อมเฉลยละเอียดท้ายบท

(สำหรับ +3 challenge problems จะเพิ่มใน class #3 นะครับ)

Day #6

Tree

Tree คืออะไร? มีโครงสร้างเป็นอย่างไร? binary tree และ binary search tree ต่างกันอย่างไร? เอาไว้ใช้ในการแก้ปัญหาอะไรและมี operation อะไรบ้าง?

🧑🏻‍💻 Exercises และ 1 challenge problem ท้ายบท

Premium

Minimum Spanning Tree

Minimum spanning tree (MST) คืออะไรและใช้แก้ปัญหาอะไร เราสามารถสร้าง MST ได้ยังไงบ้าง (Prim's algorithm, Kruskal's algorithm)

🧑🏻‍💻 +3 challenge problem พร้อมเฉลยละเอียดท้ายบท

(สำหรับ +3 challenge problems จะเพิ่มใน class #3 นะครับ)

Day #7

Dynamic Programming

Dynamic programming คืออะไร? ปัญหาแบบไหนที่เหมาะสมกับการใช้ dynamic programming? memorization และ tabulation แตกต่างกันอย่างไร?

🧑🏻‍💻 Exercises และ 1 challenge problem ท้ายบท

Premium

Greedy Algorithm

Greedy algorithm คืออะไร? เราสามารถออกแบบ greedy algorithm เพื่อหา optimal solution ได้หรือไม่? และเราจะรู้ได้อย่างไรว่า greedy algorithm ของเราทำงานได้ถูกต้อง

🧑🏻‍💻 +3 challenge problem พร้อมเฉลยละเอียดท้ายบท

(สำหรับ +3 challenge problems จะเพิ่มใน class #3 นะครับ)