เหตุใดฉันจึงดูกราฟและค้นหาจุดที่ใกล้ที่สุดไปยังอีกจุดหนึ่งในทันที แต่ใช้เวลา O (n) ผ่านการเขียนโปรแกรม


122

ให้ฉันอธิบาย:

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

แต่ในการเขียนโปรแกรมได้รับชุดของจุด n เพื่อที่จะหาจุดที่ใกล้ที่สุดเพื่อคนใดคนหนึ่งจะต้องมีการตรวจสอบทุกจุดอื่น ๆ ซึ่งเป็นเวลาO(n)

ฉันเดาว่าภาพที่เห็นด้วยตาของกราฟน่าจะเท่ากับโครงสร้างข้อมูลบางอย่างที่ฉันไม่สามารถเข้าใจได้ เพราะด้วยการเขียนโปรแกรมโดยการแปลงคะแนนเป็นวิธีการที่มีโครงสร้างมากขึ้นเช่น quadtree เราสามารถหาจุดที่ใกล้ที่สุดไปยังจุดในในเวลาหรือ ammortizedเวลาn k บันทึก( n ) O ( บันทึกn )knklog(n)O(logn)

แต่ยังไม่มีใครรู้อัลกอรึทึมที่ถูกทำให้เป็นด่าง (ที่ฉันหาได้) สำหรับการหาจุดหลังจากปรับโครงสร้างข้อมูลO(1)

เหตุใดจึงเป็นเช่นนี้เป็นไปได้ด้วยการตรวจสอบภาพ?


36
คุณตระหนักถึงประเด็นทั้งหมดที่มีอยู่แล้วและโดยประมาณว่าพวกเขาอยู่ที่ไหน "ไดรเวอร์ซอฟต์แวร์" สำหรับดวงตาของคุณได้ทำงานอย่างหนักเพื่อคุณในการตีความภาพ ในการเปรียบเทียบของคุณคุณกำลังพิจารณางานนี้ "ฟรี" เมื่อในความเป็นจริงมันไม่ได้ หากคุณมีโครงสร้างข้อมูลที่แยกย่อยจุดในการแสดง octotree บางประเภทคุณสามารถทำได้ดีกว่า O (n) การประมวลผลล่วงหน้าจำนวนมากเกิดขึ้นในสมองส่วนใต้สมองของคุณก่อนที่ข้อมูลจะไปถึงส่วนที่มีสติ อย่าลืมว่าในการเปรียบเทียบเหล่านี้
Richard Tingle

20
ฉันคิดว่าอย่างน้อยหนึ่งข้อสันนิษฐานของคุณไม่ถือโดยทั่วไป สมมติว่าทุกจุดอยู่ในวงกลมโดยมีการก่อกวน 'เล็ก' และอีก 1 จุด P เป็นจุดศูนย์กลางของวงกลม หากคุณต้องการที่จะหาจุดที่ใกล้ที่สุดที่ P คุณไม่สามารถยกเลิกการใด ๆของจุดอื่น ๆ ในกราฟ
collapsar

4
เพราะสมองของเรานั้นยอดเยี่ยมมาก! ฟังดูเหมือนคำตอบที่ถูก แต่มันเป็นเรื่องจริง เราไม่ทราบจำนวนมากเกี่ยวกับการทำงานของการประมวลผลภาพ (ขนานอย่างหนาแน่น)
Carl Witthoft

7
สมองของคุณใช้การแบ่งพื้นที่โดยที่คุณไม่สังเกตเห็น ความจริงที่ว่าสิ่งนี้ปรากฏขึ้นอย่างรวดเร็วจริงๆไม่ได้หมายความว่ามันเป็นเวลาที่คงที่ - คุณกำลังทำงานกับความละเอียดที่ จำกัด และซอฟต์แวร์ประมวลผลภาพของคุณได้รับการออกแบบมาสำหรับสิ่งนั้น (และอาจจัดการทั้งหมดที่คล้ายคลึงกัน) ความจริงที่ว่าคุณใช้ซีพียูน้อยหนึ่งร้อยล้านตัวในการดำเนินการประมวลผลล่วงหน้าไม่ได้ทำให้คุณอยู่ใน - มันเป็นการดำเนินการที่ซับซ้อนในตัวประมวลผลขนาดเล็กจำนวนมาก และไม่ลืมที่พล็อตไปยังกระดาษ 2D - ที่ตัวของมันเองมีเป็นอย่างน้อย(n) O ( n )O(1)O(n)
Luaan

