เมื่อใดที่อัลกอริทึมทั้งสองพูดว่า "คล้ายกัน"


16

ฉันไม่ได้ทำงานในทางทฤษฎี แต่งานของฉันต้องการการอ่าน (และความเข้าใจ) เอกสารทางทฤษฎีทุกครั้ง เมื่อฉันเข้าใจผลลัพธ์ (ชุด) ฉันจะพูดถึงผลลัพธ์เหล่านี้กับคนที่ฉันทำงานด้วยซึ่งส่วนใหญ่ไม่ทำงานในทางทฤษฎีเช่นกัน ในช่วงหนึ่งของการสนทนาคำถามต่อไปนี้เกิดขึ้น:

เมื่อใดที่ไม่บอกว่าอัลกอริธึมที่ให้มาสองตัวนั้น "คล้ายกัน"?

ฉันหมายถึงอะไร "คล้ายกัน"? ให้เราบอกว่าอัลกอริธึมทั้งสองนั้นมีความคล้ายคลึงกันถ้าคุณสามารถเรียกร้องข้อใดข้อหนึ่งต่อไปนี้ในกระดาษโดยไม่ทำให้ผู้ตรวจสอบเกิดความสับสน / น่ารำคาญ (ให้คำจำกัดความที่ดีขึ้น)

การอ้างสิทธิ์ 1. "อัลกอริทึมซึ่งคล้ายกับอัลกอริทึมBก็สามารถแก้ปัญหาX ได้เช่นกัน "ABX

อ้างสิทธิ์ 2 "อัลกอริทึมของเราคล้ายกับอัลกอริทึม "C

ขอผมเจาะจงหน่อยหน่อย สมมติว่าเรากำลังทำงานกับอัลกอริธึมกราฟ เงื่อนไขแรกที่จำเป็นบางประการสำหรับอัลกอริทึมทั้งสองจะคล้ายกัน:

  1. พวกเขาจะต้องแก้ไขปัญหาเดียวกัน
  2. พวกเขาจะต้องมีความคิดที่ใช้งานง่ายในระดับสูงเดียวกัน

ตัวอย่างเช่นการพูดคุยเกี่ยวกับการสำรวจเส้นทางด้วยกราฟการสำรวจเส้นทางแบบกว้างแรกและลึกแรกตรงตามเงื่อนไขสองข้อข้างต้น สำหรับการคำนวณเส้นทางที่สั้นที่สุดอัลกอริธึมที่กว้างที่สุดและ Dijkstra เป็นไปตามเงื่อนไขสองประการข้างต้น เป็นต้น

เงื่อนไขเหล่านี้เพียงพอหรือไม่ โดยเฉพาะอย่างยิ่งสมมติว่าอัลกอริธึมสองประการเป็นไปตามเงื่อนไขที่จำเป็นเพื่อให้คล้ายคลึงกัน คุณจะเรียกมันว่าคล้ายกันได้ไหมถ้า

  1. พวกมันมีประสิทธิภาพแบบซีมโทติคแตกต่างกันอย่างไร
  2. สำหรับการเรียนพิเศษของกราฟหนึ่งขั้นตอนวิธีการต้องเวลาในขณะที่คนอื่น ๆ ต้องใช้O ( n 1 / 3 )Ω(n)O(n1/3)เวลาหรือไม่
  3. พวกเขามีเงื่อนไขการยกเลิกที่แตกต่างกันอย่างไร (จำได้ว่าพวกเขากำลังแก้ปัญหาเดียวกัน)
  4. ขั้นตอนการประมวลผลล่วงหน้าแตกต่างกันในสองอัลกอริทึมหรือไม่
  5. ความซับซ้อนของหน่วยความจำแตกต่างกันในสองอัลกอริทึมหรือไม่

แก้ไข: คำถามนั้นขึ้นอยู่กับบริบทอย่างชัดเจนและเป็นอัตนัย ฉันหวังว่าเงื่อนไขห้าข้อข้างต้นจะอนุญาตให้รับคำแนะนำได้บ้าง ฉันยินดีที่จะแก้ไขคำถามเพิ่มเติมและให้รายละเอียดเพิ่มเติมหากจำเป็นเพื่อรับคำตอบ ขอบคุณ!


