Hash Function vs Compression Algorithm

Planning

Text

ชื่อหัวข้อที่จะนำเสนอ

  • Hash Function vs Compression Algorithm

โครงสร้างของเนื้อหา

  1. จำนวนหัวข้อทั้งหมดที่จะนำเสนอ
    • 2 หัวข้อ
  2. แต่ละหัวข้อจะนำเสนออะไร
    • หัวข้อที่ 1 : เกริ่นนำ
    • หัวข้อที่ 2 : อธิบายความแตกต่างระหว่าง Hash Function และ Compression Algorithm
      - เปรียบเทียบในด้านการนำไปใช้งาน
      - เปรียบเทียบในด้านคุณสมบัติเฉพาะ
    • Reference : อ้างอิงจากที่เรียนกันภายใน Thursday Community Calls : Thursday Community Calls : ทำความเข้าใจ Hash Function และการใช้งาน - YouTube

Graphic

เสนอไอเดียสำหรับออกแบบกราฟฟิค

รูปแบบของกราฟฟิคที่จะนำเสนอ

โครงสร้างของกราฟฟิค

  1. จำนวน Page ที่จะนำเสนอ
    • …รูป
  2. แต่ละ Page เป็นรูปแบบอย่างไร
    • รูปที่ 1 :
    • รูปที่ 2 :
    • รูปที่ 3 :

คำถามที่รบกวนให้ Reviewer ช่วยตอบค่ะ

1. ต้องการรู้ประเด็นไหนเพิ่มเติมไหม เพราะอะไร

2. คิดว่าเรียงลำดับการนำเสนอได้ดีรึยัง ถ้าไม่ดี มีไอเดียอย่างไร

3. มีประเด็นไหนควรตัดทิ้งไหม เพราะอะไร

Content

จากบทความที่ผ่านมาเราได้มีการพูดถึง Hash Function กับ Compression Algorithm กันไป หลาย ๆ คนจะเข้าใจว่าทั้ง 2 ขั้นตอนวิธีนี้มีความคล้ายกันในเรื่องของการเปลี่ยนแปลงขนาดข้อมูลหรืออาจจะคิดว่าทั้ง 2 ขั้นตอนวิธีนี้เหมือนกันไปเลยก็ได้ ดังนั้นในบทความนี้เราจะเปรียบเทียบให้เห็นถึงความแตกต่างของทั้ง 2 ขั้นตอนวิธี ในแง่มุมของคุณสมบัติเฉพาะ และการนำไปใช้งาน

Compression Algorithm เป็นขั้นตอนวิธีการบีบอัดข้อมูลให้มีขนาดเล็กลง โดยที่เรายังสามารถทำให้กลับมาเป็นเหมือนเดิมได้ มีจุดประสงค์เพื่อลดพื้นที่ในการจัดเก็บข้อมูลหรือทำให้การถ่ายโอนข้อมูลไปยังคอมพิวเตอร์เครื่องอื่นทำได้รวดเร็วขึ้น นอกจากนั้นตัว Compression ยังสามารถแบ่งได้เป็น 2 ประเภท คือ Lossless Compression เป็นการบีบอัดข้อมูลที่เมื่อขยายข้อมูลกลับมา จะได้ข้อมูลที่มีความสมบูรณ์เหมือนต้นฉบับ ส่วนอีกแบบก็คือ Lossy Compression เป็นการบีบอัดข้อมูลที่มีการสูญเสียข้อมูลบางอย่างออกไป เพื่อให้ได้ขนาดที่เล็กมาก ๆ เมื่อขยายข้อมูลกลับมา ข้อมูลที่ได้จะไม่เหมือนกับต้นฉบับ เช่น รูปภาพที่อาจจะมีความคมชัดน้อยลง
ในขณะที่ Hash Function เป็นขั้นตอนวิธีการแปลงข้อมูลที่ไม่สามารถทำให้กลับไปเป็นรูปแบบเดิมได้อีก มีจุดประสงค์ในการใช้งานหลากหลายรูปแบบ เช่น เพื่อตรวจสอบความสมบูรณ์ของข้อมูลโดยตรวจจับการเปลี่ยนแปลงแก้ไขข้อมูล เป็นต้น และที่สำคัญคือ ขนาดของข้อมูลที่ได้จาก Hash Function จะมีขนาดคงที่ตามขั้นตอนวิธีที่เราเลือกใช้ ไม่ว่าข้อมูลต้นฉบับจะมีขนาดใหญ่หรือเล็กเท่าใด เช่น SHA-256 เมื่อข้อมูลต้นฉบับผ่านการ Hash แล้วผลลัพธ์ที่ได้จะมีขนาด 256 bit เท่านั้น