9
ไม่แน่ใจว่ามันถูกกล่าวถึงไปแล้ว แต่สมองของมนุษย์นั้นทำงานแตกต่างจากระบบคอมพิวเตอร์แบบ SISD von Neumann มาก โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องที่นี่เป็นที่ฉันเข้าใจสมองของมนุษย์เป็นเส้นขนานและโดยเฉพาะอย่างยิ่งเมื่อมันมาถึงการประมวลผลสิ่งกระตุ้นประสาทสัมผัส: คุณสามารถได้ยินดูและรู้สึกหลายสิ่งในเวลาเดียวกันและตระหนักถึง (ประมาณแล้ว) ของพวกเขาทั้งหมดพร้อมกัน ฉันกำลังจดจ่ออยู่กับการเขียนความคิดเห็น แต่เห็นโต๊ะของฉันกระป๋องโซดาแจ็คเก็ตของฉันห้อยอยู่ที่ประตูปากกาบนโต๊ะทำงาน ฯลฯ สมองของคุณสามารถตรวจสอบจุดต่าง ๆ ได้พร้อมกัน
Patrick87

คำตอบ:


115

แบบจำลองของคุณในสิ่งที่คุณทำจิตใจไม่ถูกต้อง ในความเป็นจริงคุณทำงานในสองขั้นตอน:

  1. กำจัดทุกจุดที่อยู่ห่างไกลเกินไปในเวลาO(1)
  2. วัดจุดที่กำลังใกล้เคียงในเวลาΘ ( m )mΘ(m)

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

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

เมฆคะแนน

รูปภาพนี้มีคะแนนซึ่งเกือบจะเป็นวงกลมและรวมจุดสีเขียว ขั้นตอนที่ 1 ให้คุณกำจัดทั้งหมด แต่เกี่ยวกับจุดแต่ขั้นตอนที่ 2 ต้องตรวจสอบแต่ละจุดไม่มีเบื้องต้นมุ่งเมตรn » 10 ม. ม. ม.m=10n10mmm

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

ทีนี้คุณอาจถามว่าทำไมกระบวนการต่อเนื่องไม่สามารถแก้ปัญหาได้อย่างสมบูรณ์? วิธีการที่ไม่ได้มาเหล่านี้จุดทำไมเราไม่สามารถปรับแต่งกระบวนการที่จะได้รับ ?m = 1mm=1

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

คุณสามารถสร้างแบบจำลองระบบนี้ในโลกที่ไม่ต่อเนื่องและการคำนวณ สมมติว่าจุดจะแสดงในโครงสร้างข้อมูลที่เรียงลงในเซลล์บนตารางเช่นจุดจะถูกเก็บไว้ในรายการสำหรับเซลล์rfloor) หากคุณกำลังมองหาจุดที่ใกล้เคียงกับและเซลล์ที่มีจุดนี้มากที่สุดอีกจุดหนึ่งก็เพียงพอแล้วที่จะตรวจสอบเซลล์ที่มีและ 8 เซลล์ใกล้เคียง จำนวนรวมของคะแนนในเหล่านี้ 9 เซลล์เป็นเมตรแบบจำลองนี้เคารพคุณสมบัติที่สำคัญบางประการของแบบจำลองมนุษย์:( x , Y ) ( x 0 , Y 0 ) ม.(x,y)(x,y)(x0,y0)m

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

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

5
@ ราฟาเอลฉันเข้าใจคำถามเกี่ยวกับเรขาคณิตเชิงคำนวณมากกว่าทฤษฎีกราฟ แต่แน่นอนว่านี่เป็นภาวะแทรกซ้อนเพิ่มเติม
Gilles

2
@Gilles เสร็จแล้ว ฉันเพิ่งได้เรียนรู้ในระยะคำนวณเรขาคณิต
gerrit

