ทำไม DFS ถึงถูกพิจารณาให้มี


11

ตามบันทึกเหล่านี้ , DFSถือว่ามีความซับซ้อนของพื้นที่ที่เป็นปัจจัยที่แผ่กิ่งก้านของต้นไม้และมีความยาวสูงสุดของเส้นทางใด ๆ ในพื้นที่รัฐO(ม.)ม.

เป็นเหมือนกันกล่าวว่าในเรื่องนี้หน้าวิกิตำราบนไม่รู้ค้นหา

ตอนนี้ "กล่องข้อมูล" ของบทความ Wikipedia บน DFSนำเสนอต่อไปนี้สำหรับความซับซ้อนของพื้นที่ของอัลกอริทึม:

O(|V|)หากกราฟทั้งหมดถูกสำรวจโดยไม่มีการทำซ้ำค้นหาความยาวพา ธ ที่ยาวที่สุดสำหรับกราฟโดยนัยโดยไม่ต้องกำจัดโหนดซ้ำO()

ซึ่งคล้ายกับสิ่งที่ฉันคิดว่ามีความซับซ้อนของพื้นที่ของ DFS เช่นโดยที่คือความยาวสูงสุดที่อัลกอริธึมถึงO(ม.)ม.

เหตุใดฉันจึงคิดว่าเป็นเช่นนี้

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

ยิ่งไปกว่านั้นจากบทความนี้เกี่ยวกับIDA *โดยRichard Korfความซับซ้อนของพื้นที่ของ DFS คือโดยที่ถูกพิจารณาว่าเป็น "cutoff เชิงลึก"O(d)d

ดังนั้นความซับซ้อนของพื้นที่ที่ถูกต้องของ DFS คืออะไร?

ฉันคิดว่ามันอาจขึ้นอยู่กับการนำไปใช้ดังนั้นฉันขอขอบคุณคำอธิบายเกี่ยวกับความซับซ้อนของพื้นที่สำหรับการนำไปปฏิบัติต่าง ๆ ที่รู้จัก


DFS is considered to […] of the treeไม่ทุกกราฟสำรวจความลึกครั้งแรกเป็นต้นไม้
greybeard

มีความแตกต่างระหว่างการพูดว่า "นี่การใช้งาน DFS ที่นี่มีราคา X" และ "DFS สามารถนำไปใช้เพื่อให้มีค่า X" ดังนั้นดูเหมือนว่าจะมีการโต้แย้งเกี่ยวกับงบที่แตกต่างของประเภทที่สองซึ่งไม่จำเป็นต้องขัดแย้งกันเลย (โปรดสังเกตว่าไม่มีความขัดแย้งเลยตั้งแต่ถ้าหมายถึงอะไรเลย)O(ม.)O(ม.)O(ม.)
Raphael

@greybeard คุณช่วยบอกฉันตัวอย่างที่การสำรวจเส้นทางลึกครั้งแรกบนกราฟจะไม่ส่งผลให้ต้นไม้หรือไม่
nbro

example where a depth-first traversal on a graph would not result in a treeโดยไม่ให้ความคิดมากเกินไป: การแยกวิเคราะห์ (รอ: สิ่งที่คุณหมายถึง: result in a tree? คำถามคือเกี่ยวกับการค้นหา / traversing กราฟ.)
greybeard

1
@greybeard ตามคำจำกัดความทั้งหมดที่ฉันพบมา ค้นหาคำจำกัดความที่จะไปหาโหนดจากนั้นเราสามารถพูดคุยเกี่ยวกับมัน
nbro

คำตอบ:


7

