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


59

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

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

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


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

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

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

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

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

คำตอบ:


53

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

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

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

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


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

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

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

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

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

38

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

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

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

17

O(logn)n

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

O(logn)O(logn)O(logn)logn


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

O(logn)

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

8

n

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

whilelog(n)


1
lognO(f(s))ss=lognO(s)

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

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

8

log(n)1n1nlog(n)

100210021002100100210021002100

10021001002100210021001002100log(n)n

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

ABCBCACDCAD2342421010242101010210101024

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

log(n)n


3
log(n)

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

5

O(logn)x

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



1

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

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

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

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