2
นี่อาจเป็นการหยิบยกฉันสามารถเข้าใจสิ่งที่คุณกำลังแสดงอยู่ แต่ในฐานะคนที่ตาบอดสี "เลือกสีเขียวที่ใกล้เคียงที่สุดกับสีแดง" นำไปสู่การปวดศีรษะเป็นจำนวนมาก สิ่งที่คิดในอนาคต - เลือกชุดสีอื่น ๆ นอกเหนือจากสีแดง / สีเขียว!
tpg2114

3
@ tpg2114 อย่าลืมสีแดง / สีเขียวไม่ได้เป็นประเภทตาบอดสีเพียงอย่างเดียว การแสดงด้วยรูปร่าง (หรือคุณลักษณะอื่นที่ไม่ใช่สี) จะยังคงมีความครอบคลุมมากกว่า "การผสมสีอื่นนอกเหนือจากสีแดง / เขียว"
Jonathan Van Matre

42

เหตุผลก็คือข้อมูลได้รับการใส่ไว้ใน "โครงสร้างข้อมูล" ที่ปรับให้เหมาะสมสำหรับแบบสอบถามนี้และเวลาในการเตรียมการล่วงหน้าในการจัดทำกราฟควรรวมอยู่ในเวลาที่คุณวัดซึ่งเป็นสัดส่วนกับจำนวนจุดทำให้ O (n) ความซับซ้อนตรงนั้น

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

ตัวอย่างของข้อความค้นหาที่ทำงานได้ไม่ดีนักจะต้องมองดูท้องฟ้ายามค่ำคืนและ - ตามมุมมองของคุณเท่านั้นและตารางพิกัดของแต่ละดาว - ค้นหาดาวที่อยู่ใกล้โลกมากที่สุดหรือเครื่องหมายโหราศาสตร์มีระยะทางที่สั้นที่สุดระหว่าง ดาวประกอบด้วย ที่นี่คุณจะต้องมีโมเดล 3 มิติที่ซูมได้และหมุนได้เพื่อกำหนดสิ่งนี้ด้วยสายตาโดยที่คอมพิวเตอร์จะถือว่าปัญหานี้เป็นปัญหาเดียวกับต้นฉบับของคุณ


2
+1 - ฉันเลื่อนลงเพื่อค้นหาคนทำจุดนี้อย่างแน่นอน การแสดงข้อมูลขาเข้ามีความสำคัญ - ลองค้นหาค่ามัธยฐานของรายการที่เรียงลำดับแล้วเปรียบเทียบกับข้อมูลที่ไม่เรียงลำดับ!
cloudfeet

21

O(1)O(1)


8
ลองนึกภาพการวางจุดพันล้านรอบวงกลม แต่ทั้งหมดตกอกตกใจเล็กน้อยดังนั้นคะแนนของคุณจึงเป็นวงแหวนที่ดูคลุมเครือ เพื่อหาจุดที่อยู่ใกล้กับจุดศูนย์กลางมากที่สุดด้วยตาฉันไม่เห็นวิธีที่คุณสามารถทำได้ดีกว่าการตรวจสอบทุกจุดทีละจุด
Nick Alger

4
@NickAlger ดังนั้นมันมากขึ้นเช่นซึ่งไม่จำเป็นต้องเกี่ยวข้องกับO(numberOfPointsAboutTheSameDistanceFromTheTargetPointAsTheClosestPoint) nฉันคิดว่าคำตอบสำหรับเรื่องนี้ควรนำเสนอโครงสร้างข้อมูลที่เป็นไปได้ในแง่ของวิธีการที่มนุษย์รับรู้และสอบถาม พูดง่ายๆว่ามันไม่ใช่ O (1) รู้สึก ... ขี้เกียจ? ไม่เพียงพอ?
Dukeling

5
@Dukeling O (บางสิ่ง) หมายถึงกรณีที่เลวร้ายที่สุด หากมีเลย์เอาท์ใด ๆ ที่สมองของมนุษย์ไม่สามารถทำได้ในเวลาที่แน่นอนนั่นก็ไม่ใช่ O (1) หากมีขีด จำกัด X ที่สมองของมนุษย์สามารถประมวลผลคะแนน X ในเวลาคงที่ แต่ไม่สามารถประมวลผล X * 2 คะแนนได้เลย - ไม่ใช่ O (1)
Peteris

