เราได้รับอาร์เรย์ของตัวเลขระหว่าง 1 ถึง n เป้าหมายที่นี่คือการค้นหาหมายเลข ของการดำเนินการ 'moveto front' ที่จำเป็นในการจัดเรียงอาร์เรย์ที่กำหนด อาร์เรย์ไม่มีการซ้ำซ้อน การดำเนินการ "ย้ายไปด้านหน้า" จะเลือกองค์ประกอบและวางไว้ที่ตำแหน่งแรก ที่นี่ที่ดัชนี 0
เราจะสำรวจอาร์เรย์จากจุดสิ้นสุด หากองค์ประกอบอยู่ในตำแหน่งที่ถูกต้อง ก็ไม่จำเป็นต้องย้ายอย่างอื่น สำหรับองค์ประกอบตั้งแต่ 1 ถึง n ตำแหน่งที่ถูกต้องในอาร์เรย์ขององค์ประกอบ arr[i] ควรอยู่เหนือดัชนี i+1 arr[0] ควรเป็น 1, arr[1] ควรเป็น 2 และ…….arr[n-1] ควรเป็น n.
อินพุต
Arr[]= { 4,3,2,1 } ผลลัพธ์
Minimum move-to-front operations: 3
คำอธิบาย
Pull 3, 3,4,2,1 count=1 Pull 2, 2,3,4,1 count=2 Pull 1, 1,2,3,4 count=3
อินพุต
Arr[]= { 6,1,2,5,4,3 } ผลลัพธ์
Minimum move-to-front operations: 5
คำอธิบาย
Pull 5, 5,6,1,2,4,3 count=1 Pull 4, 4,5,6,1,2,3 count=2 Pull 3, ,4,5,6,1,2 count=3 Pull 2, 2,3,4,5,6,1 count=4 Pull 1, 1,2,3,4,5,6 count=5
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
Integer array Arr[] เก็บตัวเลข 1 ถึง n
-
ขนาดตัวแปรจำนวนเต็มเก็บความยาวของอาร์เรย์ Arr[]
-
ฟังก์ชัน movetoFront(int arr[], int n) รับอาร์เรย์และความยาวเป็นอินพุตและส่งกลับจำนวนขั้นต่ำของการดำเนินการ "เลื่อนไปด้านหน้า" ที่จำเป็นในการจัดเรียงอาร์เรย์ที่กำหนด
-
ตัวแปร Count เริ่มต้นด้วยขนาดของอาร์เรย์ เนื่องจากองค์ประกอบทั้งหมดสามารถย้ายได้ในกรณีที่อาร์เรย์ลำดับลดลง
-
เริ่มสำรวจจากดัชนีสุดท้ายและเคลื่อนไปทางด้านหน้า หากค่าองค์ประกอบเหมือนกับการนับ (สำหรับองค์ประกอบที่เรียงลำดับระหว่าง 1 ถึง n n คือค่าสุดท้าย n-1 จะเป็นลำดับที่สองและต่อไปเรื่อยๆ) จากนั้นให้ลดจำนวนลงตามองค์ประกอบนั้น ในตำแหน่งที่ถูกต้อง
-
ด้วยวิธีนี้เมื่อสิ้นสุดการวนซ้ำ การนับ ได้ผลลัพธ์ที่ต้องการ
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
// Calculate minimum number of moves to arrange array
// in increasing order.
int movetoFront(int arr[], int n){
//take count as all elements are correctly placed
int count = n;
// Traverse array from end
for (int i=n-1; i >= 0; i--){
// If current item is at its correct position,
//decrement the count
//range is 1 to n so every arr[i] should have value i+1
//1 at 0 index, 2 at 1 index........
if (arr[i] == count)
count--;
}
return count;
}
int main(){
int Arr[] = {5, 3, 4, 7, 2, 6, 1};
int size = 7;
cout <<"Minimum 'move-to-front' to sort array:"<< movetoFront(Arr, size);
return 0;
} ผลลัพธ์
Minimum 'move-to-front' to sort array:6