ในการฝึกซ้อมเหล่านี้คุณจะฝึกการกำหนดความซับซ้อนของอัลกอริทึม สำหรับการฝึกซ้อมแต่ละครั้งเราจะจัดหาฟังก์ชั่นโค้ดและคุณจะสร้างความซับซ้อนของ O Big O โดยการวิเคราะห์รหัสโดยไม่ต้องใช้งาน
กำหนด Big O สำหรับอัลกอริทึมต่อไปนี้: คุณกำลังนั่งอยู่ในห้องที่มี 15 คน คุณต้องการหาเพื่อนเล่นสำหรับสุนัขของคุณโดยเฉพาะอย่างยิ่งสายพันธุ์เดียวกัน ดังนั้นคุณต้องการทราบว่าใครใน 15 คนมีสายพันธุ์เดียวกับสุนัขของคุณ คุณยืนขึ้นและตะโกนออกมาที่นี่มีโกลเด้นรีทรีฟเวอร์และอยากเป็น playdate สำหรับทองคำของฉัน มีคนตะโกน - "ฉันทำมีความสุขที่จะพาเขาไป"
กำหนด Big O สำหรับอัลกอริทึมต่อไปนี้: คุณกำลังนั่งอยู่ในห้องที่มี 15 คน คุณต้องการหาเพื่อนเล่นสำหรับสุนัขของคุณที่เป็นสายพันธุ์เดียวกัน ดังนั้นคุณต้องการทราบว่าใครใน 15 คนมีสายพันธุ์เดียวกับสุนัขของคุณ คุณเริ่มต้นด้วยคนแรกและถามเขาว่าเขามี Retriever สีทองหรือไม่ เขาบอกว่าไม่แล้วคุณถามคนต่อไปและคนต่อไปและคนต่อไปจนกว่าคุณจะพบคนที่มีสีทองหรือไม่มีใครถาม
บิ๊กโอของอัลกอริทึมต่อไปนี้คืออะไร? อธิบายคำตอบของคุณ
if (value % 2 === 0) {
return true;
}
else {
return false;
}
}
บิ๊กโอของอัลกอริทึมต่อไปนี้คืออะไร? อธิบายคำตอบของคุณ
for (let i = 0; i < arr1.length; i++) {
const el1 = arr1[i];
for (let j = 0; j < arr2.length; j++) {
const el2 = arr2[j];
if (el1 === el2) return true;
}
}
return false;
}
บิ๊กโอของอัลกอริทึมต่อไปนี้คืออะไร? อธิบายคำตอบของคุณ
for (let i = 0; i < array.length; i++) {
array[i] *= 2;
}
return array;
}
บิ๊กโอของอัลกอริทึมต่อไปนี้คืออะไร? อธิบายคำตอบของคุณ
for (let i = 0; i < array.length; i++) {
if (array[i] === item) {
return i;
}
}
}
บิ๊กโอของอัลกอริทึมต่อไปนี้คืออะไร? อธิบายคำตอบของคุณ
for (let i = 0; i < arr.length; i++) {
for(let j = i + 1; j < arr.length; j++) {
console.log(arr[i] + ", " + arr[j] );
}
}
}
อัลกอริทึมต่อไปนี้ทำอะไร? ความซับซ้อนของรันไทม์คืออะไร? อธิบายคำตอบของคุณ
let result = [];
for (let i = 1; i <= num; i++) {
if (i === 1) {
result.push(0);
}
else if (i === 2) {
result.push(1);
}
else {
result.push(result[i - 2] + result[i - 3]);
}
}
return result;
}
ในตัวอย่างนี้เรากลับไปสู่ปัญหาการค้นหาโดยใช้วิธีการที่ซับซ้อนกว่าในการค้นหาที่ไร้เดียงสาข้างต้น สมมติว่าอาร์เรย์อินพุตจะถูกจัดเรียงเสมอ บิ๊กโอของอัลกอริทึมต่อไปนี้คืออะไร? อธิบายคำตอบของคุณ
let minIndex = 0;
let maxIndex = array.length - 1;
let currentIndex;
let currentElement;
while (minIndex <= maxIndex) {
currentIndex = Math.floor((minIndex + maxIndex) / 2);
currentElement = array[currentIndex];
if (currentElement < item) {
minIndex = currentIndex + 1;
}
else if (currentElement > item) {
maxIndex = currentIndex - 1;
}
else {
return currentIndex;
}
}
return -1;
}
บิ๊กโอของอัลกอริทึมต่อไปนี้คืออะไร? อธิบายคำตอบของคุณ
return arr[Math.floor(Math.random() * arr.length)];
}
อัลกอริทึมต่อไปนี้ทำอะไร? บิ๊กโอของอัลกอริทึมต่อไปนี้คืออะไร? อธิบายคำตอบของคุณ
if (n < 2 || n % 1 !== 0) {
return false;
}
for (let i = 2; i < n; ++i) {
if (n % i === 0) return false;
}
return true;
}
หอคอยแห่งฮานอยเป็นปริศนาทางคณิตศาสตร์ที่มีชื่อเสียงมาก (บางเกมเรียกว่าเกม!) นี่คือวิธีที่จะไป:
มีสามแท่งและดิสก์จำนวนมากที่มีขนาดต่างกันซึ่งสามารถเลื่อนลงบนก้านใด ๆ ปริศนาเริ่มต้นด้วยดิสก์ซ้อนกันอย่างเรียบร้อยตามลำดับขนาดของขนาดบนแท่งเดียวดิสก์ที่เล็กที่สุดที่ด้านบน (สร้างรูปทรงกรวย) อีกสองแท่งว่างเปล่าเพื่อเริ่มต้นด้วย
เป้าหมายของปริศนาคือการย้ายสแต็คทั้งหมดของแท่งไปยังก้านอื่น (ไม่สามารถเป็นก้านดั้งเดิมที่มันถูกซ้อนกันมาก่อน) ที่มันจะซ้อนกันตามลำดับจากน้อยไปมากเช่นกัน สิ่งนี้ควรทำตามกฎต่อไปนี้:
งานของคุณ:
แก้ปัญหาการฝึกซ้อม JS 12 ซ้ำ ๆ แทนที่จะทำซ้ำ
ใช้วิธีแก้ปัญหาจาก repo นี้และระบุความซับซ้อนของเวลา (ใหญ่ o) ของแต่ละคน
ใช้วิธีการแก้ปัญหาของคุณจากการฝึกซ้อมซ้ำในไฟล์ JS 12 และระบุความซับซ้อนของเวลา (Big O) ของแต่ละรายการ