ฟังก์ชั่นการเรียงลำดับตามการเติบโตของซีมโทติค


35

สมมติว่าฉันมีรายการฟังก์ชั่นเช่น

nloglog(n),2n,n!,n3,nlnn,

ฉันจะจัดเรียงพวกเขาแบบไม่แสดงอาการได้อย่างไรเช่นหลังจากความสัมพันธ์ที่กำหนดโดย

fOgfO(g) ,

สมมติว่าพวกเขาเป็นคู่เปรียบเทียบจริง ๆ (ดูที่นี่ )? การใช้ความหมายของOดูเหมือนว่าอึดอัดและก็มักจะเป็นเรื่องยากที่จะพิสูจน์ได้ว่าการดำรงอยู่ของค่าคงที่ที่เหมาะสมcและn0 0

นี่เป็นเรื่องเกี่ยวกับการวัดความซับซ้อนดังนั้นเราจึงสนใจพฤติกรรมแบบอะซิมโทติคในรูปแบบn+และเราคิดว่าฟังก์ชั่นทั้งหมดใช้เฉพาะค่าที่ไม่เป็นลบ ( n,f(n)0 )


4
เนื่องจาก OP ไม่เคยกลับมาฉันจึงลบสิ่งที่มีการแปลและทำคำถามอ้างอิงจากสิ่งนี้
กราฟิลส์

คำตอบ:


48

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

c=limnf(n)g(n)

  • c=0 fo(g) ,
  • c(0,)fΘ(g)และ
  • c=   fω(g)(g)

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

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

  • แสดงทั้งฟังก์ชั่นเป็นและเปรียบเทียบเลขชี้กำลัง ถ้าอัตราส่วนของพวกเขามีแนวโน้มที่จะหรือเชาวน์ดั้งเดิมก็เช่นกัน 0 e0
  • โดยทั่วไป: หากคุณมีฟังก์ชันนูน, หาอนุพันธ์ได้อย่างต่อเนื่องและเพิ่มฟังก์ชั่นอย่างเข้มงวดเพื่อให้คุณสามารถเขียนผลหารของคุณใหม่h

    f(n)g(n)=h(f(n))h(g(n)) ,

    ด้วยและgΩ(1)

    limnf(n)g(n)= ,

    แล้วก็

    limnf(n)g(n)=\

    ดูที่นี่สำหรับหลักฐานที่เข้มงวดของกฎนี้ (เป็นภาษาเยอรมัน)

  • พิจารณาความต่อเนื่องของฟังก์ชั่นของคุณเหนือ reals ตอนนี้คุณสามารถใช้กฎของL'Hôpitalได้แล้ว ระวังเงื่อนไขของมัน²!

  • มีลักษณะที่เทียบเท่าต่อเนื่องเป็นสโตลซ์-Cesàro
  • เมื่อแฟคทอเรียลปรากฏขึ้นให้ใช้สูตรของ Stirling :

    n!2πn(ne)n

นอกจากนี้ยังมีประโยชน์ในการรักษาความสัมพันธ์ขั้นพื้นฐานที่คุณพิสูจน์หนึ่งครั้งและใช้บ่อยเช่น:

  • ลอการิทึมเติบโตช้ากว่าพหุนามเช่น

    (logn)αo(nβ)สำหรับทั้งหมดα,β>0

  • คำสั่งของพหุนาม:

    nαo(nβ)สำหรับทั้งหมดα<β

  • ชื่อพหุนามเติบโตช้ากว่าเลขชี้กำลัง:

    nαo(cn)สำหรับทุกและ1αc>1


มันสามารถเกิดขึ้นได้ว่าบทแทรกข้างต้นไม่สามารถใช้งานได้เนื่องจากไม่มีข้อ จำกัด (เช่นเมื่อฟังก์ชั่นการแกว่ง) ในกรณีนี้ให้พิจารณาคุณสมบัติของคลาสรถม้าสี่ล้อโดยใช้มะนาว superior / inferior :

ด้วยเรามีcs:=lim supnf(n)g(n)

  • 0cs<fO(g)และ
  • cs=0fo(g)(g)

ด้วยเรามีci:=lim infnf(n)g(n)

  • 0<cifΩ(g)และ
  • ci=fω(g)(g)

นอกจากนี้

  • 0<ci,cs<fΘ(g)gΘ(f)และ
  • ci=cs=1fgซิมกรัม

ตรวจสอบที่นี่และที่นี่ถ้าคุณกำลังสับสนกับสัญกรณ์ของฉัน


¹ Nota bene: เพื่อนร่วมงานของฉันเขียนฟังก์ชัน Mathematica ที่ทำสิ่งนี้ได้สำเร็จสำหรับหลาย ๆ ฟังก์ชั่นดังนั้นบทแทรกจึงลดงานการคำนวณทางกลลง

²ดูที่นี่ด้วย


@Juho ไม่ใช่สาธารณชน afaik แต่เป็นประถมที่จะเขียนเอง; คำนวณLimit[f[n]/g[n], n -> Infinity]และดำเนินการแยกความแตกต่างกรณี
Raphael

