คอมพิวเตอร์โอลิมปิก ประเทศไทย
ขอขอบคุณข้อมูลจากTOI Thailand OI
https://thailandoi.org/info/ioi
ข้อมูลเบื้องต้นเกี่ยวกับคอมพิวเตอร์โอลิมปิกระหว่างประเทศ
การแข่งขันคอมพิวเตอร์โอลิมปิกระหว่างประเทศ (International Olympiad in Informatics) คือการแข่งขันเขียนโปรแกรมคอมพิวเตอร์ที่จัดขึ้นประจำปี ในการแข่งขันนักเรียนระดับชั้นมัธยมศึกษาตอนปลายเข้าร่วมแข่งขันทั่วโลก ผู้เข้าแข่งขันจำเป็นต้องใช้ความรู้ทางด้านวิทยาการคอมพิวเตอร์ (เช่นอัลกอริทึมโครงสร้างข้อมูลฯลฯ) และเขียนโปรแกรมแก้ปัญหาที่กำหนดมาให้
การแข่งขันคอมพิวเตอร์โอลิมปิกที่จะจัดครั้งต่อไป
ปี 2009 จะมีการแข่งขันที่เมื่อง Plovdiv ประเทศบัลแกเรีย
ปี 2010 จะมีการแข่งขันที่เมือง Waterloo ประเทศแคนาดา
ปี 2011 จะมีการแข่งขันที่เมืองพัทยา ประเทศไทย
ปี 2012 จะมีการแข่งขันที่เมือง Milan ประเทศอิตาลี
รูปแบบการแข่งขัน
แข่งขันกันเขียนโปรแกรมเป็นเวลา 2 วัน แต่ละวันจะมีโจทย์3-4 ข้อ มีเวลาให้แก้ปัญหาทั้งหมด 5 ชั่วโมง ซึ่งรวมเวลาในการคิดหาขั้นตอนวิธีในการหาคำตอบ การเขียนโปรแกรมและการดีบัก(debug) โปรแกรมทั้งหมดเข้าด้วยกัน
โจทย์ ปัญหาในการแข่งขันคอมพิวเตอร์โอลิมปิกมีกันด้วยกัน 3 ประเภท คือ Batch, Library Interaction และ Output Only
1.โจทย์ Batch คือโจทย์ที่ผู้เข้าแข่งขันจะต้องเขียนโปรแกรมภาษา C, C++ หรือ Pascal เพื่อรับแฟ้มข้อมูลทดสอบ นำไปประมวลผล แล้วแสดงผลลัพธ์สอดคล้องตามที่โจทย์กำหนด
ตัวอย่างเช่น โจทย์ให้คำนวณ “ค่าเฉลี่ยเลขคณิตของลำดับจำนวนความยาว N” ผู้เข้าแข่งขันจะต้องรับจำนวน N จำนวนทาง Standard Input นำไปหาผลรวมทั้งหมด จากนั้นนำผลรวมไปหารด้วย N ก่อนแสดงผลลัพธ์ทาง Standard Output
หลังจากที่ผู้เข้าแข่งขันเขียนโปรแกรมเสร็จแล้ว จะต้องส่งโค้ดของโปรแกรมเพื่อตรวจ ซึ่งมักจะตรวจหลังการแข่งขันเสร็จสิ้นแล้ว การตรวจโปรแกรมจะนำแฟ้มข้อมูลลับมาทดสอบกับโปรแกรมของผู้เข้าแข่งขันว่าให้ คำตอบถูกต้องหรือไม่ ผู้เข้าแข่งขันจะได้คะแนนจากชุดทดสอบที่ให้ผลลัพธ์ที่ถูกต้องและจะต้องรัน โดยใช้เวลาและหน่วยความจำไม่เกินที่โจทย์กำหนดด้วย
2.โจทย์ Library Interaction คือโจทย์ที่ผู้เข้าแข่งขันจะต้องเขียนโปรแกรมภาษา C, C++ หรือ Pascal เพื่อติดต่อกับ Library ที่กรรมการกำหนดมาให้ ผู้เข้าแข่งขันจะต้องโต้ตอบกับ Library ดังกล่าวและบรรลุวัตถุประสงค์ตามที่โจทย์กำหนด
ตัวอย่างเช่น โจทย์กำหนดให้ผู้เข้าแข่งขันเขียนโปรแกรมเพื่อเล่นเกมให้ชนะ Library ที่กำหนดให้ โจทย์อาจจะกำหนดสถานะเริ่มต้นของเกมให้คุณเลือกที่เป็นฝ่ายแรกที่เริ่มเกม หรือเป็นฝ่ายที่เล่นเกมเป็นคนที่สองก็ได้ หากคุณสามารถชนะเกมโดยที่ไม่ทำผิดกติกา คุณจะได้คะแนนสำหรับเกมนั้นๆ
โจทย์ลักษณะนี้จะกำหนดวิธีการติดต่อกับ Library มาให้อย่างละเอียด ผู้เข้าแข่งขันไม่จำเป็นต้องมีความรู้เกี่ยวกับ Library มาก่อน นอกจากนี้กรรมการมักมี Library ตัวอย่างเพื่อใช้ในการทดสอบโปรแกรมที่ผู้เข้าแข่งขันเขียน อย่างไรก็ตาม Library ที่ใช้ในการให้คะแนนผู้เข้าแข่งขันอาจแตกต่างออกไป
3.โจทย์ Output Only คือโจทย์ที่ผู้เข้าแข่งขันจะต้องเขียนโปรแกรมเพื่อหาคำตอบสำหรับโจทย์ปัญหา ที่กำหนดมาให้ โดยผู้เข้าแข่งขันจะทราบแฟ้มข้อมูลนำเข้าทั้งหมด ผู้เข้าแข่งขันจะต้องหาคำตอบสำหรับชุดข้อมูลนำเข้าแล้วส่งเฉพาะคำตอบที่หา ได้
โจทย์ Output Only อาจไม่ต้องการคำตอบที่ดีที่สุด ส่วนใหญ่คะแนนจะขึ้นกับว่าคำตอบของผู้เข้าแข่งขันนั้นดีแค่ไหน อาจมีการนำคำตอบผู้เข้าแข่งขันไปเปรียบเทียบกับผู้เข้าแข่งขันคนอื่นๆ หรือแม้แต่เทียบกับคำตอบที่ดีที่สุดของกรรมการ โจทย์ Output Only ส่วนมากมักจะเป็นโจทย์ปัญหาในกลุ่ม NP-Complete หรือโจทย์ที่ต้องใช้เวลารันนาน
การเขียนโปรแกรมและการแก้โจทย์ปัญหา
ผู้เข้าแข่งขันจะมีเครื่องคอมพิวเตอร์หนึ่งเครื่องซึ่งลงระบบปฏิบัติการลี นุกซ์ พร้อมด้วย Compiler และ Editor มากมาย คอมพิวเตอร์ดังกล่าวจะเชื่อมต่อกับระบบเครือข่ายเพื่อใช้ในการส่งคำตอบ สำหรับโจทย์ปัญหาเท่านั้น หากมีการใช้เครือข่ายทำอย่างอื่นจะถูกปรับให้แพ้และต้องออกจากการแข่งขันทันที
ในระหว่างการเขียนโปรแกรม จะมีโจทย์ทั้งฉบับภาษาไทยและภาษาอังกฤษ (สำหรับผู้แข่งขันจากประเทศไทย) หากผู้เข้าแข่งขันสงสัยเกี่ยวกับโจทย์สามารถถามคำถามกรรมการได้ โดยที่คำตอบของกรรมการจะเป็น (1) ใช่ (2) ไม่ใช่ (3) ไม่แสดงความคิดเห็น (4) คำตอบปรากฏในโจทย์อย่างชัดเจน (5) คำถามถามไม่ถูกต้อง
เกณฑ์การตัดสิน
สำหรับโจทย์แต่ละข้อจะมีคะแนนเต็ม 100 คะแนน รวมทั้งหมด 600-800 คะแนน เมื่อนำคะแนนของผู้เข้าแข่งขันแต่ละคนมารวมกันแล้วนำมาเรียงลำดับ จากนั้นทำการจัดอันดับเหรียญรางวัลโดยใช้เกณฑ์ดังนี้
•คะแนนที่จะได้เหรียญทอง คือคะแนนที่ต่ำที่สุดที่ทำให้ผู้เข้าแข่งขันไม่เกิน 1 ใน 12 มีคะแนนมากกว่าหรือเท่ากับคะแนนนี้
•คะแนนที่จะได้เหรียญเงิน คือคะแนนที่ต่ำที่สุดที่ทำให้ผู้เข้าแข่งขันไม่เกิน 1 ใน 4 มีคะแนนมากกว่าหรือเท่ากับคะแนนนี้
•คะแนนที่จะได้เหรียญทองแดง คือคะแนนที่สูงที่สุดที่ทำให้ผู้เข้าแข่งขันอย่างน้อย 1 ใน 2 มีคะแนนมากกว่าหรือเท่ากับคะแนนนี้
หน้าที่ 2 - หนทางสู่คอมพิวเตอร์โอลิมปิกในประเทศไทย
หน้าที่ 3 - การเตรียมความพร้อมสำหรับแข่งขัน
หน้านี้มีข้อมูลสำหรับฝึกเขียนโปรแกรมและแก้ปัญหาโจทย์ ขั้นตอนการฝึกเขียนโปรแกรม ณ ที่นี้จะแบ่งขั้นตอนการเตรียมความพร้อมออกเป็น 3 ระดับดังนี้
1.ขั้นพื้นฐาน
นักเรียนควรจะเริ่มจากศึกษาคณิตศาสตร์ เรื่อง การให้เหตุผล คอมบินาทอริกส์ ทฤษฎีจำนวน และพีชคณิต เพราะเป็นส่วนสำคัญในการพัฒนาทางด้านการเขียนโปรแกรมต่อไป หลังจากนั้นนักเรียนจะต้องเริ่มฝึกใช้งานภาษาระดับต่ำถึงปานกลาง โดยภาษาที่มีให้เลือกได้แก่ C, C++ และ Pascal เราขอแนะนำให้ท่านเริ่มที่ภาษา C ก่อนแล้วจึงเปลี่ยนมาใช้ C++ เมื่อท่านใช้งานภาษา C จนคล่องแล้ว ส่วนภาษา Pascal มักไม่นิยมใช้ในการแข่งขันคอมพิวเตอร์โอลิมปิกของประเทศไทย
นักเรียนสามารถเริ่มต้นฝึกเขียนโปรแกรมจาก หนทางดังต่อไปนี้
1.การเข้าค่าย สอวน. จะมีการสอนเขียนโปรแกรมตั้งแต่เริ่มต้น รวมทั้งโครงสร้างข้อมูลและขั้นตอนวิธีเบื้องต้น
2.วิชาบังคับหรือวิชาเพิ่มเติมของแต่ละโรงเรียน (บางโรงเรียนอาจไม่มีวิชาเขียนโปรแกรม)
3.เริ่มต้นฝึกด้วยตนเอง เช่น ผ่านเว็บไซต์ Programming.in.th หรือเว็บไซต์อื่นๆ หรือแม้แต่ซื้อหนังสือมาฝึกด้วยตนเอง
การฝึกฝนเขียนโปรแกรมควรจะค่อยเป็นค่อยไปควบคู่กับการศึกษาคณิตศาสตร์ ไม่ควรรีบเร่งหรือเริ่มต้นด้วยการเขียนโปรแกรมที่มีลักษณะเป็นอ็อบเจกท์ เพราะจะทำให้ยุ่งยากในการเรียนรู้เขียนโปรแกรมต่อไป
2.ขั้นกลาง
นักเรียนควรหาโจทย์ปัญหาระดับง่ายถึงปานกลางมาฝึกเขียนโปรแกรมจนมีความชำนาญ ก่อนจะหาหนังสือเพื่อศึกษาโครงสร้างข้อมูลและขั้นตอนวิธีเบื้องต้นต่อไป ส่วนมากในค่ายสอวน.และสสวท. มักจะมีสอนอยู่แล้ว
3.ขั้นสูง
สำหรับนักเรียนที่ได้เข้าค่ายสสวท. ค่ายที่ 2 (เดือนมีนาคม) แล้ว ควรจะศึกษาโครงสร้างข้อมูลและขั้นตอนวิธีที่มีความซับซ้อนมากขึ้น นักเรียนจำเป็นต้องมีพื้นฐานคณิตศาสตร์อยู่ในระดับดี ข้อมูลเกี่ยวกับเนื้อหาที่เกี่ยวข้องกับคอมพิวเตอร์โอลิมปิกที่นี่
สำหรับเทคนิคการเขียนโปรแกรมเพิ่มเติมเล็กๆ น้อยๆ สามารถหาอ่านได้จาก Blog ของนักเขียนต่างๆ ในเว็บนี้
เว็บไซต์ ฝึกเขียนโปรแกรม
เว็บไซต์ที่มีโจทย์ปัญหาการเขียนโปรแกรมมากมาย มีดังต่อไปนี้ (หากผู้ใดมีเพิ่มเติมสามารถส่งอีเมลมาบอกเพิ่มเติมได้)
เว็บไซต์ ภายในประเทศ
การแข่งขัน YTOPC และ YTOPC Challenge ภายในเว็บไซต์นี้
Programming.in.th
azzeptGrader
Theory wiki
เว็บไซต์ต่างประเทศ
โจทย์ IOI ปีเก่า
USACO Training Program Gateway
Croatian Open Competition in Informatics
เว็บจำพวก timus หรือ z-trening.com (ไม่ใช่แกน)
โจทย์ของประเทศบัลแกเรีย โปแลนด์ โครเอเชีย อเมริกา รัสเซีย แคนาดา อังกฤษ ฝรั่งเศส ฯลฯ (โปรดใช้ Google ในการค้นหา)
หน้าที่ 4 - รายการเนื้อหาที่เกี่ยวข้องกับคอมพิวเตอร์โอลิมปิกทั้งหมด (อัพเดทล่าสุดปี 2009)
รายการเนื้อหาทั้งหมดที่เกี่ยวข้องกับคอมพิวเตอร์โอลิมปิกทั้งหมดนี้มาจาก ioi2009.org
เนื้อหาที่เพิ่มเติมจากเดิมเขียนอยู่ในรูปตัวเอียง :: นอกจากนี้เนื้อหาที่ไม่จำเป็นและไม่ใช่ในการแข่งขัน ขอไม่แปลมา ณ ที่นี้ (กรุณาดูในไฟล์ต้นฉบับเอง)
[email protected] ด้วยครับ
1.เลขคณิตและเรขาคณิต
1.1. จำนวนเต็ม กระบวนการทางพีชคณิต (รวมทั้งการยกกำลัง) การเปรียบเทียบค่า
1.2. สมบัติของจำนวนเต็ม (จำนวนบวก-ลบ, จำนวนคู่-คี่, การหารลงตัว, จำนวนเฉพาะ-ประกอบ)
1.3. เศษส่วนและร้อยละ
1.4. จุด เวกเตอร์ พิกัดบนระนาบสองมิติ
1.5. ระยะห่างแบบยุคลิด ทฤษฎีบทของพีทาโกรัส
1.6. ส่วนของเส้นตรง จุดตัดของเส้นตรง
1.7. มุม
1.8. สามเหลี่ยม สี่เหลี่ยมผืนผ้าและจัตุรัส วงกลม
1.9. รูปหลายเหลี่ยม (รวมทั้งรูปด้านเท่ามุมเท่า รูปหลายเหลี่ยมนูน จุดภายในและภายนอกรูปเหลี่ยม)
2.เซต ความสัมพันธ์ และฟังก์ชัน
2.1. ฟังก์ชัน (ฟังก์ชันทั่วถึง, ฟังก์ชันหนึ่งต่อหนึ่ง, ฟังก์ชันผกผัน, ฟังก์ชันประกอบ)
2.2. ความสัมพันธ์ (การสะท้อน, ความสมมาตร, การถ่ายทอด, ความสมมูล, ความสัมพันธ์อันดับเชิงเส้น/ทุกส่วน, ลำดับอักษร)
2.3. เซต (แผนภาพเวนน์-ออยเลอร์, ส่วนเติมเต็ม, ผลคูณคาร์ทีเชียน, พาวเวอร์เซต)
2.4. หลักการช่องนกพิราบ
3.ตรรกะเบื้องต้น
3.1. ตรรกศาสตร์ประพจน์
3.2. ตัวเชื่อมทางตรรกศาสตร์
3.3. ตารางแสดงค่าความจริง
3.4. ตรรกศาสตร์ภาคแสดง
3.5. ตัวบ่งปริมาณสำหรับทุกตัว ตัวบ่งปริมาณสำหรับตัวมีจริง
3.6. อนุมานด้วยการยืนยันบรรพบท (Modus ponens) และการปฏิเสธอนุบท (Modus tollens)
4.กระบวนการพิสูจน์
4.1. การดำเนินการทางตรรกศาสตร์: ประพจน์มีเงื่อนไข บทกลับ ตัวผกผัน ประพจน์แย้งสลับที่ นิเสธของประพจน์ และประพจน์ที่เป็นข้อขัดแย้ง
4.2. การพิสูจน์โดยตรง เช่น การใช้ตัวอย่างค้าน การพิสูจน์แย้งสลับที่ การพิสูจน์โดยหาข้อขัดแย้ง
4.3. การอุปนัยทางคณิตศาสตร์ และการอุปนัยทางคณิตศาสตร์แบบเข้ม
4.4. บทนิยามเวียนเกิดทางคณิตศาสตร์ (รวมทั้ง บทนิยามเวียนเกิดที่นิยามร่วมกัน)
5.หลักการนับเบื้องต้น
5.1. กฎการบวก-กฎการคูณ หลักการเพิ่มเข้า-หักออก การก้าวหน้าทางเลขคณิตและเรขาคณิต จำนวนฟิโบนักชี
5.2. หลักการช่องนกพิราบ (เพื่อใช้ในการหาขอบเขต)
5.3. การเรียงสลับที่และการจัดกลุ่ม
5.4. ฟังก์ชันเศษส่วน สัมประสิทธิ์พหุนาม
5.5. เอกลักษณ์ปาสคาล ทฤษฏีบททวินาม
6.กราฟและต้นไม้
6.1. ต้นไม้และสมบัติพื้นฐาน
6.2. กราฟไม่มีทิศทาง (ระดับขั้น, วิถี, วัฏจักร, การเชื่อมโยง, วิถี/วงจรออยเลอร์, วิถี/วัฏจักรแฮมิลตัน, บทตั้งของการจับมือกัน)
6.2. กราฟมีทิศทาง (ระดับขั้นเข้า, ระดับขั้นออก, วิถีมีทิศทาง, วัฏจักรมีทิศทาง, การเชื่อมโยง, วิถี/วงจรออยเลอร์, วิถี/วัฏจักรแฮมิลตัน)
6.3. ต้นไม้แผ่ทั่ว
6.4. การท่องกราฟ
6.5. กราฟที่จุดยอดและเส้นเชื่อมมีน้ำหนักหรือสี
6.6. กราฟที่มีลูปหรือมีจุดยอดสองจุดที่มีเส้นเชื่อมมากกว่า 1 เส้น
7.โครงสร้างของภาษาคอมพิวเตอร์
7.1. วากยสัมพันธ์เบื้องต้นและลักษณะการทำงานของภาษาระดับสูง
7.2. ตัวแปร ประเภทของตัวแปร นิพจน์ และการกำหนดค่า
7.3. การรับข้อมูลเข้าและแสดงข้อมูลออกอย่างง่าย
7.4. โครงสร้างแบบเงื่อนไขและทำซ้ำ
7.5. ฟังก์ชันและการส่งผ่านค่าพารามิเตอร์
7.6. การแตกปัญหาเชิงโครงสร้าง
8.อัลกอริทึมและการแก้ปัญหา
8.1. กลยุทธ์การแก้ปัญหาโจทย์ (เข้าใจการวางแผนและการตรวจสอบ, การแบ่งแยกปัญหาที่สนใจ, การทำให้อยู่ในรูปทั่วไป-กรณีพิเศษ, ความแตกต่างระหว่างแต่ละกรณี, การกระทำย้อนกลับ)
8.2. บทบาทของอัลกอริทึมในการแก้โจทย์ปัญหา
8.3. กลยุทธ์การ Implement สำหรับอัลกอริทึม
8.4. กลยุทธ์การแก้จุดบกพร่องโปรแกรม
8.5. หลักการเบื้องต้นและสมบัติของอัลกอริทึม (ทั้งในแง่ของความถูกต้องและประสิทธิภาพ)
9.โครงสร้างข้อมูลเบื้องต้น
9.1. แบบชนิดข้อมูลปฐมฐาน (บูลีน, จำนวนเต็มที่มีเครื่องหมายและไม่มีเครื่องหมาย, อักขระ)
9.2. แถวลำดับ
9.3. ระเบียน
9.4. สายอักขระและการประมวลผลสายอักขระ
9.5. การจองพื้นที่แบบสถิตและแบบกองซ้อน
9.6. โครงสร้างเชื่อมโยง (เชิงเส้นและกิ่งก้าน)
9.7. การImplement โครงสร้างเชื่อมโยงโดยใช้หน่วยความจำสถิต
9.8. กลยุทธ์การ Implement กองซ้อนและแถวคอย
9.9. กลยุทธ์การ Implement กราฟและต้นไม้
9.10. กลยุทธ์การเลือกใช้โครงสร้างข้อมูลที่ถูกต้อง
9.11. แบบชนิดข้อมูลนามธรรม แถวคอยแบบมีลำดับความสำคัญ เซตแบบพลวัต แมพแบบพลวัต
10.การเขียนโปรแกรมเวียนซ้ำ
10.1. หลักการเบื้องต้นของการเวียนซ้ำ
10.2. ฟังก์ชันคณิตศาสตร์เวียนเกิด
10.3. ขั้นตอนการเวียนซ้ำเบื้องต้น
10.4. หลักการแบ่งแยกและปกครอง
10.5. การกระทำย้อนรอยแบบเวียนซ้ำ
11.การวิเคราะห์อัลกอริทึม
11.1. การระบุอัลกอริทึม เงื่อนไขตั้งต้น เงื่้อนไขสุดท้าย ความถูกต้อง ความยืนยง
11.2. การวิเคราะห์ขอบเขตบนของความซับซ้อน
11.3. สัญกรณ์โอใหญ่
11.4. ชั้นความซับซ้อนพื้นฐาน (คงตัว, ลอการิทึม, เชิงเส้น, , กำลังสอง, กำลังสาม, ยกกำลัง)
11.5. การแลกเปลี่ยนระหว่างเวลาและหน่วยความจำในอัลกอริทึม
12.กลยุทธ์เชิงอัลกอริทึม
12.1. การวนลูปอย่างง่าย
12.2. การถึกหาคำตอบโดยตรงอย่างละเอียด
12.3. อัลกอริทึมเชิงละโมบ
12.4. การแบ่งแยกและปกครอง
12.5. การกระทำย้อนรอย (ทั้งเวียนเกิดและไม่เวียนเกิด)
12.6. การแตกแขนงและกำหนดขอบเขต
12.7. การตรวจสอบหาสตริงและอัลกอริทึมเกี่ยวกับสตริง
12.8. กำหนดการพลวัต
12.9. อัลกอริทึมการประมาณวิยุต
13.อัลกอริทึมการคำนวณพื้นฐาน
13.1. อัลกอริทึมพื้นฐานเชิงจำนวน (การแปลงเลขฐาน, อัลกอริทึมของยูคลิด, การตรวจสอบจำนวนเฉพาะใน , ตะแกรงของเอราทอสเทนีส, การแยกตัวประกอบ, การหาค่ายกกำลังอย่างมีประสิทธิภาพ)
13.2. กระบวนการบวก ลบและคูณอย่างง่าย ของแบบชนิดข้อมูลจำนวนเต็มซึ่งไม่เที่ยง (Arbitrarily precise)
13.3. การจัดดำเนินการกับแถวลำดับอย่างง่าย (การเติมให้เต็ม, การเลื่อนค่า, การหมุน, การผันกลับ, การแปลงขนาด, การหามากที่สุด-น้อยที่สุด, ผลรวมส่วนเติมหน้า, ฮิสโทแกรม, การเรียงลำดับจากที่ฝากข้อมูล)
13.4. การดำเนินการเชิงลำดับ การค้นหาเชิงลำดับ และการค้นหาเชิงทวิภาค
13.5. การค้นหาโดยใช้การกำจัดออกและใช้ความชัน
13.6. อัลกอริทึมเรียงลำดับข้อมูลแบบกำลังสอง (ซีเลคชันซอร์ต, อินเซอร์ชันซอร์ต)
13.7. อัลกอริทึมการแบ่งส่วนและการเรียงลำดับข้อมูลโดยใช้การแบ่งส่วน (ควิกซอร์ต)
13.8. อัลกอริทึมเรียงลำดับข้อมูลแบบ (ฮีปซอร์ต, การเรียงลำดับผสาน)
13.9. โครงสร้างข้อมูลฮีปเชิงทวิภาค
13.10. ต้นไม้ค้นหาทวิภาค
13.11. ต้นไม้เฟนวิค “ต้นมะนาว” หรืออาจเรียกต้นไม้ดรรชนีเชิงทวิภาค (Fenwick tree, Binary indexed tree, segment tree, interval tree)
13.12. การแทนกราฟด้วยการเก็บข้อมูล (Adjacency list, Adjacency matrix)
13.13. การท่องต้นไม้แบบอันดับ
13.14. อัลกอริทึมการค้นหาในแนวลึกและการค้นหาในแนวกว้างในการท่องกราฟ การหาความเชื่อมต่อของกราฟไม่มีทิศทาง
13.15. อัลกอริทึมหาวิถีที่สั้นที่สุด (Dijkstra’s algorithm, Bellman-Ford’s algorithm, Floyd-Warshall’s algorithm)
13.16. การหาจุดยอดของกราฟที่ไปถึงกันได้ (Floyd’s algorithm)
13.17. ต้นไม้แผ่ทั่วที่น้อยที่สุด (Jarník-Prim’s algorithm, Kruskal’s algorithm)
13.18. การเรียงลำดับเชิงทอพอโลยี
13.19. อัลกอริทึมค้นหาวิถีหรือวงจรออยเลอร์
14.การคำนวณเบื้องต้น ออโตมาตาและไวยากรณ์ (ปัจจุบันยังไม่มี แต่อาจมีในอนาคตได้)
14.1. เครื่องสถานะจำกัด, ไวยากรณ์ไม่พึ่งบริบท
14.2. ออโตมาตาจำกัด, นิพจน์ปรกติ, ระบบการเขียนแก้ใหม่
15.การวิเคราะห์อัลกอริทึมที่ซับซ้อน
15.1. พื้นฐานของเกมเชิงการจัดและMinimax algorithm สำหรับการแก้ปัญหาการเล่นเกมที่ดีที่สุด
16.อัลกอริทึมเชิงเรขาคณิต (บนระนาบสองมิติ)
16.1. ส่วนของเส้นตรง: สมบัติและจุดตัด
16.2. การบอกตำแหน่งของจุดเทียบกับรูปเหลี่ยมอย่างง่าย
16.3. การค้นหา Convex hull
16.4. การกวาดเชิงระนาบ
17.ทักษะการเขียนโปรแกรมและการใช้คอมพิวเตอร์
17.1. เขียนโปรแกรมจากขั้นตอนวิธีของโปรแกรมที่ออกแบบไว้
17.2. กำหนดให้โปรแกรมรับข้อมูลและส่งข้อมูลทางไฟล์
17.3. ออกแบบโปรแกรมโดยใช้ Library ที่อนุญาต
17.4. เขียนโปรแกรมโดยใช้ Editor ที่กำหนดให้
17.5. คอมไพล์โปรแกรมที่เขียนได้เอง
17.6. แก้จุดบกพร่องโปรแกรมที่ตนเองเขียนได้
17.7. เข้าใจขั้นตอนการพัฒนาโปรแกรม และสามารถกำหนดหลักไมล์ในการพัฒนาโปรแกรม
17.8. แปลงคำอธิบายภาษาพูดของโจทย์ปัญหาเป็นโมเดลทางคอมพิวเตอร์ได้ รวมทั้งความต้องการทางด้านประสิทธิภาพ
17.9. ใช้เทคนิคเพื่อเพิ่มโอกาสตรวจสอบข้อผิดพลาดของโปรแกรม
17.10. ตรวจสอบบางส่วนของโปรแกรม (Unit testing)
17.11. แบ่งเวลาสำหรับแต่ละกิจกรรมได้เหมาะสม
17.12. เปรียบเทียบความเสี่ยงของแต่ละทางเลือกในการแก้ปัญหาที่ต่างกัน
17.13. จัดการกับโค้ดแต่ละเวอร์ชันและสถานะการพัฒนาโปรแกรมนั้นได้
17.14. ให้เหตุผลถึงความถูกต้องและประสิทธิภาพของโปรแกรมได้
17.15. ทราบกระบวนการประมวลของโปรแกรม พื้นฐานโครงสร้างของคอมพิวเตอร์ พื้นฐานการใช้งานคอมพิวเตอร์ พื้นฐานการจัดการกับไฟล์ ซอฟต์แวร์ที่ใช้ในการพัฒนาโปรแกรม
หมายเหตุ: มีต้นฉบับหลักสูตรของ IOI 2009 แนบท้าย หากพบว่าบริเวณใดแปลผิด กรุณาแจ้งให้ทราบที่
แต่ละประเทศสามารถส่งนักเรียนเข้าแข่งขันโอลิมปิกวิชาการได้ไม่เกิน 4 คน สำหรับประเทศไทย นักเรียนชั้นมัธยมศึกษาตอนปลายที่ประสงค์ที่เข้าแข่งขันคอมพิวเตอร์โอลิมปิกจะต้องดำเนินการดังนี้
1.สมัครเข้าค่ายคอมพิวเตอร์ สอวน. ณศูนย์สอวน. ใกล้โรงเรียนท่านประมาณเดือน สิงหาคม- กันยายนของทุกปี (สามารถดูรายละเอียดเพิ่มเติมได้ที่เว็บมูลธินิสอวน.)
2.สอบคัดเลือกเพื่อเข้าค่ายสอวน. (ถ้ามี)
3.ผ่านการอบรมค่ายสอวน. ค่ายที่ 1 และ 2 เพื่อเป็นตัวแทนศูนย์ สอวน.
4.แข่งขันคอมพิวเตอร์โอลิมปิกระดับชาติในเดือนพฤษภาคม เพื่อได้สิทธิเข้าค่ายอบรมเข้มคอมพิวเตอร์โอลิมปิก สสวท. (สามารถดูรายละเอียดเพิ่มเติมได้ที่เว็บสสวท.)
5.ผ่านการอบรมค่ายสสวท. ค่ายที่ 1 (เดือนตุลาคม) ค่ายที่ 2 ระยะที่ 1 (เดือนมีนาคม) ค่ายที่ 2 ระยะที่ 2 (เดือนเมษายน)
6.ได้รับคัดเลือกเป็นผู้แทนประเทศไทยไปแข่งคอมพิวเตอร์โอลิมปิกระหว่างประเทศ ฉะนั้นจะต้องเข้าค่ายเป็นเวลาประมาณ 2 ปีก่อนที่จะได้เป็นผู้แทนประเทศฯ
ในกรณีที่นักเรียนผ่านค่ายอบรมเข้มสสวท. ค่ายที่ 1 จะมีสิทธิสอบ สอวน. ระดับชาติคอมพิวเตอร์โอลิมปิกครั้งถัดไปได้และในกรณีที่นักเรียนผ่านค่ายอบรมเข้ม สสวท. ค่ายที่ 2 ระยะที่ 1 จะมีสิทธิเข้าค่ายที่ 1 ของปีถัดไปได้ ส่วนในกรณีที่นักเรียนผ่านค่ายอบรมเข้ม สสวท. ค่ายที่ 2 ระยะที่ 2 จะมีสิทธิเข้าค่ายที่ 2 ระยะที่ 1 ของปีถัดไปได้