สัญชาตญาณของอัลกอริทึมสำหรับความซับซ้อนลอการิทึม


59

ฉันเชื่อว่าฉันมีความเข้าใจที่เหมาะสมของความซับซ้อนเช่น , Θ ( n )และΘ ( n 2 )O(1)Θ(n)Θ(n2)

ในแง่ของรายการคือการค้นหาอย่างต่อเนื่องดังนั้นมันจึงเป็นแค่การนำส่วนหัวของรายการ Θ ( n )คือที่ที่ฉันจะเดินรายการทั้งหมดและΘ ( n 2 )กำลังเดินรายการหนึ่งครั้งสำหรับแต่ละองค์ประกอบในรายการO(1)Θ(n)Θ(n2)

มีวิธีที่เข้าใจง่ายคล้ายกันในการเข้าใจนอกเหนือจากการรู้ว่ามันอยู่ที่ไหนสักแห่งระหว่างO ( 1 )และΘ ( n )หรือไม่Θ(log⁡n)O(1)Θ(n)


8
log n ใช้สำหรับ "การค้นหา": think binary search
— Suresh

2
การใช้เพื่อถามคำถามนี้ไม่ถูกต้องเนื่องจากมันหมายถึงขอบเขตบนเท่านั้น ยกตัวอย่างเช่นเวลาคงเป็นO ( บันทึกn ) θจะเหมาะสมกว่า ดูคำถามเมตา: meta.cs.stackexchange.com/questions/182/…OO(log⁡n)θ
— Aryabhata

1
ข้อมูลเพิ่มเติมเกี่ยวกับ SO: สิ่งที่ไม่หมายถึงว่า? O(log⁡n).
— Ran G.

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

1
ผลงานในช่วงปลาย: โดยนิยามฐานลอการิทึมของจำนวนnเป็นเพียงจำนวนครั้งที่คุณคูณขด้วยตัวเองที่จะได้รับn b l = nbnbn ) ตัวอย่างเช่น 2 3 = 8bl=n⟺l=logb(n) 3 ดังนั้นถ้าคุณมีตัวเลข nและคุณต้องการหาว่า l o g b ( n ) = ? เพียงแค่หารมันด้วย bจนกว่าคุณจะได้ 1 (สมมติว่า nคือพลังของ bเพื่อความง่าย) จำนวนหน่วยจะเท่ากับ L o กรัมข ( n ) อัลกอริทึมที่แสดงพฤติกรรมการแบ่งนี้มีเวลาทำงานใน O ( l o g23=8⟺log2(8)=3nlogb(n)=?b1nblogb(n) ) O(log(n))
— saadtaame

คำตอบ:


53

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

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

คุณจะเห็นว่ารายการแบ่งครึ่งแต่ละขั้นตอนอย่างมีประสิทธิภาพ นั่นหมายความว่าถ้าคุณได้รับรายชื่อความยาวขั้นตอนสูงสุดที่คุณต้องไปถึงรายการหนึ่งรายการคือ5 หากคุณมีรายการ128 = 2 7รายการคุณต้องการเพียง7ขั้นตอนสำหรับรายการ1024 = 2 10คุณต้องการเพียง10ขั้นตอนเป็นต้น325128=2771024=21010

อย่างที่คุณเห็นเลขชี้กำลังใน2 nจะแสดงจำนวนขั้นตอนที่จำเป็นเสมอ ลอการิทึมจะใช้ในการ "ดึง" ว่าตัวเลขสัญลักษณ์นี้เช่นเข้าสู่ระบบ2 2 10 = 10 นอกจากนี้ยังสรุปความยาวของรายการที่ไม่ใช่พลังของความยาวสองรายการn2nlog2⁡210=10


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

1
การค้นหาแบบไบนารีไม่ทำงานในรายการสำหรับการขาดตัวชี้; มันมักจะทำในอาร์เรย์
— ราฟาเอล

การค้นหาแบบไบนารีทำงานได้ดีในรายการ มันค่อนข้างไม่มีจุดหมายเนื่องจากมีความซับซ้อนมากกว่าที่จำเป็น / มีประโยชน์ / ใช้งานได้จริง
— Anton

@AndrewMyers ค้นหารายการที่เชื่อมโยงได้อย่างแม่นยำมากขึ้นO(n)
— phant0m

1
@ phant0m ใช่เอาฉันไปคิดว่ามันคือการสมมติว่าคุณกำลังย้ายจากตำแหน่งปัจจุบันแทนที่จะเคลื่อนที่ข้ามจากจุดเริ่มต้นทุกครั้ง
— asm

38

ในแง่ของต้นไม้ (สมดุล) (พูดต้นไม้ไบนารีดังนั้นทั้งหมดเป็นฐาน 2):log

  • รับรากของต้นไม้Θ(1)
  • ใช้เวลาเดินจากรากจรดใบΘ(log⁡n)
  • Θ(n)
  • Θ(n2)
  • Θ(nk)kk
  • Θ(2n)k=1,2,…,n

5
Θ(loglogn)T(n)=T((n))+1log(n)

17

O(log⁡n)n

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

O(log⁡n)O(log⁡n)O(log⁡n)log⁡n


1
จะเป็นอย่างไรหากจำนวนเงินที่ลดลงไม่คงที่
— Svish

O(log⁡n)

ใช่ฉันหมายความว่าพื้นที่ค้นหาปัญหาลดลงเสมอ แต่ไม่จำเป็นต้องมีอัตราคงที่ เป็นเพียงแค่การคิดของคุณ "ตราบเท่าที่ร้อยละและการดำเนินการที่ใช้ในการลดขนาดของปัญหายังคงที่มันเป็นอัลกอริทึม O (log n)"; ถ้ามันมีชื่ออื่นถ้าเปอร์เซ็นต์นั้นไม่คงที่
— Svish

8

n

while n != 0:
   print n%2, 
   n = n/2

whilelog⁡(n)


1
log⁡nO(f(s))ss=log⁡nO(s)

@jmad ถูกต้อง แต่ตัวอย่างนี้ให้สัญชาตญาณคุณในการเข้าสู่ระบบ (n)
— Pratik Deoghare

@jmad ฉันสามารถใช้อัลกอริทึมในการสร้างตัวเลขสุ่มได้เช่นกัน แต่ฉันต้องการให้ง่ายที่สุด
— Pratik Deoghare

8

log⁡(n)1n1nlog⁡(n)

100210021002100100210021002100

10021001002100210021001002100log⁡(n)n

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

ABCBCACDCAD2⋅3⋅42421010242101010210101024

log2⁡(n)nn2n2logb⁡(n)bbnlog⁡(n)nn

log⁡(n)n


3
log⁡(n)

3
ฉันพยายามที่จะให้สัญชาตญาณว่ามันมีขนาดเล็กแค่ไหน
— Ravi

5

O(log⁡n)x

มันยังคงขึ้นอยู่กับขนาดของรายการ แต่คุณจะต้องไปที่ส่วนขององค์ประกอบ



1

สัญชาตญาณคือจำนวนครั้งที่คุณสามารถลดจำนวนครึ่งหนึ่งพูด n ก่อนที่มันจะลดลงเหลือ 1 คือ O (lg n)

สำหรับการสร้างภาพลองวาดมันเป็นต้นไม้ไบนารีและนับจำนวนระดับโดยการแก้ความก้าวหน้าทางเรขาคณิตนี้

2^0+2^1+...+2^h = n

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