1
มันขึ้นอยู่กับบริบทจริงๆ ตัวอย่างเช่นสำหรับอัลกอริทึมต่อเนื่องบางอย่าง DFS และ BFS นั้นแตกต่างกันมากและบางอันอาจไม่ทำงาน ในการตั้งค่าแบบขนาน DFS (หรืออย่างน้อยหนึ่งชุดตัวเลือก) คือ P-complete ในขณะที่ BFS คือ "easy in parallel"
Suresh Venkat

@SureshVenkat - ฉันยอมรับว่าคำถามนั้นขึ้นอยู่กับบริบทเป็นอย่างมาก ในความสนใจที่จะไม่เริ่มการถกเถียงกันผมงดเว้นจากการตั้งชื่อ "อัลกอริธึมทั้งสอง" ที่เสี่ยงต่อการทำให้เกิดความคลุมเครือ :-)
Rachit

4
ปัญหาคือว่ามีใกล้และมีปิด มีวิธีคิดวิธีการปรับปรุงน้ำหนักแบบ multiplicative เป็น "โดยพื้นฐานแล้วเป็นการค้นหาแบบไบนารี่" แต่ในบริบทที่ไม่ถูกต้องสิ่งนี้จะฟังดูบ้า FWIW ในทุกกรณีของคุณด้านบนฉันสามารถจินตนาการได้ว่าการประกาศอัลกอริทึมทั้งสองนั้นแตกต่างกัน
Suresh Venkat

1
คำถามนี้ดูเหมือนว่าฉันไม่ชอบใจ คุณมักจะขอคำจำกัดความของ "ที่คล้ายกัน" เมื่อไม่มีคำนิยามที่เป็นที่ยอมรับ
Joe

1
ค่อนข้างเกี่ยวข้อง: cstheory.stackexchange.com/questions/9409/…
Radu GRIGore

คำตอบ:


23

มันเป็นปัญหาที่ยากที่จะให้คำจำกัดความที่สอดคล้องกันของ "Algorithm A คล้ายกับ Algorithm B" สำหรับหนึ่งฉันไม่คิดว่า "พวกเขาจะต้องแก้ปัญหาเดียวกัน" เป็นเงื่อนไขที่จำเป็น บ่อยครั้งเมื่อมีคนกล่าวไว้ในกระดาษว่า "อัลกอริทึมของทฤษฎีบท2นั้นคล้ายคลึงกับอัลกอริทึมBในทฤษฎีบท1 " อัลกอริทึมAจริง ๆ แล้วแก้ปัญหาที่แตกต่างกว่าของBA2B1ABแต่มีการแก้ไขเล็กน้อยเพื่อจัดการปัญหาใหม่ .

แม้แต่พยายามกำหนดว่าอัลกอริธึมสองอย่างนั้นหมายความว่าอะไร นั้นเหมือนกันเป็นปัญหาที่น่าสนใจและยากหรือไม่ ดูกระดาษ "เมื่อสองอัลกอริทึมเหมือนกันคืออะไร" http://research.microsoft.com/~gurevich/Opera/192.pdf


17

บ่อยกว่าไม่ได้หมายความว่า "ฉันไม่ต้องการเขียน Algorithm B ในรายละเอียดเพราะรายละเอียดที่น่าสนใจเกือบจะเหมือนกับใน Algorithm A และฉันไม่ต้องการเกินขีด จำกัด 10 หน้า และกำหนดส่งจะต้องเสร็จภายในสามชั่วโมง "


7

หากคุณหมายถึง "คล้ายกัน" ในความหมายของภาษาพูดฉันคิดว่าคำตอบของ JeffE รวบรวมความหมายของบางคน

ในแง่เทคนิคแล้วมันขึ้นอยู่กับสิ่งที่คุณใส่ใจ หากความซับซ้อนของเวลาแบบเชิงเส้นคือสิ่งที่คุณใส่ใจความแตกต่างระหว่างการเรียกซ้ำและการวนซ้ำอาจไม่สำคัญ หากความสามารถในการคำนวณนั้นเป็นสิ่งที่คุณใส่ใจความแตกต่างระหว่างตัวแปรตัวนับและสแต็กหนึ่งสัญลักษณ์ไม่สำคัญ