3
@Dukeling มันขึ้นอยู่กับความจำเป็นของ n เนื่องจากในกรณีที่เลวร้ายที่สุดมันเท่ากับ n และถ้าคุณได้รับ n จุดโดยพลการคุณต้องคาดหวังว่ามันจะเป็นไปไม่ได้ที่จะทำได้เร็วกว่าการปฏิบัติการของ C * n
Peteris

2
@Peteris ฉันเดาว่าเราไม่เห็นด้วยกับความหมายของการ "จำเป็นต้องพึ่งพา n" และวิธีการกำหนดขอบเขตบนที่ใกล้เคียงที่สุด
Dukeling

15

ความเหนือกว่าของการตรวจสอบด้วยสายตาขึ้นอยู่กับสถานที่สำคัญซึ่งไม่สามารถรับประกันได้โดยทั่วไป:

  • O(n)

  • นับ : (เปรียบเทียบความคิดเห็นของ Nick Alger ในคำตอบที่ได้รับจาก DW) ถือว่าจำนวนจุดเกินจำนวนเซลล์จอประสาทตาของคุณ - คุณจะไม่ได้ระบุทุกจุดที่เกี่ยวข้อง

  • ความแปรปรวน : (เปรียบเทียบความคิดเห็นของ Nick Alger ในคำตอบที่ได้รับจาก DW) ถือว่าเป็นชุดของจุดบนตารางปกติ (เช่นหกเหลี่ยม) ที่อยู่ภายใต้การก่อกวนแบบสุ่มขนาดเล็ก หากการก่อกวนเหล่านี้กลายเป็นน้อยกว่าความละเอียดของเรตินาของคุณ (หรือกริดที่ซ้อนทับอื่น ๆ ) คุณจะไม่เพียง แต่ถูกกดอย่างหนักเพื่อตรวจจับระยะทางต่ำสุดที่แท้จริง แต่เลือกจุดผิดที่มีความน่าจะเป็นสูง

O(n)O(1)


1
O(n)O(log(n))

O(n)nO(nlogn)n

15
  1. คอมพิวเตอร์กำลังแก้ไขปัญหาอื่น มันต้องใช้รายชื่อของจุดต่าง ๆ ไม่ใช่ภาพที่มีการแรสเตอร์ของคะแนน การแปลงจากรายการเป็นรูปภาพเช่น "การพล็อต" จุดใช้O(n)เวลา

    ด่วน! ซึ่งใกล้เคียงกับ (1,2):

    • (9, 9)
    • (5, 2)
    • (3, -2)
    • (4, 3)
    • (0, 4)
    • (1, 9)

    ยากกว่านี้จริงไหม? ฉันเดิมพันถ้าฉันทำรายการสองครั้งตราบใดที่คุณต้องทำงานสองเท่า

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


13

ด้วยเหตุผลเดียวกันเมื่อคุณดูรูปสามเหลี่ยมและรู้ว่ามันเป็นรูปสามเหลี่ยมคุณจะลืมการคำนวณหลายล้านครั้งโดยไม่สังเกตเห็น

โครงข่ายประสาท

ในผลที่คุณเป็นเครือข่ายประสาทที่ได้รับการฝึกอบรมและโหลดกับมวลชนเมื่อมวลของข้อมูล

ยกตัวอย่างเช่นเกมเรียงลำดับรูปร่างสำหรับทารก:

ป้อนคำอธิบายรูปภาพที่นี่

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

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

สมองของคุณไม่ใช่ไบนารี

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

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

ป้อนคำอธิบายรูปภาพที่นี่

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

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

TL; DR

สมองของคุณไม่ใช่คอมพิวเตอร์ไบนารี



8

คุณกำลังลืมขั้นตอนสำคัญเพียงขั้นตอนเดียว: วางแผนจุดเหล่านั้นทั้งหมดบนกราฟที่คุณกำลังดู

