วิศวกรรมซอฟต์แวร์และโปรแกรม
เข้าใจการแจ้งข้อมูลการลงประชามติของกลุ่มการลงสัมภาษณ์
Table of Contents
โน้ตใหญ่คืออะไร
สัญลักษณ์ของ ig-O คือรูปแบบคณิตศาสตร์ที่ใช้ในวิทยาศาสตร์คอมพิวเตอร์ เพื่ออธิบาย [FLT: 0] การใช้งาน [FLT] value ของอัลกอริทึมเมื่อขนาดป้อนข้อมูล: (FT) หมายถึงเวลาทํางานไม่เกินค่าของขนาดการเติบโตของฟังก์ชันหลายเท่า (FO) สําหรับอัลกอริทึมที่มีขนาดป้อน [FTT: 2] ขนาด [FTL] [3] สัญลักษณ์ O[FT] [FT] [FF] [FF] [F] [FT]]] โครงสร้างของเครื่องมือนี้ อนุสรณ์การใช้รายละเอียดเชิงเทคนิคการเขียนโปรแกรมของเครื่องมือนี้ โครงสร้างแบบ โครงสร้างนี้ โครงสร้างของเครื่องมือนี้ โครงสร้างของเครื่องมือนี้ โครงสร้างนี้ โครงสร้างของเครื่องมือนี้ อนุทินเมื่อ:
ในการสัมภาษณ์แบบเข้ารหัส บิ๊ก-โอ เป็นเครื่องมือทั่วไปในการอภิปรายอย่างมีประสิทธิภาพ ผู้สัมภาษณ์คาดหวังให้คุณใช้เหตุผลในการแก้ปัญหาของคุณ และเมื่อเป็นไปได้ เสนอทางเลือกที่มีประสิทธิภาพมากขึ้น ความเข้าใจของบิ๊ก-โอ จะให้คุณขยายความคมชัดของคําศัพท์
เหตุ ใด จึง มี เรื่อง ใหญ่ ใน การ สัมภาษณ์ ที่ ทํา ให้ หงุดหงิด
การสัมภาษณ์ไม่เพียงเพื่อทดสอบว่า คุณสามารถสร้างวิธีแก้ปัญหาได้หรือไม่ แต่เพื่อประเมินกระบวนการแก้ปัญหาของคุณ บิก-โอมีบทบาทสําคัญในการประเมินนั้น เมื่อคุณอธิบายความซับซ้อนของเวลาในวิธีการของคุณ คุณจะแสดงความตระหนักในข้อจํากัดของการทํางาน -- แม้สําหรับปัญหาที่ดูเล็กนิดเดียว นอกจากนี้ คําถามมากมายถูกออกแบบให้แก้ปัญหาอย่างไร้เดียงสานั้นช้าเกินไป สําหรับค่านําเข้าที่มีขนาดใหญ่ คําตอบที่ถูกต้องมักต้องใช้ความเข้าใจในวิธีการลดความซับซ้อนจาก On ถึง On หรือ On (On) On)
นอกจากนี้ การพูดถึงบิ๊ก-โอ แสดงให้เห็นว่าคุณสามารถเหตุผลเกี่ยวกับการค้าขายระหว่างกลยุทธ์ต่าง ๆ ตัวอย่างเช่น การใช้หน่วยความจําพิเศษ (พื้นที่) เพื่อเพิ่มความเร็วในการประมวลผล (เวลา) เป็นรูปแบบการสัมภาษณ์แบบคลาสสิก การที่จะสามารถอธิบายได้ว่าทําไมตารางฮาชาถึงให้ O(1) ในขณะรายการต้องการ O(n) สามารถแยกคุณออกจากผู้สมัครที่แก้ปัญหาได้เพียงอย่างใดอย่างหนึ่ง
การ ใช้ เวลา ร่วม กัน
OC( 1) – เวลาคงที่
อัลกอริทึมทํางานในเวลาคงที่ เมื่อเวลาดําเนินการไม่ขึ้นอยู่กับขนาดที่ป้อน [FLT: 0] Excample: การเข้าถึงองค์ประกอบโดยดัชนีในอาร์เรย์ ไม่ว่าอาร์เรย์จะมีองค์ประกอบ 10 หรือ 10 ล้านตัว การมองจะใช้เวลาจํานวนขั้นตอนเครื่องเดียวกัน
def get_first(arr):
return arr[0] # O(1)
O( logn) – เวลาlogararithmic
ความซับซ้อนของล็อกการิทมิฬเกิดขึ้นเมื่ออัลกอริทึมนั้น จัดเรียงค่าจากค่าที่ป้อนเข้าไปซ้ําไป [FLT: 0] Excample: สืบค้นเมื่อลําดับของลําดับ. อักขระแต่ละตัวจะละทิ้งสมาชิกที่เหลือครึ่งหนึ่ง ดังนั้นจํานวนการดําเนินการจะสัดส่วนกับล็อก 2(n).
def binary_search(arr, target):
left, right = 0, len(arr)-1
while left <= right:
mid = (left+right)//2
if arr[mid] == target: return mid
elif arr[mid] < target: left = mid+1
else: right = mid-1
return -1 # O(log n)
O(n) - เวลาไลน์ดาร์
อัลกอริทึมเวลา Linear ทําผ่านครั้งเดียวผ่านการป้อน [FT: 0] Example: ค้นหาค่าสูงสุดในรายการที่ยังไม่ใช้ คุณต้องตรวจสอบทุกองค์ประกอบที่ครั้งหนึ่ง
def find_max(arr):
max_val = arr[0]
for i in arr[1:]:
if i > max_val: max_val = i
return max_val # O(n)
O( n log) – เวลาบันทึกเสียง
ความ ซับ ซ้อน นี้ เป็น เรื่อง ปกติ สําหรับ การ จัด เรียง อย่าง มี ประสิทธิภาพ เช่น การ รวม ผสาน, การ เรียง แถว, และ การ จัด ประเภท ห้อง สมุด มาตรฐาน ใน หลาย ภาษา เกิด จาก การ แบ่ง ส่วน ที่ เข้า ไป ใน ครึ่ง เสี้ยว (ใน บาง ระดับ) และ ทํา งาน แบบ เชิงเส้น ใน แต่ ละ ระดับ (หนึ่ง ระดับ).
def mergesort(arr):
if len(arr) <= 1: return arr
mid = len(arr)//2
left = mergesort(arr[:mid])
right = mergesort(arr[mid:])
return merge(left, right) # O(n log n)
O( n2) - เวลาของกลุ่มชาตินิยม (พ.ศ.
เวลาของควอนตัมปรากฏเมื่อคุณได้วางวงรอบมากกว่าค่านําเข้า [FLT: 0] Example: การเรียงลําดับฟอง, ที่วงนอกทํางาน n ครั้งและวงวงในวิ่ง (n - i) ครั้งเป็นผลให้ n(n-1) การเปรียบเทียบ ( ⁇ n2.
def bubble_sort(arr):
for i in range(len(arr)):
for j in range(len(arr)-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j] # O(n²)
O(^n) – เวลาเอกฐาน
ความซับซ้อนของ Expential เกิดขึ้นเมื่อแต่ละขั้นตอนเพิ่มจํานวนความเป็นไปได้เป็นสองเท่า [FLT: 0] Example: การคํานวณค่าซ้ําของเลขฐานสิบแบบแบบไร้เดียงสาโดยไม่บันทึก อัตราการเกิดซ้ําของต้นไม้แบบเพิ่มความจุสูง ทําให้วิธีการนี้ไม่สามารถทํางานได้สําหรับ n > 30 หรืออื่น ๆ
def fib(n):
if n <= 1: return n
return fib(n-1) + fib(n-2) # O(2^n)
วิธี วิเคราะห์ ความ ซับ ซ้อน ของ อัล กอ ทิก
การให้ปริญญาโทวิเคราะห์บิ๊ก-โอ ต้องใช้วิธีแบบเป็นระบบ ทําตามขั้นตอนเหล่านี้เมื่อคุณพบอัลกอริทึมในการสัมภาษณ์
- [FLT: 0]. identized ขนาดป้อน - โดยทั่วไป en ] สําหรับตัวแปรหนึ่งตัว หรือแยกตัวแปรสําหรับใส่หลายค่า (Eg, [FLTT: 4] en[FLT: 5] และ[FLTT: 6] [FLT] [FLT] [FLT]] [FLT] [FLT]]] [FLT]] [FTT: ⁇ (FTT: 7]].
- [FLT: 0] ค้นหาปฏิบัติการหลัก – ปฏิบัติการที่มีส่วนช่วยมากที่สุดในการรันไทม์ (เช่น การเปรียบเทียบในการเรียงลําดับ, ups in access in สืบค้น).
- [FLT: 0]. ระบุว่าดําเนินการกี่ครั้ง เป็นฟังก์ชันของ. สืบค้นเมื่อ 20.00 น.
- ตัวประกอบคงที่ และเทอมแบบเรียงตัวต่ํา - คงไว้เฉพาะเทอมที่โตเร็วที่สุด ตัวอย่างเช่น 3n2 + 5n + 1 กลายเป็น O(n2).
- [FLT: 0] พิจารณากรณีที่แย่ที่สุด - เว้นตัวเลือกระบุ (flt:1) - หากไม่ได้ระบุไว้ ให้สมมุติว่าการป้อนที่ทําให้เกิดการดําเนินการมากที่สุด สําหรับปัญหาหลายอย่างนี้เป็นตัวกําหนดกรณี
สําหรับความซับซ้อนของอวกาศ ให้ปรับใช้ตรรกะเดียวกันกับการใช้งานหน่วยความจํา อย่านับค่าที่ป้อนเข้าไปของมันเอง -- เฉพาะค่าที่สะสมเพิ่มเติมเท่านั้นระหว่างดําเนินการ
หลุม พราง และ การ หลอก ลวง ที่ มี อยู่ ทั่ว ไป
การ ทํา ให้ ตัว เอง ไม่ มี ความ สุข, มี เฉลี่ย, และ ร้าย แรง ที่ สุด
Big-O มักจะถูกใช้ในการระบุ [FLT: 0] offort-case ผูกพัน อย่างไรก็ตาม คุณควรจะพร้อมที่จะอภิปรายถึงความซับซ้อนเฉลี่ย (เช่น flocort experience O (n logn) แต่แย่ที่สุด On2) ผู้สัมภาษณ์ชื่นชมผู้สมัครที่สามารถอธิบายการแสดงในโลกแห่งความเป็นจริงได้
ไม่แยแสองค์ประกอบค่าคงที่
ในขณะที่ ค่าคงที่ Big-O ไม่สนใจ ในการดําเนินการ อัลกอริทึม O(n) ที่มีความต่อเนื่องมากมายอาจช้ากว่า O(n2) หนึ่งสําหรับเล็ก (FLT:0) นิน. ในการสัมภาษณ์ แจ้งว่าคุณเข้าใจค่าคงที่ แต่เน้นที่ ประสิทธิภาพเชิงบวก (พ.ศ.
ลืมไปยังพื้นที่สํารวจ
ความ ซับ ซ้อน ของ เวลา มัก จะ เป็น จุด รวม ความ สนใจ หลัก แต่ ความ ซับ ซ้อน ของ อวกาศ ก็ สําคัญ พอ ๆ กัน.
สมมุติว่าวนรอบทั้งหมดเป็น On)
ห่วงสองแบบที่วางซ้อนกัน ไม่ได้หมายถึงค่า O( n2) เสมอ หากวงในทํางานเป็นจํานวนคงที่ของครั้งที่ (เช่น การเรียงตามตัวอักษรคงที่) จํานวนทั้งหมดคือ O(n). วิเคราะห์ขอบเขตที่ถูกต้อง.
ข้อ แนะ ที่ ใช้ ได้ จริง สําหรับ วัน สัมภาษณ์
- เริ่มด้วยวิธีแก้ปัญหาที่โหดร้าย และสังเกตความซับซ้อนของมัน จากนั้นเสนอวิธีปรับแต่งและอภิปรายว่าการเปลี่ยนแปลงแต่ละจะมีผลกระทบกับบิ๊ก-โออย่างไร
- ใช้สัญลักษณ์ของ Big-O เป็นเครื่องมือสื่อสาร ตัวอย่างเช่น: “วิธีแก้ปัญหาปัจจุบันของฉันคือ O(n2) เพราะห่วงรังอยู่เหนือทุกคู่ เราสามารถลดมันเหลือ On Logn n ได้ โดยการเรียงลําดับก่อน หรือใช้ O(n) ใช้แผนที่ Ashh.
- เมื่อ ถูก ขอ ให้ วิเคราะห์ รหัส ของ คุณ ให้ เดิน เรียง แถว ไป.
- สะดวกสบายกับต้นไม้ครอบครัวทั่วไป: วนรอบการนําเข้า O(n), ทําซ้ําที่แยก oct input ⁇ O(logn) หรือ On Lod n), ทําซ้ํากิ่งที่หนัก O(2).
- รู้ว่าบิ๊ก-โอ (Big-O) เป็นตัววัดเดียว อภิปรายแลกเปลี่ยนแบบ parames เช่น การอ่านโค้ด , การคงความง่าย และข้อจํากัดในการป้อน (เช่น, n เล็กอาจช่วยแก้ปัญหาแบบ O(n2) ได้ง่ายขึ้น
ทรัพยากรภายนอกสําหรับความเข้าใจที่ลึกกว่า
เพื่อ ทํา ให้ ความ รู้ ของ คุณ มั่นคง จง สํารวจ ข้อ อ้างอิง เหล่า นี้:
- [FLT: 0] Wikipedia: Big O Notation – ภาพรวมทางคณิตศาสตร์แบบครอบคลุม (PDF).
- [FLT: 0] Khan Academy: Algorithums Course – บทเรียนโต้ตอบเกี่ยวกับการวิเคราะห์ความซับซ้อน (PDF).
- [FLT: 0]. BC-O screwed Feder – อ้างอิงอย่างรวดเร็วสําหรับโครงสร้างข้อมูลและอัลกอริทึมทั่วไป
รูปแบบการวน
การเข้าใจสัญลักษณ์ของบิ๊ก-โอ คือรากฐานของการสัมภาษณ์แบบเข้ารหัสที่ประสบความสําเร็จ มันช่วยให้คุณสามารถอธิบายผลของอัลกอริทึมได้อย่างชัดเจน การสื่อสารอย่างมีประสิทธิภาพ และทําให้การค้าขายที่มีความรู้ในการแก้ปัญหาได้อย่างแม่นยํา