ในการเปรียบเทียบอัลกอริธึมขั้นตอนแรกคือการทำให้ความคิดของความเท่าเทียมมีความแม่นยำ สังหรณ์ใจให้เป็นพื้นที่ของขั้นตอนวิธีและMมีพื้นที่ของวัตถุทางคณิตศาสตร์และs อี : Mจะมีการเข้ารหัสฟังก์ชันที่s อีเมตร ( P )คือความหมายของอัลกอริทึมP space Mสามารถมีอะไรก็ได้ตั้งแต่จำนวนตัวแปรในอัลกอริทึมของคุณไปจนถึงกราฟสถานะหรือความซับซ้อนของเวลา ฉันไม่เชื่อว่ามีความคิดที่แน่นอนว่าMสามารถเป็นอะไรได้ ได้รับMAMsem:AMsem(P)PMMMแม้ว่าเราสามารถพูดได้ว่าอัลกอริธึมสองตัวนั้นเทียบเท่ากันถ้าเท่ากับs e m ( Q )sem(P)sem(Q) )ให้ฉันเพิ่มว่าฉันคิดว่าเกณฑ์ห้าข้อที่คุณกล่าวถึงนั้นสามารถทำเป็นคณิตศาสตร์ได้ในลักษณะนี้

หากเราต้องการพูดคุยเกี่ยวกับอัลกอริทึมทั่วไปมากกว่าอีกอัน (หรืออัลกอริธึมการกลั่นกรองอื่น) ฉันจะมอบมีโครงสร้างมากขึ้น ลองจินตนาการว่า( M , )เป็นส่วนชุดที่สั่งและคำสั่งx Yถอดรหัสว่าxเป็นวัตถุที่กำหนดไว้มากขึ้นกว่าปี ตัวอย่างเช่นถ้าMมีชุดร่องรอยของอัลกอริทึมและคือการรวมชุดs e m ( P ) s e m ( Q )หมายความว่าทุกร่องรอยของPM(M,)xyxyMsem(P)sem(Q)PQPQ

M

โดยทั่วไปแล้วฉันจะถาม - คุณสนใจอะไร (ในแง่ที่เข้าใจง่าย) วัตถุทางคณิตศาสตร์ที่แสดงถึงคุณสมบัติที่ใช้งานง่ายเหล่านี้ฉันจะแมปจากอัลกอริทึมไปยังวัตถุเหล่านี้ได้อย่างไรและโครงสร้างของพื้นที่นี้คืออะไร ฉันก็จะถามว่าพื้นที่ของวัตถุสนุกกับโครงสร้างเพียงพอที่จะยอมรับความคิดของความคล้ายคลึงกัน นี่คือวิธีที่ฉันจะใช้มาจากมุมมองความหมายของภาษาโปรแกรม ฉันไม่แน่ใจว่าคุณคิดว่าวิธีการนี้น่าสนใจหรือไม่เพราะได้รับวัฒนธรรมความคิดที่แตกต่างกันอย่างมากมายในวิทยาการคอมพิวเตอร์


5

ตามคำตอบของเจฟฟ์อัลกอริธึมสองอย่างจะคล้ายกันหากผู้เขียนคนหนึ่งคาดว่าผู้เขียนคนอื่นอาจจะทบทวนบทความของเธอ

แต่พูดเล่นกันในชุมชนทฤษฎีฉันจะบอกว่าสิ่งที่เป็นปัญหาการแก้ปัญหาอัลกอริธึมที่ค่อนข้างจะว่ามันเป็น "คล้าย" กับอัลกอริธึม B ซึ่งอาจจะแก้ปัญหาที่แตกต่างไปจากเดิมอย่างสิ้นเชิง A คล้ายกับ B ถ้ามัน "ทำงาน" เพราะความคิดทางทฤษฎีหลักเดียวกัน ตัวอย่างเช่นเป็นแนวคิดหลักในอัลกอริทึมทั้งสองที่คุณสามารถฉายข้อมูลลงในพื้นที่มิติที่ต่ำกว่ามากรักษาบรรทัดฐานด้วยบทแทรกของ Johnson-Lindenstrauss แล้วทำการค้นหาที่โหดร้าย? จากนั้นอัลกอริทึมของคุณจะคล้ายกับอัลกอริธึมอื่น ๆ ที่ทำสิ่งนี้ไม่ว่าคุณจะแก้ไขปัญหาอะไร มีเทคนิคอัลกอริทึมหนักจำนวนน้อยที่สามารถใช้ในการแก้ปัญหาที่หลากหลายได้และฉันคิดว่าเทคนิคเหล่านี้ก่อให้เกิด centroids ของอัลกอริทึม "คล้ายกัน" หลายชุด