มันขึ้นอยู่กับสิ่งที่คุณเรียกว่า DFS ลองพิจารณาตัวอย่างอัลกอริทึม DFS ซ้ำแล้วซ้ำอีกที่อธิบายไว้ในWikipediaและสมมติว่าคุณรันบนต้นไม้เพื่อที่คุณจะได้ไม่ต้องติดตามว่าโหนดใดที่คุณเคยเยี่ยมชมแล้ว สมมติว่าคุณรันเสร็จสมบูรณ์- ต้นไม้แห่งความลึก ม.. เราสามารถระบุโหนดในต้นไม้ของพวกเขาด้วยคำพูดมากกว่า[] ความยาวสูงสุด ม.. อัลกอริทึมทำงานดังนี้:

  1. เริ่มต้นที่รูท ดัน1,2,..., กับสแต็ก (เรียงลำดับกลับกัน)

  2. ป๊อปอัพ 1และกด 11,12,...,1 เพื่อสแต็ค

  3. ป๊อปอัพ 11และกด 111,112,...,11 เพื่อสแต็ค

  4. ...

  5. ป๊อปอัพ 1ม.-1และกด 1ม.,1ม.-12,...,1ม.-1 เพื่อสแต็ค

ณ จุดนี้สแตกประกอบด้วย

1ม.,1ม.-12,...,1ม.-1,...,112,...,11,12,...,1,2,...,,

รวมเป็น (-1)ม.+1โหนด คุณสามารถตรวจสอบว่านี่เป็นไพน์ในเวลาที่ขนาดของสแต็กถูกขยายใหญ่สุด


2
ไพนต์ในเวลาทำให้แพทย์ออกไป
greybeard

3

มีสองจุดที่นี่เพื่อทำ:

  1. ในกรณีที่คุณแนะนำลงในสแต็กสืบทอดทั้งหมดของโหนดปัจจุบันอย่างมีประสิทธิภาพความซับซ้อนของพื้นที่คือ O(d) ที่ไหน เป็นปัจจัยการแตกแขนงและ dความยาวสูงสุดคือ คำตอบของ Yuval Filmus หมายถึงกรณีนี้แน่นอน อย่างไรก็ตามโปรดทราบว่าโดยทั่วไปd มีขนาดใหญ่กว่ามาก . ยิ่งไปกว่านั้นในหลาย ๆ โดเมนเช่นปริศนาตัวต่อเลื่อน มีขอบเขตบนที่คงที่ (ในกรณีเฉพาะนั้น 4) และด้วยเหตุนี้เราสามารถพูดได้อย่างปลอดภัยว่า DFS มีความซับซ้อนของพื้นที่ซึ่ง O(d).

  2. อย่างไรก็ตามเป็นที่ยอมรับไม่ได้ทุกกรณี ตัวอย่างเช่นในตัวต่อแพนเค้กตัวประกอบการแตกแขนงจะเติบโตขึ้นตามความยาวของทางออกที่ดีที่สุดและพวกมันทั้งคู่มีค่าใกล้เคียงกัน ถึงกระนั้นความซับซ้อนของพื้นที่ก็คือO(d). หากต้องการดูสิ่งนี้เพียงแค่ปรับแต่งขั้นตอนการขยายตัวของโหนดใด ๆ แทนการแทรกลูกหลานทั้งหมดของโหนดปัจจุบัน (ตามที่ Yuval Filmus แนะนำ) แทรกไว้ตามลำดับ คุณสร้างผู้สืบทอดที่หนึ่งก่อนและทันทีหลังจากที่คุณดำเนินการตามลำดับความลึกก่อน --- ตามความจริงคุณไม่จำเป็นต้องมีผู้สืบทอดอื่น ๆ ณ จุดนี้ ในกรณีที่คุณย้อนกลับไปที่โหนดนี้ผู้สืบทอดจะถูกลบออกจากสแต็ก ถัดไปสร้างผู้สืบทอดที่สองและดำเนินการตามลำดับเชิงลึกก่อนอีกครั้ง ในกรณีที่คุณย้อนกลับไปที่โหนดนี้จากนั้นสร้างที่สามเป็นต้นไปจนกว่าจะไม่มีทายาทอีก ดำเนินการต่อด้วยวิธีนี้คุณจะมีd โหนดในสแต็กของคุณไม่ว่าปัจจัยการแบรนช์ .

สรุปฉันจะไม่บอกว่า DFS มีความซับซ้อนของพื้นที่ซึ่งก็คือ O(d) และฉันขออ้างว่าความซับซ้อนของพื้นที่แทน O(d).

หวังว่าจะช่วยได้

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