Hướng dẫn next permutation python library - thư viện python hoán vị tiếp theo

Đưa ra một mảng mảng [] có kích thước n, nhiệm vụ là in từ vựng tiếp theo từ vựng tiếp theo của mảng đã cho. Nếu không tồn tại bất kỳ hoán vị lớn hơn, thì hãy in hoán vị nhỏ nhất về mặt từ vựng của mảng đã cho.arr[] of size N, the task is to print the lexicographically next greater permutation of the given array. If there does not exist any greater permutation, then print the lexicographically smallest permutation of the given array.

Examples:

Đầu vào: n = 6, mảng = {1, 2, 3, 6, 5, 4} đầu ra: {1, 2, 4, 3, 5, 6} Giải thích: hoán vị tiếp theo của mảng đã cho là {1, 2 , 4, 3, 5, 6}. N = 6, arr = {1, 2, 3, 6, 5, 4}
Output: {1, 2, 4, 3, 5, 6}
Explanation: The next permutation of the given array is {1, 2, 4, 3, 5, 6}.

Đầu vào: N = 3, ARR = {3, 2, 1} Đầu ra: {1, 2, 3} Giải thích: Như ARR [] là hoán vị cuối cùng. & Nbsp; Vì vậy, hoán vị tiếp theo là thấp nhất. N = 3, arr = {3, 2, 1}
Output: {1, 2, 3}
Explanation: As arr[] is the last permutation. 
So, the next permutation is the lowest one.

Cách tiếp cận vũ lực:

Một cách đơn giản để giải quyết vấn đề này là tạo ra tất cả các hoán vị của mảng đã cho và trả về hoán vị chỉ lớn hơn mảng đã cho. & NBSP;

Độ phức tạp về thời gian: O (n * n!), Vì tổng số hoán vị có thể là không gian phụ trợ: O (n), để lưu trữ hoán vị trong một số cấu trúc dữ liệu.: O(N * N!), as the total possible permutations are N!
Auxiliary Space: O(N), for storing the permutation in some data structure.

Hoán vị tiếp theo trong độ phức tạp thời gian tuyến tính:

Illustration: 

Hãy để thử một số ví dụ để xem liệu chúng ta có thể nhận ra một số mẫu không. & NBSP;

[3, 1, 3] = Số lớn hơn tiếp theo là 331 [5, 1, 3] = Số lớn hơn tiếp theo là 531 [1, 2, 3] Số lớn hơn là 1435 [3, 2, 1] = Chúng tôi không thể tạo một số lớn hơn số hiện tại từ tất cả các hoán vị có thể
[5, 1, 3] = next greater number is 531
[1, 2, 3] = next greater number is 132
[1, 3, 5, 4] = next greater number is 1435
[3, 2, 1] = we can’t form a number greater than the current number from all the possible permutations

Vì vậy, rõ ràng là để có được hoán vị tiếp theo, chúng ta sẽ phải thay đổi số ở vị trí càng đúng càng tốt. Mỗi hoán vị (ngoại trừ lần đầu tiên) có hậu tố ngày càng tăng. Bây giờ nếu chúng ta thay đổi mô hình từ điểm trục (trong đó hậu tố ngày càng tăng) thành biểu diễn từ vựng tiếp theo của nó, chúng ta sẽ nhận được hoán vị lớn hơn tiếp theo.

Để hiểu cách thay đổi mẫu từ Pivot, hãy xem hình ảnh dưới đây:

Quan sát hoán vị tiếp theo: & nbsp;

Minh họa về Next_Permuting

Thực hiện theo các bước dưới đây để thực hiện quan sát trên:

  • Lặp lại trên mảng đã cho từ đầu và tìm chỉ số đầu tiên (pivot) không theo thuộc tính của hậu tố không tăng, (tức là, & nbsp; mảng [i] (pivot) which doesn’t follow property of non-increasing suffix, (i.e,  arr[i] < arr[i + 1]).
  • Kiểm tra xem chỉ số Pivot không tồn tại & NBSP;pivot index does not exist 
    • Điều này có nghĩa là chuỗi đã cho trong mảng là lớn nhất có thể. Vì vậy, trao đổi mảng hoàn chỉnh.
  • Mặt khác, lặp lại mảng từ cuối và tìm cho người kế vị của Pivot trong hậu tố. successor of pivot in suffix.
  • Trao đổi trục và người kế thừapivot and successor
  • Giảm thiểu phần hậu tố bằng cách đảo ngược mảng từ trục + 1 cho đến N.pivot + 1 till N.

Dưới đây là việc thực hiện phương pháp trên:

C++

#include

using namespace std;

void nextPermutation(vector<int>& arr)

{

    int using1

    using3 using4

using5using6 using7

using8using9namespace0

using5namespace2

    namespace2

    using6 namespace7

using5namespace9

    namespace2

    std;3 {

using5using3 std;7

using8using6 void0

void1using9namespace0

using8namespace2

using5namespace2

using5void9

using5nextPermutation(vector<1

    namespace2

namespace2

int nextPermutation(vector<6

{

    nextPermutation(vector<9intint1

    int3

    using3 int6int7 int8

using5>& arr)0>& arr)1namespace0

    namespace2

    >& arr)6 >& arr)7

namespace2

Độ phức tạp về thời gian: O (n), trong đó n là kích thước của mảng đã cho.AUXILIARY: O (1)O(N), where N is the size of the given array.
Auxiliary Space: O(1)