3

คำถามที่น่าสนใจมากและกระดาษที่ดีมากไรอัน!

ฉันเห็นด้วยอย่างแน่นอนกับแนวคิดที่ว่าการประเมินความคล้ายคลึงกันโดยรวมระหว่างอัลกอริทึมส่วนใหญ่เป็นการตัดสินใจตามอัตวิสัย ในขณะที่จากมุมมองทางเทคนิคมีจำนวนของคุณสมบัติที่สังเกตอย่างใกล้ชิดเพื่อตัดสินใจเกี่ยวกับความคล้ายคลึงกันของอัลกอริทึมในที่สุดก็เป็นเรื่องของรสนิยมส่วนตัว ฉันจะพยายามให้คำอธิบายถึงความสำคัญของทั้งสองด้านของเหรียญเดียวกันในขณะที่อ้างถึงประเด็นเฉพาะของคำถามของคุณ:

จากมุมมองทางเทคนิค:

  1. ไรอันแล้วชี้ให้เห็นว่าขั้นตอนวิธีการทั้งสองจะต้องแก้ปัญหาเดียวกัน เราสามารถไปไกลกว่านี้และทำให้ความคิดทั่วไปโดยพูดว่าปกติแล้วมันเพียงพอที่จะพิสูจน์ว่ามีการแปลงพหุนามของอินสแตนซ์เดียวกันที่เข้าใจได้โดยอัลกอริทึม A เพื่อให้อัลกอริทึม B สามารถจัดการได้ อย่างไรก็ตามนี่จะอ่อนแอจริง ๆ ฉันชอบที่จะคิดถึงความคล้ายคลึงกันในแง่ที่แข็งแกร่งกว่า
  2. อย่างไรก็ตามฉันไม่เคยคาดหวังว่าอัลกอริทึมที่เทียบเท่ากันสองรายการจะมีความคิดที่ใช้งานง่ายเหมือนกัน --- อีกครั้งนี่คือคำจำกัดความที่ไม่สามารถจับภาพได้ง่าย ยิ่งไปกว่านั้นมันมักจะเป็นกรณีที่อัลกอริทึมที่ถือว่าคล้ายกันไม่เป็นไปตามเหตุผลหลัก ลองพิจารณาตัวอย่างอัลกอริทึมการเรียงลำดับซึ่งมีต้นกำเนิดในรูปแบบที่แตกต่างกันตามแนวคิดที่แตกต่างกัน เป็นตัวอย่างที่ดีพิจารณาขั้นตอนวิธีทางพันธุกรรมซึ่งมักจะได้รับการพิจารณาโดยชุมชนทางคณิตศาสตร์เช่นเดียวกับกระบวนการสุ่ม
  3. ยิ่งไปกว่านั้นฉันยังจะพูดถึงความคิดนี้เพื่อพูดว่าเทคนิคอื่น ๆ เช่นเงื่อนไขการเลิกจ้างหรือขั้นตอนการประมวลผลก่อนไม่สำคัญ แต่นี่ไม่ใช่กรณีเสมอไป ดูตัวอย่างของ Dijkstra อัลกอริทึมเมื่อเทียบกับค่าใช้จ่ายในเครื่องแบบค้นหาหรือคดีของ Dijkstra อัลกอริทึม อัลกอริทึมทั้งสองนั้นใกล้เคียงกันซึ่งคนส่วนใหญ่ไม่ได้บอกความแตกต่าง แต่ความแตกต่าง (เป็นเรื่องทางเทคนิค) มีความสำคัญมากสำหรับผู้เขียนบทความนั้น สิ่งที่เหมือนกันมากเกิดขึ้นกับขั้นตอนการประมวลผลล่วงหน้า ในกรณีที่คุณคุ้นเคยกับยังไม่มีข้อความ-puzzle จากนั้นสังเกตว่า A* * * *อัลกอริทึมการค้นหาแบบเดียวกันโดยใช้ระยะทางแมนฮัตตันหรือ (ยังไม่มีข้อความ2-1)ฐานข้อมูลรูปแบบเพิ่มเติมจะขยายจำนวนโหนดเท่ากันในลำดับเดียวกันและทำให้ทั้งสองอัลกอริทึม (และฮิวริสติกของพวกเขา) นั้นเท่าเทียมกันอย่างเคร่งครัดในแง่ที่แข็งแกร่งมากในขณะที่วิธีแรกไม่มีการประมวลผลล่วงหน้าและอันที่สอง มีค่าใช้จ่ายที่สำคัญก่อนที่จะเริ่มต้นในการแก้ปัญหาตัวอย่าง อย่างไรก็ตามเมื่อฐานข้อมูลรูปแบบของคุณพิจารณาการโต้ตอบที่คล้ายคลึงกันมากขึ้นจะมีช่องว่างขนาดใหญ่ในการทำงานระหว่างพวกเขาดังนั้นพวกเขาจึงมีความคิด / อัลกอริทึมที่แตกต่างกันอย่างแน่นอน
  4. เป็นเรื่องของความเป็นจริงผมคิดว่าคนส่วนใหญ่จะตัดสินขั้นตอนวิธีการของพวกเขาสำหรับวัตถุประสงค์และประสิทธิภาพการทำงาน ดังนั้นประสิทธิภาพของแอมป์โทติคจึงเป็นตัวชี้วัดที่ดีสำหรับเหตุผลเกี่ยวกับความคล้ายคลึงกันระหว่างโปรแกรม อย่างไรก็ตามโปรดจำไว้ว่าประสิทธิภาพนี้ไม่จำเป็นต้องเป็นกรณีทั่วไปดังนั้นหากอัลกอริธึมสองตัวมีประสิทธิภาพเชิงซีมโทติคเหมือนกัน แต่ทำงานในทางปฏิบัติแตกต่างกันคุณอาจสรุปได้ว่ามันแตกต่างกัน หลักฐานที่ชัดเจนในเรื่องนี้ก็คือว่าอัลกอริทึมทั้งสองมีประสิทธิภาพการทำงานที่เหมือนกันทั้งในเวลาและหน่วยความจำ (และตามที่ Suresh กล่าวว่าทำให้ DFS และ BFS ดูแตกต่าง) ในกรณีที่คำยืนยันนี้ไม่ได้ฟังดูน่าเชื่อถือสำหรับคุณโปรดอ้างอิงหนังสือยอดเยี่ยม (และหนังสือแนะนำมาก): Programming the the Universeโดย Seth Lloyd ในหน้า 189 เขาอ้างถึงรายการที่มีการวัดความซับซ้อนมากกว่า 30 รายการที่สามารถใช้พิจารณาว่าอัลกอริทึมนั้นแตกต่างกันอย่างไร

