แถวลำดับพลวัต
แนวคิดเบื้องต้นของแถวลำดับพลวัตเริ่มต้นด้วยการจองหน่วยความจำพลวัตเพื่อสร้างแถวลำดับขนาดคงที่ขึ้นมาให้มีขนาดในระดับหนึ่ง เรียกขนาดนี้ว่า<b data-parsoid='{"dsr":[2458,2486,3,3]}'>ความจุของแถวลำดับพลวัต แถวลำดับที่สร้างมานี้จะประกอบไปด้วยสองส่วนคือ ส่วนที่เก็บข้อมูล</i>ของแถวลำดับพลวัต กับ ส่วนที่ไม่ได้ใช้งาน ขนาดของส่วนที่เก็บข้อมูลนี้เรียกว่า<b data-parsoid='{"dsr":[2634,2660,3,3]}'>ขนาดของแถวลำดับพลวัต เมื่อมีการเพิ่มข้อมูลเข้ามาต่อท้ายก็เป็นเพียงการเปลี่ยนส่วนที่ไม่ได้ใช้งานให้มาเป็นส่วนเก็บข้อมูล ในขณะที่การลบข้อมูลออกด้านท้ายก็เป็นการเปลี่ยนส่วนเก็บข้อมูลให้มาเป็นส่วนที่ไม่ได้ใช้งาน ซึ่งการดำเนินการเปลี่ยนพื้นที่ไปมาระหว่าง ส่วนที่เก็บข้อมูล กับ ส่วนที่ไม่ได้ใช้งาน ใช้เวลาคงที่หรือ Θ ( 1 ) {\displaystyle \Theta (1)} เท่านั้น
ขั้นตอนวิธีการผลักดัน - ติดป้ายใหม่
ในแต่ละขึ้นตอนของขั้นตอนวิธีนั้น จะทำการไหลก่อนล่วงหน้า เพื่อให้ผลคำนวณเป็นไปตามที่เราต้องการ ดังนี้
ขอให้สังเกตว่าเงื่อนไขที่ทำการไหลก่อนล่วงหน้านี้ เป็นการผ่อนคลายจากสภาพที่สอดคล้องกันสำหรับ กฎการไหล ในเครือข่ายของการไหลปกติ
เราสังเกตเห็นว่าเส้นทางที่ยาวมากที่สุดที่เป็นไปได้จากปม "s" ไปปม "t" คือ ขนาดของปม | "V" |
ดังนั้นเป็นไปได้ที่จะกำหนดความสูงให้กับปม ตามกฎของการไหล ดังนี้ "height(s) = | V |" และ "height(t) = 0"
และถ้าค่าการไหลจากปม "u" ไปปม "v" นั้นเป็นบวก คือ "height(u) > height(v)" เราจะปรับความสูงของปม เหมือนกับการไหลของน้ำที่ไหลลงพื้น
ความสูงของปม ( ยกเว้นปม "s" และปม "t" ) จะถูกปรับ และการไหลจะถูกส่งระหว่างปมจนกระทั่งถึงปม "t" จากนั้นเราจะทำการเพิ่มความสูงของปมที่อยู่ภายในจนกระทั่งทุกปมในเครือข่ายที่ไม่ถึงปม "t" มีการไหลย้อนกลับไปสู่ปม "s"
ปมสามารถทำให้ความสูงถึง "2| V | − 1" ก่อนที่จะเสร็จสมบูรณ์ คือ ความยาวสูงสุดที่เป็นไปได้ของเส้นทางที่กลับมาที่ปม "s" รวมปม "t" ด้วย ยาวเท่ากับ "| V | − 1" และมี "height(s) = | V |, height(t) = 0"