คำถามติดแท็ก big-o

สัญกรณ์ Big-O ใช้เพื่อแสดงขอบเขตด้านบนที่ไม่แสดงอาการ อธิบายถึงเวลาที่เกี่ยวข้องหรือความซับซ้อนของพื้นที่ของอัลกอริทึม การวิเคราะห์ Big-O ให้การประมาณความยากของปัญหาอย่างคร่าวๆและง่ายขึ้น

17
big-O นั้นเกี่ยวข้องกับการทำงานในอุตสาหกรรมหรือไม่?
ในการสัมภาษณ์ทุกครั้งที่ฉันเข้าร่วมฉันได้รับการวิเคราะห์ทางคณิตศาสตร์เกี่ยวกับความซับซ้อนรวมถึงสัญกรณ์ใหญ่ การวิเคราะห์ Big-O มีความเกี่ยวข้องกับการพัฒนาในอุตสาหกรรมอย่างไร คุณใช้มันบ่อยแค่ไหนและจำเป็นต้องมีความคิดที่เฉียบคมสำหรับปัญหานี้อย่างไร

11
รับ 100 ตัวเลขสูงสุดจากรายการที่ไม่มีที่สิ้นสุด
เพื่อนคนหนึ่งของฉันถูกถามคำถามสัมภาษณ์นี้ - "มีการไหลของตัวเลขอย่างต่อเนื่องที่มาจากรายการตัวเลขที่ไม่มีที่สิ้นสุดซึ่งคุณจำเป็นต้องบำรุงรักษาโครงสร้างข้อมูลเพื่อส่งกลับตัวเลขสูงสุด 100 อันดับแรก ณ เวลาใดเวลาหนึ่งสมมติว่าตัวเลขทั้งหมดเป็นตัวเลขทั้งหมดเท่านั้น" นี่เป็นเรื่องง่ายคุณต้องเก็บรายการที่เรียงลำดับจากมากไปน้อยและติดตามในจำนวนที่น้อยที่สุดในรายการนั้น หากหมายเลขใหม่ที่ได้รับมีจำนวนมากกว่าจำนวนที่น้อยที่สุดคุณจะต้องลบหมายเลขที่น้อยที่สุดนั้นและใส่หมายเลขใหม่ในรายการที่เรียงตามต้องการ จากนั้นคำถามก็ถูกขยายออกไป - "คุณแน่ใจได้หรือไม่ว่าคำสั่งสำหรับการแทรกควรเป็น O (1)? เป็นไปได้หรือไม่" เท่าที่ฉันรู้แม้ว่าคุณจะเพิ่มหมายเลขใหม่ลงในรายการและจัดเรียงอีกครั้งโดยใช้อัลกอริทึมการเรียงลำดับใด ๆ มันจะดีที่สุดคือ O (logn) สำหรับ quicksort (ฉันคิดว่า) ดังนั้นเพื่อนของฉันบอกว่ามันเป็นไปไม่ได้ แต่เขาไม่มั่นใจเขาขอให้รักษาโครงสร้างข้อมูลอื่นแทนที่จะเป็นรายการ ฉันคิดว่าต้นไม้ไบนารีที่สมดุล แต่ถึงแม้คุณจะไม่ได้รับการแทรกด้วยลำดับที่ 1 ดังนั้นคำถามเดียวกันที่ฉันมีตอนนี้ ต้องการทราบว่ามีโครงสร้างข้อมูลใด ๆ ที่สามารถทำการแทรกในลำดับ 1 สำหรับปัญหาข้างต้นหรือเป็นไปไม่ได้เลย
53 numbers  big-o  puzzles 