แล้วอะไรที่ทำให้อัลกอริทึมนั้นเหมือนหรือแตกต่างกัน? ในมุมมองของฉัน (และนี่เป็นการเก็งกำไรล้วน ๆ ) ความแตกต่างที่สำคัญคือสิ่งที่พวกเขาแนะนำให้คุณ อัลกอริทึมจำนวนมาก (มาก!) แตกต่างกันในด้านเทคนิคไม่กี่เมื่อให้บริการเพื่อวัตถุประสงค์เดียวกันเพื่อให้กรณีทั่วไปแตกต่างกันสำหรับช่วงที่แตกต่างกันของอินพุต อย่างไรก็ตามความแตกต่างที่ยิ่งใหญ่ที่สุดคือ (ต่อตาฉัน) สิ่งที่พวกเขาแนะนำให้คุณ อัลกอริทึมมีความสามารถที่แตกต่างกันดังนั้นจุดแข็งและจุดอ่อนของตนเอง หากอัลกอริทึมสองดูเหมือนว่าจะเหมือนกัน แต่อาจขยายในวิธีที่แตกต่างกันเพื่อรับมือกับกรณีที่แตกต่างกันแล้วฉันจะสรุปได้ว่าพวกเขาจะแตกต่างกัน อย่างไรก็ตามบ่อยครั้งที่อัลกอริธึมสองอย่างนั้นดูเหมือนกันมากดังนั้นคุณจะถือว่าพวกเขาเหมือนกัน ... จนกระทั่งมีคนมาถึงความแตกต่างที่สำคัญและทันใดนั้นมันต่างกันอย่างสิ้นเชิง!