20

เคล็ดลับอื่น: บางครั้งการใช้ฟังก์ชั่นเสียงเดียว (เช่นบันทึกหรือประสบการณ์) กับฟังก์ชั่นทำให้สิ่งต่าง ๆ ชัดเจนขึ้น


5
นี้ควรจะทำอย่างระมัดระวัง: แต่n) 2 2 nO ( 2 n )2nO(n)22nO(2n)
Shaull

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

17

Skiena นำเสนอรายการเรียงลำดับของความสัมพันธ์ที่มีอิทธิพลระหว่างฟังก์ชันที่พบบ่อยที่สุดในหนังสือของเขา, คู่มือการออกแบบอัลกอริทึม:

n!cnn3n2n1+ϵnlgnnn1/2
lg2nlgnlgnlglgnlglgnα(n)1

นี่หมายถึงผกผัน Ackermann ฟังก์ชั่นα(n)


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

มันเป็นสัญกรณ์ของเขาสำหรับความสัมพันธ์ที่ครอบงำ
Robert S. Barnes

11

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

เช่นลอง: พล็อตบันทึก (บันทึก (n)) จาก 1 ถึง 10,000เพื่อดูกราฟแต่ละกราฟหรือบันทึกพล็อต (บันทึก (n)) และบันทึกพล็อต (n) จาก 1 ถึง 10,000เพื่อดูการเปรียบเทียบ


9
เราควรแนะนำvodooจริงๆหรือ
Raphael

+1 สำหรับการแนะนำให้วาดกราฟของฟังก์ชั่นแม้ว่ากราฟที่เชื่อมโยงจะค่อนข้างสับสนเว้นแต่คุณจะรู้ว่ามันหมายถึงอะไร
Tsuyoshi Ito

1
จดกราฟเป็นคำใบ้ว่าคุณอาจต้องการพิสูจน์อะไร คำใบ้นั้นอาจผิดแน่นอน
gnasher729

8

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

เราใช้คุณสมบัติที่เพื่อเขียนนิพจน์แรกเป็นn} จากนั้นเราสามารถใช้นิยามเพื่อแสดงว่าเนื่องจากค่าคงที่ , มีเช่นว่าสำหรับ , nn=2lognnloglogn=(2logn)loglogn=2lognloglognnloglogn=2lognloglogno(2n)c>0n0nn0c(nloglogn)=c(2lognloglogn)<2n

ต่อไปเราพยายามที่ n เราเปรียบเทียบกับซึ่งเป็นองค์ประกอบที่ใหญ่ที่สุดที่เราวางไว้ ตั้งแต่เราก็แสดงให้เห็นว่า})3n2n3n=(2log3)n=2nlog32no(3n)=o(2nlog3)

เป็นต้น


2

นี่คือรายการจากWikipediaที่ต่ำกว่าในตารางจะมีระดับความซับซ้อนที่ใหญ่กว่า

NameRunning TimeConstant timeO(1)Inverse Ackermann timeO(a(n))Iterated logarithmic timeO(logn)Log-logarithmicO(nlogn)Logarithmic timeO(logn)Polylogarithmic timepoly(logn)Fractional powerO(nc),where 0<c<1Linear timeO(n)"n log star n" timeO(nlogn)Quasilinear timeO(nlogn)Quadratic timeO(n2)Cubic timeO(n3)Polynomial timepoly(n)=2O(logn)Quasi-polynomial time2O(poly(logn))Sub-exponential time (first definition)O(2nϵ),ϵ>0Sub-exponential time (second definition)2o(n)Exponential time(with linear exponent)2O(n)Exponential time2poly(n)Factorial timeO(n!)

หมายเหตุ:poly(x)=xO(1)


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

1
ฉันใส่สิ่งนี้เพื่อให้ชื่อของคลาสความซับซ้อนสามารถพูดคุยได้โดยตรงที่นี่ ใช่กุ๊บเป็นอัลกอริทึมเฉพาะประเภทมากขึ้นในการเข้ารหัส
kelalaka

1
ฉันคัดค้านความเห็นของ @ Raphael ฉันเป็นนักคณิตศาสตร์และเป็นผู้สอนมาหลายปีแล้ว ฉันเชื่อว่านอกเหนือจากการพิสูจน์สิ่งเหล่านั้นแล้วโต๊ะตัวโตเช่นนี้ยังเพิ่มสัญชาตญาณของผู้คนได้อย่างง่ายดายและมาก และชื่อของคลาส asymptotic ช่วยให้ผู้คนจดจำและสื่อสารได้มาก
Apass.Jack

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

1
@kelalaka "ใช่ Landau เป็นมากกว่าอัลกอริธึมเฉพาะใน Cryptography" - มันไม่สมเหตุสมผลเลย สัญกรณ์กุ๊บเป็นชวเลขเพื่ออธิบายคุณสมบัติของฟังก์ชันทางคณิตศาสตร์ มันไม่มีส่วนเกี่ยวข้องกับอัลกอริธึมนับประสาเข้ารหัส
กราฟิลส์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.