อัลกอริธึมเชิงเส้นเวลาเป็นอัลกอริทึมการสตรีมมิ่งหรือไม่


14

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

ดังนั้นคำถามของฉัน:

ทุกขั้นตอนวิธีเชิงเส้นเวลาสามารถแสดงเป็นอัลกอริทึมการสตรีมที่มีการส่งผ่านจำนวนมากตลอดเวลาได้หรือไม่

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

การเข้าถึงแบบสุ่มอาจไม่เป็นปัญหาขึ้นอยู่กับรุ่นของเครื่อง ฉันจะสนใจคำตอบสำหรับรุ่นเหล่านี้:

  • เครื่องทัวริงอินพุตแบน
  • RAM อินพุตเป็นอาร์เรย์
  • RAM ป้อนข้อมูลเป็นรายการที่เชื่อมโยง

ตามที่คุณเห็นในคำตอบ "อัลกอริทึมการสตรีม" มักจะมีความหมายเล็ก ๆ (พื้นที่โพลีบล็อก) แต่ได้รับแรงจูงใจของคุณคำถามที่ผมคิดว่าควรจะ: สามารถทุกขั้นตอนวิธีเส้นเวลาที่ใช้คำพูดของพื้นที่ทำงานถูกแปลงเป็นขั้นตอนวิธีการสตรีมมิ่งที่ใช้O ( s )พื้นที่คำ ดังนั้น counterexample จะเป็นปัญหาที่สามารถแก้ไขได้ด้วยo ( n )พื้นที่ที่มีการเข้าถึงแบบสุ่มในขณะใด ๆ ผ่านคงสตรีมมิ่งขั้นตอนวิธีการต้องΩ ( n )พื้นที่ ยังไม่มีคำตอบสำหรับตัวอย่างนี้sO(s)โอ(n)Ω(n)
Sasho Nikolov

@SashoNikolov: จริงๆแล้วปัญหาพื้นที่ทั้งหมดเป็นวงสัมผัส คำถามของฉันเกี่ยวกับ runtime เป็นหลัก ถ้าคำตอบคือ "ใช่" แล้วขอบเขตที่ต่ำกว่า (กับความซับซ้อนอวกาศ) ได้รับการพิสูจน์ในกระดาษจะนำไปใช้กับทุกขั้นตอนวิธีการเชิงเส้นเวลา ว่าขอบเขตล่างอยู่บนอวกาศเป็นเรื่องบังเอิญ แต่ไม่ใช่จุดเน้นของคำถามต่อ se
กราฟิลส์

ฉันไม่เข้าใจ. มันเป็นเรื่องเล็กน้อยที่จะทำให้อัลกอริธึมเชิงเส้นเป็น "หนึ่งผ่านการสตรีม" ด้วยพื้นที่ไม่ จำกัด คำถามของคุณจะสมเหตุสมผลถ้าในรูปแบบ "สามารถอัลกอริธึมการเข้าถึงแบบสุ่มเวลาเชิงเส้นสามารถทำให้การส่งผ่านแบบคงที่ในขณะที่ประมาณการรักษาความซับซ้อนของการวัด " ดังนั้นคุณควรเลือกวัดความซับซ้อน o / w มันไม่สมเหตุสมผล μ
Sasho Nikolov

@SashoNikolov: ฉันไม่ทราบว่า "อัลกอริทึมการสตรีม" มีปัญหาดังกล่าว เนื่องจากพวกเขาแสดงขอบเขตเชิงเส้นตรงด้านล่างสำหรับอัลกอริทึมการสตรีมฉันคิดว่าพื้นที่ไม่ใช่แกนหลักของคำจำกัดความ แต่ฉันเดาว่าคุณสามารถแปลที่ผูกไว้กับ "ไม่มีอัลกอริทึมการสตรีม ... " อย่างไรก็ตามสิ่งที่เกี่ยวกับคำนิยามนี้: "อัลกอริทึมการสตรีมเป็นอัลกอริทึมที่ได้รับการป้อนข้อมูล (รายการ) หนึ่งองค์ประกอบต่อครั้งสำหรับองค์ประกอบใหม่ทุกครั้งมันสามารถทำการคำนวณในหลังจากผ่านหลายอย่างต่อเนื่อง จะต้องส่งคำตอบหลังจากเวลาo ( n )เพิ่มเติม " โอ(n)โอ(n)
ราฟาเอล

@SashoNikolov: ที่จะยกเว้น "คัดลอกป้อนข้อมูลและทำอะไร" อัลกอริทึมจากความคิด แต่ จำกัด ให้เวลา ที่เหมาะสมกับชั้นเรียนที่แสดงมักจะ? ถ้าไม่ฉันไม่คิดว่า "การสตรีม" สามารถกำหนดได้ตลอดเวลาหรือความซับซ้อนของพื้นที่มีประโยชน์ มันค่อนข้างเป็นกลยุทธ์เหมือนโลภหรือแบ่งและพิชิต โอ(n2)
กราฟิลส์

คำตอบ:


15

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

ฉันคิดว่าเป็นเรื่องปกติที่จะ จำกัด พื้นที่ทำงานให้มากที่สุดเท่าที่ polylogarithmic ในขนาดอินพุตเมื่อพูดถึงอัลกอริธึมการสตรีม ภายใต้สมมติฐานนี้การเลือกค่ามัธยฐานไม่มี O (1) - อัลกอริทึมการสตรีมแบบพาสโดยผลลัพธ์ของ Munro และ Paterson [MP80]: อัลกอริทึมการสตรีมแบบP- pass ใด ๆสำหรับการเลือกค่ามัธยฐานในองค์ประกอบNต้องเก็บΩ ( N 1 / P ) องค์ประกอบ ในทางกลับกันการเลือกค่ามัธยฐานมีอัลกอริทึมเชิงเส้นเวลาที่กำหนดขึ้นที่รู้จักกันดี [BFPRT73]

