หากคุณไม่สนใจเรื่องคณิตศาสตร์หรือการเขียนโปรแกรมคำว่า "อัลกอริทึม" อาจเป็นภาษากรีกสำหรับคุณ แต่ก็เป็นหนึ่งในองค์ประกอบพื้นฐานของทุกสิ่งที่คุณใช้อ่านบทความนี้ นี่คือคำอธิบายโดยย่อเกี่ยวกับสิ่งเหล่านี้และวิธีการทำงาน
ข้อจำกัดความรับผิดชอบ: ฉันไม่ได้เป็นครูสอนคณิตศาสตร์หรือวิทยาศาสตร์คอมพิวเตอร์ดังนั้นคำศัพท์ทั้งหมดที่ฉันใช้ไม่ใช่เรื่องเทคนิค นั่นเป็นเพราะฉันพยายามอธิบายทุกอย่างเป็นภาษาอังกฤษธรรมดาสำหรับคนที่ไม่ค่อยถนัดวิชาคณิตศาสตร์ ดังที่กล่าวมามีคณิตศาสตร์บางอย่างเกี่ยวข้องและเป็นสิ่งที่หลีกเลี่ยงไม่ได้ นักคณิตศาสตร์อย่าลังเลที่จะแก้ไขหรืออธิบายให้ดีขึ้นในความคิดเห็น แต่โปรดทำให้มันง่ายสำหรับพวกเราที่ไม่เชื่อมั่นทางคณิตศาสตร์
ภาพโดย เอียน Ruotsala
อัลกอริทึมคืออะไร
คำว่า "อัลกอริทึม" มีนิรุกติศาสตร์คล้ายกับ "พีชคณิต" ยกเว้นว่าจะหมายถึงนักคณิตศาสตร์ชาวอาหรับเองอัล - ควาริซมี (เป็นเพียงเรื่องเล็กน้อยที่น่าสนใจ) อัลกอริทึมสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ในหมู่พวกเราคือชุดคำสั่งที่ใช้อินพุต A และให้เอาต์พุต B ซึ่งจะเปลี่ยนแปลงข้อมูลที่เกี่ยวข้องไม่ทางใดก็ทางหนึ่ง อัลกอริทึมมีการใช้งานที่หลากหลาย ในทางคณิตศาสตร์พวกเขาสามารถช่วยคำนวณฟังก์ชันจากจุดในชุดข้อมูลและขั้นสูงอื่น ๆ อีกมากมาย นอกเหนือจากการใช้งานในการเขียนโปรแกรมแล้วพวกเขายังมีบทบาทสำคัญในสิ่งต่างๆเช่นการบีบอัดไฟล์และการเข้ารหัสข้อมูล
ชุดคำสั่งพื้นฐาน
สมมติว่าเพื่อนของคุณกำลังพบคุณในร้านขายของชำและคุณกำลังชี้แนะให้เขามาหาคุณ คุณพูดว่า“ เข้าทางประตูด้านขวา”“ ผ่านส่วนปลาทางซ้าย” และ“ ถ้าคุณเห็นนมคุณก็เดินผ่านฉันไป” อัลกอริทึมทำงานเช่นนั้น เราสามารถใช้ผังงานเพื่อแสดงคำแนะนำตามเกณฑ์ที่เราทราบล่วงหน้าหรือค้นหาในระหว่างกระบวนการ
(ภาพชื่อ“ กิจวัตร Icebreaking ” แก้ไข: ได้รับความอนุเคราะห์จาก Trigger และ Freewheel )
ตั้งแต่เริ่มต้นคุณจะมุ่งหน้าไปตามเส้นทางและขึ้นอยู่กับสิ่งที่เกิดขึ้นคุณทำตาม "ขั้นตอน" ไปยังผลลัพธ์สุดท้าย ผังงานเป็นเครื่องมือภาพที่สามารถแสดงชุดคำสั่งที่ใช้โดยคอมพิวเตอร์ได้อย่างเข้าใจมากขึ้น ในทำนองเดียวกันอัลกอริทึมก็ช่วยทำเช่นเดียวกันกับแบบจำลองที่ใช้คณิตศาสตร์มากขึ้น
กราฟ
เรามาใช้กราฟเพื่อแสดงวิธีต่างๆที่เราสามารถบอกทิศทางได้
เราสามารถแสดงกราฟนี้เป็นการเชื่อมต่อระหว่างจุดทั้งหมด ในการสร้างภาพนี้ขึ้นมาใหม่เราสามารถให้คำแนะนำแก่บุคคลอื่นได้
วิธีที่ 1
เราสามารถแทนค่านี้เป็นชุดของจุดและข้อมูลจะเป็นไปตามรูปแบบมาตรฐานของกราฟ = {(x1, y1), (x2, y2), …, (xn, yn)}
กราฟ = {(0,0), (3,0), (3,3), (5,5), (7,10), (8,7), (9,4), (10,1)}
มันค่อนข้างง่ายที่จะพล็อตแต่ละจุดทีละจุดและเชื่อมโยงกับจุดก่อนหน้า อย่างไรก็ตามลองนึกภาพกราฟที่มีจุดพันจุดหรือหลาย ๆ ส่วนที่ไปในทิศทางใดก็ได้ รายการนั้นจะมีข้อมูลมากมายใช่ไหม? แล้วการต้องต่อกันทีละคนอาจเป็นเรื่องที่น่าปวดหัว
วิธีที่ 2
อีกสิ่งหนึ่งที่เราทำได้คือให้จุดเริ่มต้นความชันของเส้นระหว่างจุดนั้นกับจุดถัดไปและระบุจุดที่จะคาดหวังจุดต่อไปโดยใช้รูปแบบกราฟมาตรฐาน = {(starting point}, [m1, x1, h1], …, [mn, xn, hn]} ในที่นี้ตัวแปร "m" แสดงถึงความชันของเส้น "x" หมายถึงทิศทางที่จะนับ (ไม่ว่าจะเป็น x หรือ y) และ "h" จะบอกจำนวนที่จะนับในทิศทางดังกล่าว นอกจากนี้คุณยังจำได้ว่าให้วางจุดหลังการเคลื่อนไหวแต่ละครั้ง
กราฟ = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,1], [-3,x,1], [-3,x,1]}
คุณจะจบลงด้วยกราฟเดียวกัน คุณจะเห็นว่าสามคำสุดท้ายในนิพจน์นี้เหมือนกันดังนั้นเราจึงสามารถตัดทอนคำนั้นลงได้โดยพูดว่า“ ทำซ้ำสามครั้ง” ไม่ทางใดก็ทางหนึ่ง สมมติว่าเมื่อใดก็ตามที่คุณเห็นตัวแปร "R" ปรากฏขึ้นหมายความว่าให้ทำซ้ำสิ่งสุดท้าย พวกเราสามารถทำได้:
กราฟ = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,1], [R=2]}
จะเป็นอย่างไรหากจุดแต่ละจุดไม่สำคัญและมีเพียงกราฟเท่านั้นที่ทำ เราสามารถรวมสามส่วนสุดท้ายได้ดังนี้:
กราฟ = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,3]}
มันทำให้สิ่งต่างๆสั้นลงเล็กน้อยจากที่เคยเป็นมาก่อน
วิธีที่ 3
ลองทำวิธีอื่น
y = 0, 0≤x≤3
x = 0, 0≤y≤3
y = x, 3≤x≤5
y = 2.5x-7.5, 5≤x≤7
y = -3x + 29, 7≤x≤8
y = -3x + 29, 8≤x≤9
y = -3x + 29.9≤x≤10
ที่นี่เรามีมันในแง่พีชคณิตล้วนๆ อีกครั้งหากจุดนั้นไม่สำคัญและมีเพียงกราฟเท่านั้นที่ทำได้เราสามารถรวมสามรายการสุดท้ายได้
y = 0, 0≤x≤3
x = 0, 0≤y≤3
y = x, 3≤x≤5
y = 2.5x-7.5, 5≤x≤7
y = -3x + 29, 7≤x≤10
ทีนี้จะเลือกวิธีไหนขึ้นอยู่กับความสามารถของคุณ บางทีคุณอาจเก่งคณิตศาสตร์และการสร้างกราฟดังนั้นคุณจึงเลือกตัวเลือกสุดท้าย บางทีคุณอาจถนัดในการนำทางดังนั้นคุณจึงเลือกตัวเลือกที่สอง อย่างไรก็ตามในขอบเขตของคอมพิวเตอร์คุณกำลังทำงานหลายประเภทและความสามารถของคอมพิวเตอร์ก็ไม่ได้เปลี่ยนแปลงไป ดังนั้นอัลกอริทึมจึงได้รับการปรับให้เหมาะสมกับงานที่เสร็จสมบูรณ์
ประเด็นสำคัญอีกประการหนึ่งที่ควรทราบคือแต่ละวิธีต้องอาศัยคีย์ ชุดคำสั่งแต่ละชุดไม่มีประโยชน์เว้นแต่คุณจะรู้ว่าจะทำอย่างไรกับพวกเขา หากคุณไม่ทราบว่าคุณควรจะพล็อตแต่ละจุดและเชื่อมต่อจุดต่างๆจุดชุดแรกก็ไม่มีความหมาย หากคุณไม่ทราบว่าตัวแปรแต่ละตัวหมายถึงอะไรในวิธีที่สองคุณจะไม่รู้ว่าจะใช้ตัวแปรเหล่านี้อย่างไรเหมือนกับกุญแจในการเข้ารหัส คีย์นั้นเป็นส่วนสำคัญของการใช้อัลกอริทึมด้วยและบ่อยครั้งที่คีย์นั้นพบได้ในชุมชนหรือผ่านทาง "มาตรฐาน"
การบีบอัดไฟล์
เมื่อคุณดาวน์โหลดไฟล์. zip คุณจะแตกเนื้อหาเพื่อให้คุณสามารถใช้อะไรก็ได้ที่อยู่ในนั้น ปัจจุบันระบบปฏิบัติการส่วนใหญ่สามารถดำดิ่งลงในไฟล์. zip ได้เหมือนกับโฟลเดอร์ปกติโดยทำทุกอย่างอยู่เบื้องหลัง ในเครื่อง Windows 95 ของฉันเมื่อสิบปีก่อนฉันต้องแยกทุกอย่างด้วยตนเองก่อนที่จะเห็นอะไรมากกว่าชื่อไฟล์ที่อยู่ภายใน นั่นเป็นเพราะสิ่งที่เก็บไว้ในดิสก์เป็นไฟล์. zip ไม่ได้อยู่ในรูปแบบที่ใช้งานได้ ลองนึกถึงโซฟาที่ดึงออกได้ เมื่อคุณต้องการใช้เป็นเตียงคุณต้องถอดเบาะรองนั่งออกและคลี่ออกซึ่งจะใช้พื้นที่มากขึ้น เมื่อคุณไม่ต้องการหรือต้องการขนส่งคุณสามารถพับเก็บสำรองได้
อัลกอริทึมการบีบอัดได้รับการปรับแต่งและปรับให้เหมาะสมโดยเฉพาะสำหรับประเภทของไฟล์ที่กำหนดเป้าหมาย ตัวอย่างเช่นรูปแบบเสียงแต่ละรูปแบบใช้วิธีการจัดเก็บข้อมูลที่แตกต่างกันซึ่งเมื่อถอดรหัสโดยตัวแปลงสัญญาณเสียงแล้วจะให้ไฟล์เสียงที่คล้ายกับรูปคลื่นดั้งเดิม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างเหล่านี้โปรดอ่านบทความก่อนหน้าของเรา อะไรคือความแตกต่างระหว่างรูปแบบเสียงทั้งหมดเหล่านั้น? รูปแบบเสียงแบบไม่สูญเสียข้อมูลและไฟล์. zip มีสิ่งหนึ่งที่เหมือนกัน: ทั้งคู่ให้ข้อมูลต้นฉบับในรูปแบบที่แน่นอนหลังจากกระบวนการคลายการบีบอัด ตัวแปลงสัญญาณเสียงที่สูญเสียใช้วิธีการอื่นเพื่อประหยัดเนื้อที่ดิสก์เช่นการตัดความถี่ที่ไม่สามารถได้ยินด้วยหูของมนุษย์และการปรับรูปคลื่นในส่วนต่างๆให้เรียบเพื่อกำจัดรายละเอียดบางส่วน ในท้ายที่สุดแม้ว่าเราอาจไม่สามารถได้ยินความแตกต่างระหว่างแทร็ก MP3 และซีดี แต่ในอดีตก็มีข้อมูลขาดหายไปอย่างแน่นอน
การเข้ารหัสข้อมูล
อัลกอริทึมยังใช้ในการรักษาความปลอดภัยข้อมูลหรือสายสื่อสาร แทนที่จะจัดเก็บข้อมูลเพื่อให้ใช้พื้นที่ดิสก์น้อยลงข้อมูลจะถูกจัดเก็บในลักษณะที่โปรแกรมอื่นตรวจไม่พบ หากมีคนขโมยฮาร์ดไดรฟ์ของคุณและเริ่มสแกนพวกเขาสามารถรับข้อมูลได้แม้ว่าคุณจะลบไฟล์เนื่องจากข้อมูลยังคงอยู่ที่นั่นแม้ว่าตำแหน่งการส่งต่อไปยังข้อมูลนั้นจะหายไป เมื่อข้อมูลถูกเข้ารหัสข้อมูลที่จัดเก็บไว้จะไม่มีลักษณะเหมือนข้อมูล โดยปกติแล้วจะมีลักษณะสุ่มราวกับว่ามีการกระจายตัวเมื่อเวลาผ่านไป คุณยังสามารถจัดเก็บข้อมูลและทำให้ปรากฏเป็นไฟล์ประเภทอื่นได้ ไฟล์ภาพและไฟล์เพลงเป็นสิ่งที่ดีเนื่องจากอาจมีขนาดค่อนข้างใหญ่โดยไม่ต้องสงสัยเป็นต้น ทั้งหมดนี้ทำได้โดยใช้อัลกอริทึมทางคณิตศาสตร์ซึ่งรับอินพุตบางประเภทและแปลงเป็นเอาต์พุตประเภทอื่นที่เฉพาะเจาะจงมาก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของการเข้ารหัสโปรดดู HTG อธิบาย: การเข้ารหัสคืออะไรและทำงานอย่างไร?
อัลกอริทึมเป็นเครื่องมือทางคณิตศาสตร์ที่มีประโยชน์หลากหลายในวิทยาการคอมพิวเตอร์ พวกเขาทำงานเพื่อให้เส้นทางระหว่างจุดเริ่มต้นและจุดสิ้นสุดอย่างสอดคล้องกันและให้คำแนะนำในการปฏิบัติตามนั้น รู้มากกว่าสิ่งที่เราเน้น? แบ่งปันคำอธิบายของคุณในความคิดเห็น!