ตัวเลือก“ -d” มีผลกระทบอะไรกับ diff


24

การdiffใช้งานบน OpenBSD มี-dตัวเลือกที่ไม่ได้มาตรฐานพร้อมเอกสารดังต่อไปนี้:

-d

พยายามอย่างหนักในการสร้างส่วนต่างให้เล็กที่สุด สิ่งนี้อาจใช้กำลังการประมวลผลและหน่วยความจำจำนวนมากเมื่อประมวลผลไฟล์ขนาดใหญ่ที่มีการเปลี่ยนแปลงมากมาย

diffการนำGNU ไปใช้นั้นมีตัวเลือกเดียวกันกับเอกสารที่สั้นกว่า

-d, --minimal

พยายามอย่างหนักเพื่อหาชุดการเปลี่ยนแปลงที่มีขนาดเล็กลง

บางครั้งฉันใช้ตัวเลือกนี้เพื่อดูว่ามันสร้างเอาต์พุตที่มีรูปร่างหรือรูปแบบที่แตกต่างจากdiffคำสั่งเดียวกันโดยไม่มีตัวเลือกหรือไม่ แต่ฉันไม่เคยเห็นความแตกต่างเลย

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

การเดาที่ไร้การศึกษาก็คือมันเกี่ยวข้องกับการล่าสัตว์ที่มีขนาดใหญ่มาก


1
unix.stackexchange.com/questions/472528ป่องๆอยากรู้อยากเห็นของคุณมันได้หรือไม่ (-:
JdeBP

@JdeBP ใช่แน่นอน มันทำให้ฉันนึกถึงธงนี้และความจริงที่ว่าฉันไม่รู้ว่ามันทำอะไรเพราะฉันไม่เคยเห็นมันทำอะไรเลย
Kusalananda

1
info diff performanceอธิบายมัน IIRC
Stéphane Chazelas

1
ที่เกี่ยวข้องอย่างชัดเจน น่าเสียดายที่ไม่มีตัวอย่างของไมเออร์ -> ผลลัพธ์ขั้นต่ำสุด
Isaac

1
ฉันต้องการได้รับตัวอย่างที่จะสร้างผลลัพธ์ที่แตกต่างด้วยgdiff -dเพื่อตรวจสอบว่าการเพิ่มเติมไปยัง OpenBSD มีประโยชน์หรือไม่ จากการทดสอบของฉันฉันไม่สามารถรับความแตกต่างได้ แต่เห็นได้ชัดว่ารหัส OpenBSD ทำให้ประสิทธิภาพการทำงานช้าลงซึ่งดูเหมือนว่าจะส่งผลกระทบอย่างมีนัยสำคัญเนื่องจากอัลกอริทึม diff จาก Douglas McIlroy นั้นเร็วกว่า gdiff ตราบใดที่คุณใช้ขนาดไฟล์ปกติ
schily

คำตอบ:


15

ใน GNU diffยังใช้กับ FreeBSD ด้วยเช่นกันการ--minimalตั้งค่าสถานะก่อให้เกิดการเปลี่ยนแปลงอัลกอริทึมโดย Paul Eggert ซึ่งทำให้ "เพื่อ จำกัด ต้นทุนให้O(N**1.5 log N)กับราคาของการผลิตเอาต์พุตย่อยที่ไม่ดีสำหรับอินพุตขนาดใหญ่ที่มีความแตกต่าง" โดยเฉพาะอย่างยิ่งมันทำให้ไม่สามารถใช้ฮิวริสติกหลายแบบที่จัดการในการค้นหาเพียงใกล้เคียงกับวิธีแก้ปัญหาที่ดีที่สุดและในการโยนเส้น "สับสน" เป็นความแตกต่างพิเศษ

ใน OpenBSD diffซึ่งใช้diffอัลกอริทึมUnix รุ่นเก่าจากปี 1970 อัลกอริธึมที่ใช้จะได้รับการให้เครดิตกับ Harold Stone และการ--minimalตั้งค่าสถานะจะกระตุ้นการค้นหาที่ (ยกเลิกได้อย่างมีประสิทธิภาพ) ล้อมรอบด้วยค่าสูงสุดของจำนวนเต็มที่ไม่ได้ลงนามแทน ของขนาดของช่วงของบรรทัดที่ถูกเปรียบเทียบ (หรือ 256 ถ้ามันมากกว่า)

อ่านเพิ่มเติม


1
เมื่อฉันสร้างความแตกต่างที่ดีกว่าจากแหล่ง UNIX ฉันตรวจสอบว่าการปรับปรุง OpenBSD และไม่พบผลลัพธ์ที่ดีกว่านี้อีก โปรดทราบว่าฟังก์ชั่นหินต้นฉบับ () ใช้: `} ในขณะที่ ((y = b [++ j])> 0);` และ BTW: สำหรับขนาดไฟล์ปกติ UNIX ที่ได้รับการปรับปรุงของฉันเร็วกว่า diff GNU
Schily
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.