เขียนโปรแกรมภาษา C ตั้งแต่ศูนย์
เอกสารชุดนี้พาน้องเริ่มจากยังไม่เคยเขียนโปรแกรมเลย ไปจนพร้อมทำโจทย์ระดับ TOI Zero
เส้นทางเรียน
เรียนภาษา C ให้แน่นก่อน ทุกบทใช้ C อย่างเดียว พอเข้าใจ C ครบแล้วค่อยต่อ C++ จะเห็นว่า C++ ต่อยอดจากสิ่งที่รู้อยู่แล้ว บทที่ยังเป็นสีจางคือบทที่กำลังเขียน
ภาษา C ระดับ TOI Zero ถึงค่าย 1
- [0]เริ่มต้นติดตั้งเครื่องมือ และเขียนโปรแกรมแรกให้รันได้
- [1]ตัวแปรและการคำนวณint long long double char ตัวดำเนินการ และตัวเลขที่ใหญ่เกินจะเก็บได้
- [2]รับและแสดงผลscanf printf จัดทศนิยม อ่านโจทย์ และรับข้อมูลแบบ grader
- [3]เงื่อนไขif else switch การเปรียบเทียบ และตรรกะ
- [4]วนซ้ำfor while ลูปซ้อน นับ สะสม และวาดรูปด้วยดาว
- [5]อาเรย์เก็บข้อมูลหลายตัว หาค่ามากสุด นับความถี่ ผลรวมสะสม
- [6]ตัวอักษรและสตริงchar รหัส ASCII ข้อความ นับตัวอักษร กลับคำ
- [7]อาเรย์สองมิติตาราง เมทริกซ์ และการเดินในกริด
- [8]ฟังก์ชันแบ่งโค้ดเป็นส่วน ส่งค่า คืนค่า และขอบเขตตัวแปร
- [9]recursionฟังก์ชันที่เรียกตัวเอง และคิดปัญหาแบบแบ่งเป็นปัญหาเล็ก
- [10]pointerที่อยู่ในหน่วยความจำ ส่งตัวแปรให้ฟังก์ชันแก้ pointer กับอาเรย์ และ malloc
- [11]structรวมข้อมูลหลายชนิดเป็นก้อนเดียว และอาเรย์ของ struct
- [12]คณิตศาสตร์ในการเขียนโปรแกรมmod ห.ร.ม. จำนวนเฉพาะ เลขฐาน ลำดับ และการนับ
- [13]เรียงข้อมูลและค้นหาbubble selection insertion sort ค้นหาแบบไล่ และค้นหาข้อความ
- [14]linked list stack queueโครงสร้างข้อมูลพื้นฐานที่เขียนเองด้วยภาษา C
ภาษา C++ และ STL ปลายค่าย 1
- [15]จาก C สู่ C++cin cout string bool reference และอ่านเขียนให้เร็ว
- [16]vector pair และ sortอาเรย์ที่ยืดได้ คู่ข้อมูล และเรียงข้อมูลในบรรทัดเดียว
- [17]stack queue deque ใน STLใช้โครงสร้างข้อมูลสำเร็จรูป แทนที่เขียนเองในบทที่ 14
อัลกอริทึม ระดับค่าย 2 และ TOI
- [18]ความซับซ้อนของเวลาBig O ประมาณเวลารันจากขอบเขตโจทย์ ก่อนเริ่มเขียน
- [19]binary search และ prefix sumค้นในข้อมูลที่เรียงแล้ว และหาผลรวมช่วงในเวลาคงที่
- [20]set map และ priority queueเก็บข้อมูลไม่ซ้ำ จับคู่คีย์กับค่า และดึงค่ามากสุดเร็วๆ
- [21]brute force และ backtrackingลองทุกทางอย่างเป็นระบบ และตัดทางที่ไม่มีหวังทิ้ง
- [22]divide and conquerแบ่งปัญหาครึ่งๆ merge sort quick sort
- [23]greedyเลือกสิ่งที่ดีที่สุดตอนนี้ และพิสูจน์ว่าทำไมถึงถูก
- [24]dynamic programming เบื้องต้นจำคำตอบของปัญหาย่อย ไม่คำนวณซ้ำ
- [25]dynamic programming แบบคลาสสิกknapsack LIS LCS และ DP บนตาราง
- [26]tree BST และ heapโครงสร้างแบบต้นไม้ การท่องต้นไม้ และ heap
- [27]กราฟ DFS และ BFSแทนกราฟในโปรแกรม เดินกราฟ ส่วนเชื่อมต่อ และ BFS บนตาราง
- [28]เส้นทางสั้นสุดDijkstra Bellman-Ford และ Floyd-Warshall
- [29]MST และ union-findต้นไม้แผ่ทั่วที่มีน้ำหนักน้อยสุด Kruskal Prim
- [30]หัวข้อเสริมtopological sort Fenwick tree segment tree และค้นหาข้อความ
ก่อนเริ่ม
- ใช้โน้ตบุ๊ก Windows ของตัวเอง
- ไม่ต้องมีพื้นฐานเขียนโปรแกรมมาก่อน
- เริ่มที่ บทที่ 0 แล้วไล่ไปทีละหน้า อย่าข้าม
วิธีอ่านให้ได้ผล
พิมพ์โค้ดทุกตัวอย่างเองแล้วรันดู อย่าก๊อปวาง การพิมพ์เองทำให้เจอ error จริง และการแก้ error คือการเรียนที่ได้ผลที่สุด