นี่คือความจำเป็นในการดำเนินงาน O (n)

หลังจากนั้นคอมพิวเตอร์สามารถใช้ซอฟต์แวร์จดจำภาพเพื่อค้นหาจุดโดยประมาณที่อยู่ใกล้กับศูนย์กลางมากที่สุดในแบบเดียวกับที่สายตามนุษย์สามารถทำได้ นี่เป็นกรณีที่เลวร้ายที่สุดในการดำเนินการ O (sizeOfImage)

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


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

7

การตีความคำถามของฉัน:

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

O(1)O(log(n))

สิ่งนี้อาจได้รับการเสริมด้วยกฎหมายWeber-Fechnerซึ่งระบุว่าการรับรู้ของเราคือการวัดในระดับลอการิทึมของการวัดทางกายภาพที่แท้จริง กล่าวอีกนัยหนึ่งเราเข้าใจการเปลี่ยนแปลงสัมพัทธ์มากกว่าการแปรผันสัมบูรณ์ นี่เป็นตัวอย่างว่าทำไมความเข้มของเสียงถูกวัดเป็นเดซิเบล

O(log(n))Oψ(log(log(n)))Oψ

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

คำนึงถึงข้อ จำกัด ทางสรีรวิทยา

ข้อสรุปข้างต้นจะยั่งยืนต่อไปเมื่อพิจารณาขั้นตอนการซื้อภาพ

OP ระมัดระวังในการแยกการสร้างโครงสร้างข้อมูลที่เหมาะสม "เช่น quadtree" ซึ่งจะถูกตัดจำหน่ายในหลายแบบสอบถาม

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

TscanTscan

mOψ(log(log(m)))

227log2(27)

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

เกี่ยวกับตัวอย่างเคาน์เตอร์และทางออกที่เป็นไปได้

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

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

O(log(n))

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

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


O(1)O(logn) O(1)O(1)O(logn)เมื่อคุณแก้ปัญหางานที่เกินกว่าการรับรู้ที่แท้จริงเช่นการหาจำนวนที่กำหนดในการแสดงกราฟิกของกองไบนารีสมดุลกับโหนดที่มีป้ายกำกับ โปรดทราบว่าการ จำกัด การรับรู้ไม่สำคัญเท่าที่คุณตรวจสอบกราฟิกในเครื่องเท่านั้น
collapsar

n

Oψ(log(log(n)))

4

เรามีนักเรียนในการสอบที่ถูกถามว่าคุณสามารถเรียงลำดับอาเรย์ได้เร็วแค่ไหนอ้างว่าคอมพิวเตอร์นั้นโง่และต้องการ n * log (n) (หรือแย่กว่า) ในขณะที่มนุษย์สามารถทำได้เร็วขึ้น

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

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


1
รวมถึงแง่มุมต่าง ๆ ของสิ่งที่คุณรู้เกี่ยวกับข้อมูลและทรัพยากรที่คุณมีเมื่อคุณต้องการจัดเรียง ตัวอย่างเช่นถ้าเพื่อนนักเรียนของคุณต้องการเรียงลำดับบางสิ่งที่ไม่พอดีกับห้อง
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: นี่เป็นสิ่งที่ดีที่จะเข้าใจว่าความสำคัญของพื้นที่ - ความซับซ้อนคือ "สิ่งที่ไม่พอดีในห้อง" 8 ^)
Zane

3

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

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

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


1

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

มีอัลกอริทึมการจัดทำดัชนีที่ดีมากที่ใช้โดย Google และอื่น ๆ เพื่อค้นหาจุดที่ใกล้ที่สุดที่เรียกว่า Geohash http://en.wikipedia.org/wiki/Geohash

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


Θ(n) Θ(lgn)

ประเด็นก็คือดัชนีเชิงพื้นที่ทำให้มันง่ายพอ ๆ กับมนุษย์ที่ดูหน้าจอที่เกลื่อนไปด้วยจุด
reinierpost

1