7
ทำไมกรณีที่เลวร้ายที่สุดสำหรับฟังก์ชั่นนี้ O (n ^ 2)
ฉันพยายามสอนตัวเองถึงวิธีการคำนวณสัญกรณ์ BigO สำหรับฟังก์ชั่นโดยพลการ ฉันพบฟังก์ชันนี้ในตำราเรียน หนังสือยืนยันว่าฟังก์ชันนั้นเป็น O (n 2 ) มันให้คำอธิบายว่าทำไมถึงเป็นเช่นนี้ แต่ฉันพยายามที่จะติดตาม ฉันสงสัยว่าใครบางคนอาจแสดงคณิตศาสตร์ให้ฉันฟังได้ไหมว่าทำไมถึงเป็นเช่นนั้น ฉันเข้าใจว่ามันเป็นอะไรที่น้อยกว่า O (n 3 ) แต่ฉันไม่สามารถลงจอดบน O (n 2 ) ได้อย่างอิสระ สมมติว่าเราได้รับสามลำดับของตัวเลข A, B และ C เราจะสมมติว่าไม่มีลำดับแต่ละรายการมีค่าซ้ำกัน แต่อาจมีบางตัวเลขที่อยู่ในลำดับที่สองหรือสาม ปัญหาความไม่ลงรอยกันชุดสามทางคือการตรวจสอบว่าจุดตัดของทั้งสามลำดับนั้นว่างเปล่าหรือไม่นั่นคือไม่มีองค์ประกอบ x เช่น x x A, x ∈ B, และ x ∈ C อนึ่งนี่ไม่ใช่ปัญหาการบ้านสำหรับฉัน - เรือลำนั้นแล่นไปเมื่อหลายปีก่อน) ฉันแค่พยายามฉลาดขึ้น def disjoint(A, B, …
44 python  big-o 

20
มีอัลกอริธึมในโลกแห่งความเป็นจริงที่มีประสิทธิภาพสูงกว่าในชั้นเรียนด้านล่างหรือไม่? [ปิด]
เมื่อคืนฉันพูดคุยกับโปรแกรมเมอร์คนอื่นว่าถึงแม้บางอย่างอาจเป็น O (1) การดำเนินการที่เป็น O (n) อาจเหนือกว่าถ้ามีค่าคงที่ขนาดใหญ่ในอัลกอริทึม O (1) เขาไม่เห็นด้วยดังนั้นฉันจึงนำมันมาที่นี่ มีตัวอย่างของอัลกอริทึมที่มีประสิทธิภาพสูงกว่าในคลาสด้านล่างหรือไม่? ตัวอย่างเช่น O (n) เร็วกว่า O (1) หรือ O (n 2 ) เร็วกว่า O (n) ศาสตร์นี้สามารถแสดงให้เห็นถึงฟังก์ชั่นที่มีขอบเขตบนซีมโทติคเมื่อคุณมองข้ามปัจจัยคงที่ แต่อัลกอริทึมดังกล่าวมีอยู่ในป่าหรือไม่? และฉันจะหาตัวอย่างของพวกเขาได้ที่ไหน พวกเขาใช้สถานการณ์ประเภทใด
39 algorithms  big-o 

4
พยายามเข้าใจ P vs NP กับ NP Complete เทียบกับ NP Hard
ฉันพยายามที่จะเข้าใจการจำแนกประเภทเหล่านี้และสาเหตุที่มีอยู่ ความเข้าใจของฉันถูกต้องหรือไม่ ถ้าไม่อะไร P คือความซับซ้อนของพหุนามหรือสำหรับจำนวนจริงที่ไม่เป็นลบเช่นฯลฯ หากปัญหาเป็นของ P ดังนั้นจะมีอัลกอริทึมอย่างน้อยหนึ่งตัวที่สามารถแก้ไขได้ตั้งแต่เริ่มต้นในเวลาพหุนาม ตัวอย่างเช่นฉันมักจะสามารถคิดออกถ้าจำนวนเต็มบางส่วนเป็นสำคัญโดยการวนลูปและการตรวจสอบในแต่ละขั้นตอนถ้าแบ่งO(nk)kO(1), O(n1/2), O(n2), O(n3)n2 <= k <= sqrt(n)kn NP เป็นความซับซ้อนของพหุนามที่ไม่สามารถกำหนดได้ ฉันไม่รู้จริง ๆ ว่าการไม่เป็นตัวกำหนดความหมายคืออะไร ฉันคิดว่ามันง่ายต่อการตรวจสอบในเวลาพหุนาม แต่อาจหรืออาจไม่ใช่เวลาพหุนามที่จะแก้ไขตั้งแต่ต้นหากเราไม่ทราบคำตอบ เนื่องจากอาจแก้ไขได้ในเวลาพหุนามปัญหา P ทั้งหมดจึงเป็นปัญหา NP การแยกตัวประกอบจำนวนเต็มได้รับการยกมาเป็นตัวอย่างของ NP แต่ฉันไม่เข้าใจว่าทำไมมันไม่ใช่ P ส่วนตัวเนื่องจากการแยกตัวประกอบการทดลองใช้O(sqrt(n))เวลา NP-Complete ฉันไม่เข้าใจเลย แต่ปัญหาของพนักงานขายที่เดินทางถูกยกมาเป็นตัวอย่างของสิ่งนี้ แต่ในความเห็นของฉันปัญหาของ TSP อาจเป็น NP เพราะมันต้องมีการตรวจสอบว่าคุณได้รับเส้นทางล่วงหน้าหรือไม่O(2n n2) time to solve, but O(n) NP-Hard ฉันคิดว่าเต็มไปด้วยสิ่งแปลกปลอม ยากที่จะตรวจสอบและยากที่จะแก้ไข

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

5
นี่เป็น "กฎ" ที่เหมาะสมสำหรับการระบุสัญลักษณ์ "บิ๊กโอ" ของอัลกอริทึมหรือไม่?
ฉันได้เรียนรู้เพิ่มเติมเกี่ยวกับ Big O Notation และวิธีการคำนวณตามวิธีการเขียนอัลกอริทึม ฉันเจอชุด "กฎ" ที่น่าสนใจสำหรับการคำนวณอัลกอริธึมสัญลักษณ์ Big O และฉันต้องการดูว่าฉันอยู่ในเส้นทางที่ถูกต้องหรือไม่ สัญลักษณ์ Big O: N function(n) { For(var a = 0; i <= n; i++) { // It's N because it's just a single loop // Do stuff } } สัญลักษณ์ Big O: N 2 function(n, b) { For(var a …
29 algorithms  big-o 

5
ทำไมการผสาน O (log n)
การรวมกันเป็นอัลกอริทึมการหารและการพิชิตและเป็น O (บันทึก n) เนื่องจากอินพุตถูกลดลงครึ่งหนึ่งซ้ำ ๆ แต่ไม่ควรเป็น O (n) เพราะแม้ว่าอินพุตจะลดลงครึ่งหนึ่งแต่ละลูปแต่ละไอเท็มจะต้องมีการวนซ้ำเพื่อทำการสลับในแต่ละอาร์เรย์ครึ่งหนึ่งหรือไม่ นี่คือความหมายเชิง O (n) ในใจของฉัน หากเป็นไปได้โปรดให้ตัวอย่างและอธิบายวิธีนับการดำเนินการอย่างถูกต้อง ฉันยังไม่ได้เขียนอะไรขึ้น แต่ฉันได้ดูอัลกอริทึมออนไลน์ ฉันได้แนบ gif ของวิกิพีเดียที่ใช้เพื่อแสดงให้เห็นว่าการผสานทำงานอย่างไร
27 algorithms  big-o 

5
การพิจารณาว่าอัลกอริทึมเป็น O (บันทึก n)
ฉันรีเฟรช CS Theory ของฉันและฉันต้องการทราบวิธีระบุความซับซ้อนของอัลกอริทึม O (log n) โดยเฉพาะมีวิธีง่าย ๆ ในการระบุหรือไม่ ฉันรู้ด้วย O (n) คุณมักจะมีวงเดียว; O (n ^ 2) เป็นวงคู่ O (n ^ 3) เป็นสามวงเป็นต้นแล้ว O (log n) เป็นอย่างไร

2
อัลกอริทึมเพื่อผสานสองอาร์เรย์ที่เรียงลำดับด้วยจำนวนการเปรียบเทียบขั้นต่ำ
ป.ร. ให้ไว้สองอาร์เรย์เรียง, BประเภทTที่มีขนาดnและม. ฉันกำลังมองหาอัลกอริทึมที่ผสานสองอาร์เรย์เข้ากับอาร์เรย์ใหม่ (ขนาดสูงสุด n + m) หากคุณมีการเปรียบเทียบราคาถูกนี่ค่อนข้างง่าย เพียงนำจากอาเรย์ที่มีอิลิเมนต์แรกที่ต่ำที่สุดจนกระทั่งหนึ่งหรือทั้งสองอาร์เรย์ถูกสำรวจอย่างสมบูรณ์จากนั้นเพิ่มอิลิเมนต์ที่เหลือ บางสิ่งเช่นนี้/programming/5958169/how-to-merge-two-sorted-arrays-into-a-sorted-array อย่างไรก็ตามสถานการณ์การเปลี่ยนแปลงเมื่อเปรียบเทียบสององค์ประกอบจะมีราคาแพงกว่าการคัดลอกองค์ประกอบจากแถวแหล่งที่มาที่ไปยังอาร์เรย์เป้าหมาย ตัวอย่างเช่นคุณอาจมีอาร์เรย์ของจำนวนเต็มหรือสตริงที่มีความแม่นยำตามอำเภอใจซึ่งการเปรียบเทียบอาจมีราคาค่อนข้างสูง เพียงสมมติว่าการสร้างอาร์เรย์และองค์ประกอบการคัดลอกนั้นฟรีและสิ่งเดียวที่มีค่าใช้จ่ายคือการเปรียบเทียบองค์ประกอบ ในกรณีนี้คุณต้องการที่จะผสานสองอาร์เรย์มีจำนวนต่ำสุดของการเปรียบเทียบองค์ประกอบ นี่คือตัวอย่างบางส่วนที่คุณควรจะทำได้ดีกว่าอัลกอริธึมการผสานอย่างง่าย: a = [1,2,3,4, ... 1000] b = [1001,1002,1003,1004, ... 2000] หรือ a = [1,2,3,4, ... 1000] b = [0,100,200, ... 1000] มีบางกรณีที่อัลกอริทึมการผสานอย่างง่ายจะเหมาะสมที่สุดเช่น a = [1,3,5,7,9,....,999] b = [2,4,6,8,10,....,1000] ดังนั้นอัลกอริธึมจึงควรลดระดับลงอย่างงดงามและทำการเปรียบเทียบสูงสุด n + m-1 ในกรณีที่อาร์เรย์ถูกอินเตอร์ลีบหรืออย่างน้อยก็ไม่ได้แย่ลงอย่างมีนัยสำคัญ สิ่งหนึ่งที่น่าจะทำได้ดีสำหรับรายการที่มีขนาดใหญ่ต่างกันคือใช้การค้นหาแบบไบนารีเพื่อแทรกองค์ประกอบของอาร์เรย์ขนาดเล็กลงในอาร์เรย์ที่ใหญ่กว่า …

7
O ใน Big O คืออะไร
Big และ O ในสัญลักษณ์ Big O คืออะไร ฉันอ่านคำจำกัดความแล้วและไม่ได้บอกว่าOออกเสียงว่า 'oh' อย่างไร ตัวอย่างเช่น - ฉันเข้าใจว่าO (n) เป็นความซับซ้อนของอัลกอริทึมเชิงเส้นโดยที่ n อาจเป็นจำนวนการดำเนินการ แต่Oคืออะไร
23 complexity  big-o 

4
เมื่อพูดฉันจะพูดได้อย่างไรว่าลำดับความซับซ้อนของเวลาของอัลกอริทึมคือ O (N log N)
คำใดที่ฉันสามารถใช้เพื่ออธิบายบางสิ่งบางอย่างที่มีความซับซ้อน O (N log N) ตัวอย่างเช่น: O (1): คงที่ O (บันทึก N): ลอการิทึม O (N): เป็นเส้นตรง O (N log N): ?????? O (N 2 ): กำลังสอง O (N 3 ): ลูกบาศก์

5
อัลกอริทึม: ฉันจะรวม O (n) และ O (nlog (n)) เข้าด้วยกันได้อย่างไร
ฉันมีอัลกอริทึมติดตามซึ่งพบการซ้ำและลบออก: public static int numDuplicatesB(int[] arr) { Sort.mergesort(arr); int numDups = 0; for (int i = 1; i < arr.length; i++) { if (arr[i] == arr[i - 1]) { numDups++; } } return numDups; } ฉันกำลังพยายามค้นหาเวลาที่ซับซ้อนที่สุดในกรณีนี้ ฉันรู้ว่าเป็น mergesort nlog(n)และในของฉันสำหรับห่วงฉัน iterating nกว่าชุดข้อมูลทั้งหมดเพื่อที่จะนับเป็น ฉันไม่แน่ใจว่าจะทำอย่างไรกับตัวเลขเหล่านี้ ฉันควรรวมพวกเขาเข้าด้วยกันไหม? ถ้าฉันจะทำอย่างนั้นฉันจะทำอย่างไร

2
ทำไม Big O จึงสอนแทน Big Theta
สัญลักษณ์ Big O จัดเตรียมขอบเขตบนของฟังก์ชันในขณะที่ Big Theta ให้ขอบเขตที่ จำกัด อย่างไรก็ตามฉันพบว่าสัญกรณ์ Big O โดยทั่วไปแล้ว (และเป็นทางการ) สอนและใช้เมื่อพวกเขาหมายถึง Big Theta จริงๆ เช่น "Quicksort คือ O (N ^ 2)" สามารถเปลี่ยนเป็นคำพูดที่แข็งแกร่งมากขึ้น "Quicksort คือΘ (N ^ 2)" ในขณะที่การใช้ Big O นั้นถูกต้องทางเทคนิคการใช้ Big Theta ที่แพร่หลายจะไม่แสดงออกและนำไปสู่ความสับสนน้อยลงหรือไม่ มีเหตุผลทางประวัติศาสตร์บ้างไหมว่าทำไม Big O นี้จึงถูกใช้มากกว่าปกติ? หมายเหตุWikipedia : อย่างไม่เป็นทางการโดยเฉพาะอย่างยิ่งในวิทยาการคอมพิวเตอร์สัญกรณ์บิ๊กโอมักได้รับอนุญาตให้ถูกทารุณกรรมบ้างเพื่ออธิบายขอบเขตที่ไม่มีซีมโทติคที่ใช้สัญกรณ์บิ๊กซีอาจจะเหมาะสมกว่าในบริบทที่กำหนด

6
สิ่งที่คุณเรียกว่าเมื่อคุณเปลี่ยนเวลาดำเนินการ Big O ของฟังก์ชั่น [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว สมมติว่าฉันมีฟังก์ชั่นที่เรียงลำดับฐานข้อมูลในO(n^2)เวลา ฉันต้องการที่จะทำการปรับโครงสร้างใหม่เพื่อให้มันทำงานได้O(n log(n))ทันเวลาและในการทำเช่นนั้นฉันจะเปลี่ยนวิธีพื้นฐานในการทำงานของการดำเนินการในขณะที่รักษาค่าส่งคืนและอินพุตให้เท่ากัน ฉันจะเรียกกิจกรรมการปรับโครงสร้างซ้ำนี้ว่าอะไร "Speeding-up-ifying" ดูเหมือนไม่ถูกต้องเนื่องจากคุณสามารถทำให้อัลกอริทึมเร็วขึ้นโดยไม่ต้องเปลี่ยนความเร็ว O ขนาดใหญ่ที่มันทำงาน "การทำให้เรียบง่าย" ก็ดูไม่ถูกต้องเช่นกัน ฉันจะเรียกกิจกรรมนี้ว่าอะไร ปรับปรุง คำตอบที่ดีที่สุดที่ฉันสามารถหาได้คือการลดความซับซ้อนของเวลาแบบอสมมาตร
19 complexity  big-o 

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