การวิเคราะห์เวลาอัลกอริทึม“ ขนาดอินพุต” กับ“ องค์ประกอบอินพุต”


13

ฉันยังสับสนอยู่บ้างกับคำว่า "ความยาวขาเข้า" และ "ขนาดอินพุต" เมื่อใช้ในการวิเคราะห์และอธิบายขอบเขตบนที่ไม่มีอาการสำหรับอัลกอริทึม

ดูเหมือนว่าความยาวของอัลกอริทึมนั้นขึ้นอยู่กับชนิดของข้อมูลจำนวนมากและอัลกอริทึมที่คุณกำลังพูดถึง

ผู้เขียนบางคนอ้างถึงความยาวอินพุตกับขนาดของอักขระที่ต้องใช้เพื่อแสดงอินพุตดังนั้น "abcde" หากใช้เป็นชุดอินพุตในอัลกอริทึมจะมี "ความยาวอินพุต" 6 ตัว

หากแทนที่จะเป็นตัวอักษรเรามีจำนวน (เช่นจำนวนเต็ม) บางครั้งการแทนแบบไบนารี่จะใช้แทนตัวอักษรดังนั้น "ความยาวอินพุต" จะถูกคำนวณเป็น (เป็น L เป็นจำนวนสูงสุดในชุดอินพุต)Nlog(L)

มีปัญหาอื่น ๆ ที่แม้ว่าชุดอินพุตเป็นตัวเลข แต่พวกเขาอธิบาย "ความยาวอินพุต" เป็น "ตัวแปรการตัดสินใจ" ดังนั้นสำหรับชุดอินพุตความยาว N ที่มีตัวเลขในช่วงความยาวอินพุตนั้นคือ เพียงแค่ N (ผลรวมย่อยเช่น) หรือยิ่งซับซ้อนจำนวนของค่าสถานที่ไบนารีที่ใช้ในการระบุปัญหา (สิ่งที่ฉันเชื่อว่าเป็นเพียงเช่นเดียวกับ ) N l o g ( L )0232Nlog(L)

ดังนั้น:

  • ขึ้นอยู่กับอัลกอริทึมหรือไม่
  • อะไรคือสิ่งที่และเมื่อใดที่จะใช้ "รุ่น" ความยาวอินพุตแต่ละอัน
  • มีกฎบางอย่างที่ฉันสามารถใช้ในการตัดสินใจว่าจะใช้กฎข้อใด

คำตอบ:


10

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

แน่นอนว่ามันค่อนข้างเป็นนามธรรมและยากมากที่จะทำงานกับในทางปฏิบัติหรืออย่างน้อยก็น่ารำคาญมาก - เราจะต้องพิจารณาว่าเราจะระบุ delimeter เป็นต้น ฯลฯ สิ่งที่เกิดขึ้นตามปกติในทางปฏิบัติคือเรามองหา การวัดพร็อกซีของขนาดของอินพุต - สิ่งที่สะดวกและเข้าถึงได้มากขึ้น แต่นั่นไม่ทำให้เกิดปัญหาทางคณิตศาสตร์ใด ๆ ในการวิเคราะห์ของเรา

ใช้ตัวอย่าง "abcde" ของคุณมันจะเป็นกรณีที่ตัวอักษรที่เราใช้สำหรับอินพุตมีขนาดเล็กดังนั้นแม้จะใช้การวัดพร็อกซีตัวอักษรเรารู้ว่าแม้ในเครื่องทัวริงเราสามารถทำได้ถ้าเราใส่ใจ ระบุการเข้ารหัสการป้อนข้อมูลที่จะแปลง "ABCDE" เพื่อรูปแบบการเข้ารหัสบางอย่างที่มีความยาวมากที่สุด5 × สำหรับบางคนคง การขยายตัวโดยค่าคงที่นี้โดยทั่วไปจะไม่สร้างความแตกต่างในการวิเคราะห์เชิงเส้นกำกับของเราเนื่องจากเราทิ้งปัจจัยคงที่เป็นประจำ55×c c

