การเปรียบเทียบหมายเลขเวอร์ชัน เช่น "1.0.1" กับ "1.0" ต้องการตรรกะพิเศษ เนื่องจากจุด (.) ไม่ใช่จุดทศนิยม แต่เป็นตัวคั่นระดับการแก้ไข (revision levels) บทความนี้เสนออัลกอริทึมและโค้ด Python สำหรับเปรียบเทียบเวอร์ชัน
กฎการเปรียบเทียบ
- แยกเวอร์ชันด้วยจุด (.) เป็นอาร์เรย์ตัวเลข
- เปรียบเทียบระดับต่อระดับ (left-to-right)
- ระดับที่ขาดหายไปถือเป็น 0 (เช่น "3.4" เทียบเท่า "3.4.0.0")
- คืนค่า: 1 ถ้า version1 > version2, -1 ถ้า version1 < version2, 0 ถ้าเท่ากัน
อัลกอริทึม
- แปลง version strings เป็นลิสต์จำนวนเต็ม
- วนลูปเปรียบเทียบแต่ละระดับจนถึงความยาวสูงสุด
- ระดับที่เกินความยาวถือเป็น 0
- คืนค่าทันทีเมื่อพบความต่าง
- ถ้าทุกระดับเท่ากัน คืนค่า 0
ตัวอย่างโค้ด Python
class Solution:
def compareVersion(self, version1, version2):
# แยก string ด้วย '.' และแปลงเป็น int
versions1 = [int(v) for v in version1.split(".")]
versions2 = [int(v) for v in version2.split(".")]
# เปรียบเทียบแต่ละระดับ
for i in range(max(len(versions1), len(versions2))):
v1 = versions1[i] if i < len(versions1) else 0
v2 = versions2[i] if i < len(versions2) else 0
if v1 > v2:
return 1
elif v1 < v2:
return -1
return 0
# ทดสอบ
ob1 = Solution()
print(ob1.compareVersion("1.0.1", "1.0")) # Output: 1
ตัวอย่าง Input/Output
Input: "1.0.1" "1.0" Output: 1
การประยุกต์ใช้: อัลกอริทึมนี้ใช้ใน package managers (pip, npm), CI/CD pipelines, และ dependency resolution systems