ขออภัยคำตอบของฉันอยู่ในท้ายที่สุดแล้ว ...

ไชโย


1
อันที่จริงไรอันแนะนำว่าไม่จำเป็นสำหรับอัลกอริทึมทั้งสองในการแก้ปัญหาเดียวกัน
Jeffε

ความจริง! ฉันแค่รวบรวมความคิดเห็นของฉันในเรื่องนี้ แต่คุณพูดถูก!
Carlos Linares López

2

การกล่าวถึงความคล้ายคลึงกันใด ๆ โดยไม่ได้กำหนดความคล้ายคลึงกันของตัวชี้วัดนั้นไม่ได้กำหนดไว้อย่างชัดเจน มีหลายวิธีที่อัลกอริทึมสองแบบสามารถเหมือนกันได้:

Quicksort และ Mergesort แก้ปัญหาที่คล้ายกันมาก แต่ใช้อัลกอริทึมที่แตกต่างกันในการทำเช่นนั้น พวกเขามีความซับซ้อนของอัลกอริทึมที่คล้ายกัน Quicksort และ Mergesort นั้นคล้ายกับ Bubblesort แต่ Bubblesort มีตัวชี้วัดประสิทธิภาพที่แตกต่างกันมาก หากคุณไม่สนใจสถิติความซับซ้อน Quicksort การควบรวมกิจการและ Bubblesort ทั้งหมดจะอยู่ในระดับความเท่าเทียมกันเดียวกัน อย่างไรก็ตามหากคุณสนใจเกี่ยวกับความซับซ้อนของอัลกอริทึมดังนั้น Quicksort และ Mergesort จะคล้ายกันมากยิ่งกว่า Bubblesort

การเขียนโปรแกรมแบบไดนามิก Smith-Waterman และความพยายามในการเปรียบเทียบลำดับ HMM เพื่อแก้ไขปัญหาของการจัดแนวสองลำดับ อย่างไรก็ตามพวกเขาใช้อินพุตที่แตกต่างกัน Smith-Waterman รับสองลำดับเป็นอินพุตและการเปรียบเทียบลำดับ HMM ใช้ HMM และลำดับเป็นอินพุต ทั้งการจัดเรียงลำดับผลลัพธ์ ในแง่ของแรงบันดาลใจความคิดทั้งสองนี้มีความคล้ายคลึงกับการแก้ไขของ Levenshteinแต่อยู่ในระดับสูงมาก

นี่คือเกณฑ์บางประการที่อัลกอริทึมสองตัวอาจเรียกว่าคล้ายกัน:

  1. ประเภทอินพุต / เอาต์พุต
  2. ความซับซ้อนของอัลกอริทึม / หน่วยความจำ
  3. ข้อสมมติฐานเกี่ยวกับประเภทของอินพุต (เช่นตัวเลขบวกเท่านั้นหรือความเสถียรของจุดลอยตัว)
  4. ความสัมพันธ์ซ้อน (เช่นอัลกอริทึมบางกรณีเป็นกรณีพิเศษของผู้อื่น)

การตัดสินใจที่สำคัญเกี่ยวกับความหมายของความคล้ายคลึงกันยังคงอยู่ บางครั้งคุณสนใจความซับซ้อนของอัลกอริทึมบางครั้งคุณไม่ เนื่องจากคำจำกัดความของความคล้ายคลึงกันขึ้นอยู่กับบริบทของการสนทนาคำว่า "อัลกอริทึมที่คล้ายกัน" จึงไม่ได้กำหนดไว้อย่างชัดเจน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.