ในกรณีที่แตกต่างกันเรามักจะวัดขนาดของข้อมูลกราฟจากจำนวนของจุดnเห็นได้ชัดว่าถ้าเราต้องการระบุกราฟขนาดใหญ่โดยพลการขนาดของอินพุตที่เข้ารหัสไม่ได้เป็นเพียงแค่n - เกิดอะไรขึ้นกับขอบเช่น? สิ่งที่เรารู้คือเราสามารถใช้รูปแบบการเข้ารหัสที่เหมาะสมซึ่งแสดงถึงกราฟในN = c n 2 log nบิต นี่เป็นการขยายตัวมากกว่าค่าคงที่เล็กน้อย แต่ในหลายกรณีที่น่าสนใจเราเพียง แต่จัดการกับสิ่งที่เป็นพหุนามของพหุนามและพหุนามประกอบด้วยองค์ประกอบหลายอย่าง - โดยเฉพาะอย่างยิ่งถ้าเป็นตัวอย่างถ้า เราตรวจสอบว่าเวลาทำงานของเราคือO ( p (nnN=cn2lognโดยที่ pคือพหุนามแล้วเรารู้ว่ามีพหุนาม p เช่น O ( p ( n ) ) = O ( p ( N ) )ดังนั้นเมื่อเราย้ายกลับไปที่การวัดอย่างเป็นทางการของอินพุต เรายังอยู่ในเวลาพหุนามO(p(n))ppO(p(n))=O(p(N))

mn=O(logm)O(m)O(2n)mPNPNP- สมบูรณ์อย่าลืมสิ่งนี้) ในทางกลับกันหากทุกสิ่งที่เราสนใจคือความสามารถในการตัดสินใจได้ก็จะเป็นวิธีที่ดีพอ

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


ขอบคุณสำหรับคำตอบ. น่าสนใจจริง ๆ ส่วนที่คุณพูดถึงการเลือกพร็อกซีที่ถูกต้องเพื่อพูดคุยเกี่ยวกับการเป็นสมาชิกใน P หรือ NP สำหรับอินพุตซึ่งอาจเป็นคำถามใหม่ที่สมบูรณ์แบบ! นอกจากนั้นแล้วกลับมาที่คำถามเดิม อันไหนที่คุณคิดว่าเป็นพร็อกซี่ที่ดีที่สุดสำหรับอัลกอริทึมที่อินพุตมันคือชุดของจำนวนเต็ม? ฉันเดาว่ามันอาจจะขึ้นอยู่กับอัลกอริทึมหรือไม่? ฉันเห็น 3 ตัวเลือกที่เป็นไปได้: N (เป็นความยาวของชุด) N * Log (L) (L เป็นค่าสูงสุด) และ Log (Sum (set))
Jesus Salas

NlogLNN 2logL

5ccn2lognnn2

บางทีเมื่อใดที่จะใช้ N หรือN log Lอาจขึ้นอยู่กับต้นทุนสำหรับอัลกอริทึมในการทำงานกับแต่ละองค์ประกอบอินพุท ฉันเดาว่าถ้าเรามีข้อสันนิษฐานว่าอัลกอริทึมใช้เวลาคงที่ในการทำงานกับแต่ละอิลิเมนต์อินพุตโดยอิสระจากขนาดเป็นบิต (และนี่ไม่ได้ถูกทารุณกรรม) ดังนั้น N อาจเป็นสิ่งที่ถูกต้องส่งผลให้ O (N) . ในอีกทางหนึ่งหากขนาดองค์ประกอบอินพุตเป็นบิตเพิ่มค่าใช้จ่ายในการดำเนินการแล้วN log Lดูเหมือนแม่นยำมากขึ้นเนื่องจากเราควรแสดงในขอบเขตบนว่าคุณสมบัติจากอินพุตมีส่วนร่วมในการเจริญเติบโตอย่างไร
Jesus Salas

5c=1c=log255 O(n2logn)บิต แต่มันเป็นขอบเขตบนที่แข็งแกร่งพอที่สามารถจัดการกับการเข้ารหัสปกติทั้งสอง
Luke Mathieson

8

ขึ้นอยู่กับรูปแบบการคำนวณของคุณและบางครั้งก็น่าเสียดายที่อัลกอริธึมเอง

  • ababcd
  • หากโมเดลของคุณเป็นRAMขนาดของอินพุตคือจำนวนของรีจิสเตอร์ / เซลล์หน่วยความจำที่อินพุตเริ่มต้น สิ่งนี้อาจถูกนำไปใช้ในทางที่ผิดเนื่องจากคุณสามารถเขียนข้อมูลทั้งหมดในหนึ่งทะเบียน อย่างไรก็ตามการคำนวณนั้นมีค่าใช้จ่ายมากกว่าถ้าคุณใช้แบบจำลองต้นทุนลอการิทึม
  • ww

อย่างไรก็ตามอัลกอริธึมจำนวนมากไม่ได้วัดตามขนาดอินพุต "จริง" จากนั้นคุณต้องดูอย่างรอบคอบสิ่งที่คำอธิบายของการวิเคราะห์หมายถึง

  • O(nlogn)nO(1)n
  • n×n

n


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