หากเราพิจารณากรณีของการค้นหาเพื่อนบ้านที่ใกล้ที่สุดในชุดจุด n- มิติในปริภูมิแบบยุคลิดความซับซ้อนมักถูก จำกัด ด้วยจำนวนมิติเมื่อมันขยายใหญ่ขึ้น (เช่นใหญ่กว่าขนาดของชุดข้อมูล)

O(logd2n)

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

O(1)


-1

คำตอบอื่น ๆ เป็นสิ่งที่ดี แต่วิธีการเกี่ยวกับคำถามเคาน์เตอร์เซนที่ยืดออกการให้เหตุผลขั้นพื้นฐาน / หลักฐานของคำถามเดิมเพื่อสุดขั้วเพื่อแสดงความผิดพลาดบางอย่าง (แต่ยังเป็นความขัดแย้งที่เป็นแกนหลักของการวิจัย AI ):

ถ้าฉันสามารถคิดด้วยสติปัญญาของมนุษย์ทำไมฉันไม่สามารถสร้างคอมพิวเตอร์ที่คิดเช่นเดียวกับมนุษย์ได้?

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

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

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


O(f(n))

-2

โดยทั่วไปแล้วคุณกำลังแก้ไขปัญหาที่แตกต่างกันสองแบบและหากคุณแข่งขันในการแข่งขันเดียวกันความซับซ้อนจะเป็น O (1) สำหรับคุณทั้งคู่ ทำไม? มาทำให้สถานการณ์ดูง่ายขึ้นหน่อย - สมมติว่าคุณมีเส้นตรงที่มีจุดสีแดงหนึ่งจุดและจุดสีเขียวหนึ่งจุด งานของคุณคือการหาจุดสีเขียวซึ่งใกล้เคียงกับจุดสีแดง ทุกอย่างอยู่บนกราฟ ทีนี้สิ่งที่คุณทำและสิ่งที่คุณกำลังทำอยู่ก็คือ "เดินออกไป" (ทั้งสองทิศทาง) จากจุดแดงและตรวจสอบว่าพิกเซลที่คุณกำลังดูนั้นเป็นสีขาว / ดำ (พื้นหลัง) หรือสีเขียว ตอนนี้ความซับซ้อนคือ O (1)

สิ่งที่น่าสนใจคือวิธีการนำเสนอข้อมูลบางคำตอบคำถามบางอย่างทันที (O (1)) ตัวอย่างพื้นฐานนั้นง่ายมาก - เพียงนับจำนวนพิกเซลสีขาวในภาพสีดำ (ค่าพิกเซลแต่ละค่าคือ 0 = สีดำหรือ 1 = สีขาว) สิ่งที่คุณต้องทำคือเพียงเพิ่มค่าพิกเซลทั้งหมด - ความซับซ้อนจะเหมือนกันสำหรับ 1 พิกเซลสีขาวและ 1,000 แต่มันขึ้นอยู่กับขนาดของภาพ - O (m), m = image.width * image.height เป็นไปได้ไหมที่จะทำได้เร็วขึ้น? แน่นอนสิ่งที่เราต้องทำคือใช้วิธีการจัดเก็บภาพต่าง ๆ ซึ่งเป็นภาพที่รวม : ป้อนคำอธิบายรูปภาพที่นี่ ตอนนี้การคำนวณผลลัพธ์คือ O (1) (ถ้าคุณมีการคำนวณภาพรวมแล้ว) อีกวิธีหนึ่งคือเก็บพิกเซลสีขาวทั้งหมดในอาร์เรย์ / vector / list / ... และนับขนาดเป็น O (1)


O(1)O(1)

@ Frankank - ความซับซ้อนของ "การเดิน" คืออะไร ฉันไม่ได้พยายามจะบอกว่าคุณผิดฉันแค่อยากรู้ การนับขนาดของ array / vector / list - โดยทั่วไปขนาด array นั้นคงที่ดังนั้นไม่จำเป็นต้องนับมัน vector - ฉันไม่แน่ใจฉันจะบอกว่ามันขึ้นอยู่กับการนำไปใช้ วัตถุจึงไม่จำเป็นต้องนับ) รายการ - คุณพูดถูกไม่ใช่ O (1) - ความผิดพลาดของฉัน
cyriel

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