Reference

คำถามที่รบกวนให้ Reviewer ช่วยตอบค่ะ

  1. @Namtan ควรอธิบายให้ชัดเจนกว่านี้ครับว่าไอเดียที่จะนำเสนอในแต่ละหัวข้อ ภาพในหัวเราเป็นยังไงเล่าหน่อยๆ

@Namtan มันยังไม่ถูกต้อง 100% ครับผม

  1. สิ่งแรกเลยบทความเชิงเปรียบเทียบ (xxx VS yyy) เราจะต้องตั้งเป้าหมายก่อนว่าเราจะเปรียบเทียบในมุมมองใดบ้าง? เช่น
    – เปรียบเทียบเรื่องการนำไปใช้งาน : Hash Function ใช้เพื่อเข้ารหัสข้อมูลทางเดียวย้อนกลับเป็นข้อมูลต้นฉบับไม่ได้ ปัจจุบันมีการนำไปประยุกต์ใช้กับอะไรบ้าง บลาๆๆๆ (เช่นสร้าง key?) ส่วน Compression ด้วยความที่มันสามารถบีบอัดข้อมูลให้เล็กลง และ แตกไฟล์กลับมาเป็นข้อมูลต้นฉบับดังเดิม เลยนิยมใช้ในการบีบอัดไฟล์เพื่อใช้ในการลดพื้นที่จัดเก็บ หรือ ใช้ในการลดขนาดไฟล์เมื่อส่งข้อมูลผ่านระบบเครือข่าย (บีบไฟล์ก่อนส่งเมลไรงี้)
    – เปรียบเทียบเรื่องคุณสมบัติเฉพาะ : Hash Function จะแปลงขนาดข้อมูลใดๆ จากต้นฉบับ ไม่ว่าจะเล็กหรือใหญ่เท่าใดก็ตาม ให้เป็นขนาดคงที่ตามอัลกอริทึมที่เลือกใช้ เช่น sha256 หลังเข้ารหัสผลที่ได้จะมีขนาด 256bit ไม่ว่า input จะมีขนาด 1bit หรือ 99999999bit ก็ตาม …ส่วน Compression เป้าหมายคือการลดขนาดไฟล์ต้นฉบับลงและขนาดที่ลดลงนั้นไม่คงที่ด้วย

เราไม่จำเป็นต้องเปรียบเทียบหลายประเดนเพียงแค่ประเดนเดียวก็ได้ แต่ต้องเขียนใน outline ให้ชัดเจนว่าเราอยากเปรียบเทียบในประเดนใดบ้างครับ

  1. ความถูกต้องของข้อมูล

– จะเห็นได้ว่า Hash Function มันไม่ได้ทำให้ขนาดของข้อมูลเล็กลง แต่มันทำให้ขนาดเป็นไปตามอัลกอริทึมที่ใช้ ในมุมมองที่น้องอธิบายมามันก็ถูกถ้าข้อมูลต้นฉบับเป็นข้อมูลขนาดใหญ่เมื่อผ่านการ hash แน่นอน size มันจะเล็กลง แต่ถ้าข้อมูลต้นฉบับเป็นขนาดเล็กหละผลที่ได้คือขนาดมันก็มากขึ้น ตรงนี้แหละที่เราสื่อสารผิด
– ใจความสำคัญของ Hash คือการแปลงข้อมูลใดๆ ให้เป็นขนาดคงที่ตามอัลกอริทึมที่เลือก เช่น sha512 จะได้ output hash ขนาด 521bit

