สวัสดี! การบรรยายในวันนี้จะแตกต่างจากที่อื่นเล็กน้อย มันจะแตกต่างตรงที่มันเกี่ยวข้องทางอ้อมกับ Java เท่านั้น อย่างไรก็ตาม หัวข้อนี้มีความสำคัญมากสำหรับโปรแกรมเมอร์ทุกคน เราจะพูดถึง อั ลกอริทึม อัลกอริทึมคืออะไร? กล่าวง่ายๆนี่คือลำดับการกระทำบางอย่างที่ต้องดำเนินการเพื่อให้ได้ผลลัพธ์ที่ต้องการ . เรามักใช้อัลกอริธึมในชีวิตประจำวัน ตัวอย่างเช่น ทุกเช้าคุณจะพบกับงาน: ไปโรงเรียนหรือที่ทำงาน และในขณะเดียวกันก็ต้อง:
- แต่งตัว
- ทำความสะอาด
- เลี้ยงอย่างดี
- ตื่นขึ้นมาด้วยนาฬิกาปลุก
- อาบน้ำล้างหน้า.
- เตรียมอาหารเช้า ชงกาแฟ/ชา
- กิน.
- หากคุณไม่ได้รีดเสื้อผ้าตั้งแต่ตอนเย็นก็รีดผ้าซะ
- แต่งตัว.
- ออกจากบ้าน.
- ซื้อหรือดาวน์โหลดบนอินเทอร์เน็ต "พจนานุกรมชื่อส่วนตัวของรัสเซีย" ฉบับปี 1966
- ค้นหาทุกชื่อในรายการของเราในพจนานุกรมนี้
- จดลงบนกระดาษว่าชื่อนั้นอยู่ในหน้าใดของพจนานุกรม
- เรียงชื่อตามลำดับโดยใช้บันทึกย่อบนแผ่นกระดาษ
for
ที่ทำงานนี้
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
อัลกอริธึมการเขียนมีความซับซ้อนอย่างไร? เชิงเส้น, O(N) จำนวนการกระทำที่โปรแกรมต้องทำนั้นขึ้นอยู่กับจำนวนตัวเลขที่ส่งเข้าไป หากมีตัวเลข 100 ตัวในอาร์เรย์ จะมีการดำเนินการ 100 รายการ (เอาต์พุตบนหน้าจอ) หากมีตัวเลข 10,000 รายการในอาร์เรย์ จะต้องดำเนินการ 10,000 รายการ อัลกอริทึมของเราสามารถปรับปรุงได้หรือไม่? เลขที่ ไม่ว่าในกรณีใด เราจะต้องทำให้N ส่งผ่านอาเรย์และส่งออก N เอาต์พุตไปยังคอนโซล ลองดูอีกตัวอย่างหนึ่ง
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
เรามีอันว่างLinkedList
ซึ่งเราใส่ตัวเลขหลายตัวลงไป เราจำเป็นต้องประมาณความซับซ้อนของอัลกอริทึมในการแทรกตัวเลขตัวเดียวลงในLinkedList
ตัวอย่างของเรา และจะขึ้นอยู่กับจำนวนองค์ประกอบในรายการอย่างไร คำตอบคือO(1) - ความซับซ้อนคงที่ ทำไม โปรดทราบ: ทุกครั้งที่เราใส่ตัวเลขที่จุดเริ่มต้นของรายการ นอกจากนี้ ตามที่คุณจำได้ว่าเมื่อใส่ตัวเลขลงในLinkedList
องค์ประกอบ ตัวเลขเหล่านั้นจะไม่ถูกเลื่อนไปที่ใดเลย - ลิงก์จะถูกกำหนดใหม่ (หากคุณลืมวิธีการทำงานของ LinkedList โดยกะทันหัน โปรดดูการบรรยายเก่ารายการ หนึ่งของเรา ) ถ้าตอนนี้ตัวเลขแรกในรายการของเราคือตัวเลขх
และเราใส่ตัวเลข y ไว้ที่จุดเริ่มต้นของรายการ สิ่งที่จำเป็นต้องมีคือ:
x.previous = y;
y.previous = null;
y.next = x;
สำหรับคำจำกัดความของการอ้างอิงนี้ใหม่ไม่สำคัญสำหรับเราว่าตอนนี้มีตัวเลขอยู่กี่ตัวLinkedList
อย่างน้อยหนึ่งหรืออย่างน้อยหนึ่งพันล้าน ความซับซ้อนของอัลกอริทึมจะคงที่ - O(1)
GO TO FULL VERSION