[BFPRT73] Manuel Blum, Robert W. Floyd, Vaughan Pratt, Ronald L. Rivest และ Robert E. Tarjan ขอบเขตเวลาสำหรับการเลือก วารสารวิทยาศาสตร์คอมพิวเตอร์และระบบ , 7 (4): 448–461, สิงหาคม 1973. DOI: 10.1016 / S0022-0000 (73) 80033-9

[MP80] J. Ian Munro และ Mike S. Paterson การเลือกและการเรียงลำดับด้วยที่เก็บข้อมูล จำกัด ทฤษฎีวิทยาการคอมพิวเตอร์ 12 (3): 315–323, พ.ย. 1980. DOI: 10.1016 / 0304-3975 (80) 90061-4


6

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

ตัวอย่างหนึ่งคืออัลกอริทึม DC3สำหรับสร้างอาร์เรย์ต่อท้ายของข้อความ (ที่กำหนดเป็นอาร์เรย์ในโมเดล RAM) ในการสร้างอาเรย์ต่อท้ายคุณจัดกลุ่มตัวละครเป็นแบบสามส่วนดังนั้นคุณจะได้รับข้อความที่มีอักขระพิเศษใหม่ คุณสามารถทำเช่นนี้กับ offset ของ0 , 1 , 2ซึ่งผลลัพธ์ในสามตำราใหม่T 1 , T 2 , T 3 น่าสนใจคุณสามารถคำนวณอาเรย์ต่อท้ายหากคุณมีอาเรย์ต่อท้ายของT 1T 2ในเวลาเชิงเส้น ดังนั้นอัลกอริทึมที่ต้องการT0,1,2T1,T2,T3T1T2

t(n)=t(2/3n)+O(n)

เวลา. recursion นี้แก้อย่างชัดเจนเพื่อ ) ฉันไม่เห็นว่าสิ่งนี้จะกลายเป็นอัลกอริทึมการสตรีมได้อย่างไรt(n)=O(n)

อีกตัวอย่างที่รู้จักกันดีคืออัลกอริทึมการ เลือกเวลาเชิงเส้นคลาสสิก


นี่เป็นอีกตัวอย่างที่เป็นไปได้ การสร้างฮีปจะใช้ O (n) และใช้รูทีนย่อยแบ่งและพิชิตภายใน () ภายใน
Massimo Cafaro

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

O(n)

"ฉันไม่เห็นว่าสิ่งนี้จะกลายเป็นอัลกอริทึมการสตรีม" ได้หรือไม่ฉันเชื่อว่าคุณกำลังพูดอะไรนอกเหนือจาก "อัลกอริทึมนี้ไม่ได้ทำการสตรีมโดยไม่มีการดัดแปลง"
Sasho Nikolov

4

P

  • R(P)P
  • S(P)P

R(P)S(P)

n[1,n-1]O(เข้าสู่ระบบn)O(1)ω(เข้าสู่ระบบn)

O(1/เข้าสู่ระบบ2n)พีs=Ω(n)ที่ไหน พี คือจำนวนรอบและ sคือความซับซ้อนของพื้นที่ ในอีกทางหนึ่งMagniez และคณะ ให้อัลกอริทึมง่าย ๆ ที่ใช้O(เข้าสู่ระบบ2n) สเปซมีความน่าจะเป็นเชิงบวกที่ผิดพลาดเล็กน้อยและทำให้เกิดการผ่านหนึ่งไปข้างหน้าและถอยหลังหนึ่งครั้ง


1

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

RadixSort aka BucketSort คือ O (N) (ทางเทคนิค O (NlogM) โดยที่ M คือค่าสูงสุดในรายการ N ซึ่งถือว่าเล็ก) และจะต้องดำเนินการอย่างครบถ้วนเพื่อรับประกันว่ารายการใด ๆ ที่อยู่ในสถานที่สุดท้าย

ในการเป็นอัลกอริทึม "การสตรีม" อย่างง่ายที่สุดอัลกอริทึมต้องมีคุณสมบัติสองประการต่อไปนี้ซึ่งไม่ได้มีขอบเขตเวลาชัดแจ้ง:

  • ดีกว่าความซับซ้อนของพื้นที่ O (N) (ระบุอย่างเท่าเทียมกันไม่ต้องทราบแหล่งที่มาทั้งหมดและไม่ต้องจัดเก็บผลลัพธ์ทั้งหมด)
  • O (N) ความสัมพันธ์ I / O (อัลกอริทึมผลิตจำนวนผลลัพธ์เป็นสัดส่วนเชิงเส้นกับอินพุต)

ดังนั้นคลาสหลักของอัลกอริทึมที่สตรีมคืออัลกอริธึมที่ดำเนินการ "การคาดการณ์" (การแปลงส่วนเพิ่มของอินพุตหนึ่งไปยังเอาต์พุต X> 0)


ทำไมจะ O(เข้าสู่ระบบn)การใช้พื้นที่ไม่เป็นไร? เอกสารที่เชื่อมโยงในคำถามอื่น ๆ จะเล่นด้วยอัลกอริธึมการสตรีมมากมายที่ใช้ω(1)ช่องว่าง
ราฟาเอล

logN ก็ใช้ได้เช่นกัน ประเด็นก็คือว่าอัลกอริทึมไม่ควรต้องการความรู้เกี่ยวกับอินพุตหรือเอาต์พุตทั้งหมดในครั้งเดียว
KeithS

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