@anakornk ช่วยเสริมหน่อยครับ

  • จริงๆ มันมีปัจจัยอื่นด้วยนะครับ เช่นตอนเราบีบอัดเราสามารถเลือกระดับของการบีบอัดได้ว่าจะบีบอัดแบบระดับสูงเลยไหม ไฟล์ก็จะเล็กแต่ใช้เวลาบีบอัดนาน และขนาดในการบีบอัดขึ้นอยู่กับความเร็ว CPU ด้วยปะอันนี้ไม่มั่นใจ เคยพบว่ากดบีบอัดระดับเดียวกันในสองเครื่องแต่ได้ไฟล์ผลลัพธ์ขนาดไม่เท่ากัน อันนี้ฝากถาม @anakornk เพิ่มครับ
  • อ่านแล้วพี่ว่าสามารถทำให้กระชับได้กว่านี้นะครับลองปรับใหม่นะครับ ตรงช่วง “เป็นขั้นตอนวิธีการแปลงขนาดไฟล์ข้อมูลที่เมื่อเราทำการแปลงไฟล์ข้อมูล”

  • อื่นๆ อ่านแล้วโอเคแล้วครับ ถ้าแก้ไขเสร็จแล้วเรียกพี่ไปตรวจอีกทีนะครับ

@Namtan

  • เมื่อวานคุยกับ @anakornk ได้ข้อสรุปกันว่าเราไม่ต้องอธิบายลงลึกมากเกินไป เพราะถ้าลึกไปมันจะรัดตัวเราเองหากข้อมูลไม่แน่น จะเสี่ยงและอันตรายมาก + บทความ

  • ดังนั้นจากประโยคข้างต้นเราสามารถตัดส่วนนี้ทิ้งได้เลย “ขึ้นอยู่กับขนาดของไฟล์ข้อมูลต้นฉบับ ระดับในการบีดอัดไฟล์ที่เราเลือกใช้”

  • ถ้าแก้ไขตามข้างต้นแล้วถือว่าผ่านแล้วครับเริ่มงานกราฟฟิกได้เลย

1 Like

@Pantitas

จากภาพข้างต้นมีประเดนที่อ่านแล้วอาจจะทำให้เข้าใจสิ่งที่เราต้องการสื่อสารผิด ตอน compress file จริงๆ แล้วถ้าเรา compress แล้วมันขนานไม่ลดลงเราจะทำไปเพื่ออะไร ดังนั้นไม่ว่าจะเป็นขั้นตอนแบบ lossy หรือ lossless ขนาดข้อมูลก็ควรลดลงนะครับ ขึ้นอยู่กับว่าลดเยอะแค่ไหนมากกว่า (lossy ลดเยอะกว่าแน่นอน)

@anakornk มีอะไรเสริมไหมครับ

image

@Pantitas

  • ชอบภาพที่นำเสนอนะครับ ในส่วนของ compression

อยากให้แก้ไขดังนี้

  • ไฟล์ข้อมูล → ไปไล่ลบคำว่าไฟล์ออกครับ ใช้แค่ข้อมูลพอ
  • บีบอัดไฟล์ → บีบอัดข้อมูล
  • แตกไฟล์ → ถอนการบีบอัดข้อมูล (ใช้คำว่าแตกข้อมูลดูแปลกๆ แต่คนไทยชินกับคำว่าแตกไฟล์ แต่ถ้าหากหาคำที่ดีกว่าได้ลองเสนอมาได้เลยครับ)