การเขียนโปรแกรมแข่งขัน (Competitive programming) โดยทั่วไปหมายถึงการเขียนโค้ดเพื่อใช้演算法ที่มีประสิทธิภาพด้วยโครงสร้างข้อมูลที่เหมาะสม พวกเขาทดสอบทักษะของโปรแกรมเมอร์ในหลายระดับ
ด้วยความช่วยเหลือของ演算法และโครงสร้างข้อมูล คุณต้องแก้ปัญหาการเขียนโปรแกรมสมมติที่ طرحให้คุณ โดยการใช้ตรรกะที่แตกต่างกัน คุณไม่เพียงต้องแก้ปัญหา แต่ต้องหาวิธีแก้ที่มีประสิทธิภาพมาก ซึ่งมี time และ space complexity ที่ดี
ตัวอย่างข้อความปัญหาสำหรับสิ่งที่เรียกว่า competitive programming อาจเป็น −
คุณได้รับสตริง s ความยาว n ประกอบด้วยตัวอักษร Latin พิมพ์เล็กเท่านั้น
Substring ของสตริงคือ subsequence ที่ติดต่อกันของสตริงนั้น ดังนั้น สตริง "forces" เป็น substring ของสตริง "codeforces" แต่สตริง "coder" ไม่ใช่
ภารกิจของคุณคือคำนวณจำนวนวิธีในการลบ substring เพียงหนึ่งจากสตริงนี้ โดยที่ตัวอักษรที่เหลือทั้งหมดเท่ากัน (จำนวนตัวอักษรที่แตกต่างกันเป็นศูนย์หรือหนึ่ง)
รับประกันว่ามีตัวอักษรที่แตกต่างกันอย่างน้อยสองตัวใน s
สังเกตว่าคุณสามารถลบสตริงทั้งหมดได้และถือว่าถูกต้อง นอกจากนี้ สังเกตว่าคุณควรลบตัวอักษรอย่างน้อยหนึ่งตัว
เพื่อแก้ปัญหาข้างต้น คุณสามารถใช้ภาษาโปรแกรมมิ่งที่คุณชอบได้
ตอนนี้คำถามเกิดขึ้น ทำไมถึงเป็น Python สำหรับ competitive coding?
ความเร็ว (Speed)
หนึ่งในเหตุผลในการเลือก Python คือมันลดเวลาที่คุณใช้เขียนโค้ดให้เหลือน้อยมาก คุณใช้เวลาคิดเกี่ยวกับตรรกะที่จำเป็นสำหรับคำถามแทน
เพราะในการแข่งขันประเภทนี้ เวลาเป็นกุญแจ สิ่งที่โปรแกรมเมอร์เขียนโซลูชันได้เร็วเท่าไหร่ ก็จะดีขนาดนั้น ความเร็วที่กล่าวมาข้างต้นหมายถึงความเร็วที่โปรแกรมเมอร์เขียนโซลูชัน ไม่ใช่ความเร็วของภาษา Python
ไลบรารีหลากหลายมาก (Huge variety of libraries)
Python มาพร้อมกับไลบรารีมาตรฐานหลากหลายมาก และไลบรารีเหล่านี้สามารถนำไปใช้ใน competitive programming ได้ดีมาก
ด้านล่างคือรายการเหตุผลทั่วไปอื่นๆ ในการเลือก Python สำหรับ competitive coding −
i. Common inbuilt functions (ฟังก์ชัน built-in ทั่วไป):
- Python มีชุดฟังก์ชันทั่วไปขนาดใหญ่ เช่น count, min, max, sorted เป็นต้น ฟังก์ชัน built-in เหล่านี้มาช่วยได้มาก อนุญาตให้โค้ดเดอร์ข้ามการเขียนโค้ดสำหรับขั้นตอน瑣瑣เหล่านี้ซึ่งมักมีประโยชน์มาก นอกจากนี้ ฟังก์ชันของ Python ใช้演算法ที่ดีที่สุดสำหรับฟังก์ชันของพวกมัน ตัวอย่างเช่น ฟังก์ชัน sorted() ใช้演算法 Timsort ซึ่งให้การเรียงลำดับที่เสถียร (stable) ที่ประสิทธิภาพสแควรสต O(nlogn) นี่เป็นหนึ่งใน演算法เรียงลำดับที่ดีที่สุดซึ่งให้ best case run time เป็น O(1) หรือ constant run time
โค้ด
#abs() print(abs(-7)) #max() print(max(2, 13, 4, 20)) #memoryview() print(memoryview(bytes(9))) #object() o = object();print(type(o)) #pow() print(pow(2,6)) #reversed a = reversed([3, 13, 2, 1]); print(a) #sorted() print(sorted([9, 2, 4, 13, 7])) #sum() print(sum([2, 9, 12, 19])) # type() print (type([])) print (type({})) #zip() print(set(zip([1,2],[3,4,5])))
ii. List Comprehensions
- Python มี List Comprehensions ที่ดีที่สุดหนึ่ง อนุญาตให้เราเขียนโค้ดที่ปกติจะใช้ 5-20 บรรทัดใน 1 บรรทัด ด้วย List comprehension คุณสามารถมี nested loops และเงื่อนไขได้
โค้ด
# วนลูปผ่านสตริงด้วย List Comprehension l_string = [ letter for letter in 'Tutorialspoint' ] print( l_string) # List Comprehensions vs Lambda functions l_lambda = list(map(lambda x: x, 'Tutorialspoint')) print(l_lambda)
ผลลัพธ์
['T', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', 'p', 'o', 'i', 'n', 't'] ['T', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', 'p', 'o', 'i', 'n', 't']
iii. Standard library (ข้อได้เปรียบใหญ่)
- Python มาพร้อมกับ Standard library ที่กว้างขวางมาก เสนอสิ่งอำนวยความสะดวกหลากหลาย ไลบรารีเหล่านี้มาพร้อมโครงสร้างข้อมูลหลายอย่างซึ่งทำให้ไม่ต้อง implement เอง และยังมี itertools ซึ่งเป็นส่วนสำคัญของไลบรารี
- ตัวอย่างเช่น คุณต้องการสร้าง permutation ทั้งหมดที่เป็นไปได้ของลิสต์และเก็บไว้ในลิสต์เดียว โดยใช้ list comprehension และ permutation function จาก itertools
Python Standard Library
| Data types |
strings |
networking |
threads |
| Operating System |
compression |
GUI |
arguments |
| CGI |
complex numbers |
FTP |
cryptography |
| testing |
multimedia |
databases |
CSV files |
| calendar |
email |
XML |
serialization |
iv. โครงสร้างข้อมูลหลากหลายมาก (A vast variety of data structures)
- Python มีชุดโครงสร้างข้อมูลขนาดใหญ่ให้ใช้ในโค้ดของคุณ รวมถึง dictionary, sets, tuple, list และอีกมากมาย ซึ่งมาพร้อมกับแพ็กเกจมาตรฐาน

v. ความง่ายในการใช้งาน (Ease of use)
ไวยากรณ์ของ Python อ่านง่ายเหมือนมนุษย์ และการเขียนโค้ดใน Python ง่ายและรวดเร็วมาก มันอ่านเหมือน pseudocode
>>> print("hello world!") hello world! >>> sum([3, 4, 3,5]) 15 >>> max(3, 4, 5, 13,2) 13 >>> min(3, 4, 5, 13, 2) 2