Contar todas las permutaciones de una array

Dada una array de enteros A[] sin elementos duplicados, escriba una función que devuelva el recuento de todas las permutaciones de una array que no tenga subarreglo de [i, i+1] para cada i en A[]. 
Ejemplos: 
 

Input  : 1 3 9 
Output : 3
All the permutation of 1 3 9 are : 
[1, 3, 9], [1, 9, 3], [3, 9, 1], [3, 1, 9], [9, 1, 3], [9, 3, 1]
Here [1, 3, 9], [9, 1, 3] are removed as they contain subarray 
[1, 3] from original list and [3, 9, 1] removed as it contains 
subarray [3, 9] from original list so, 
Following are the 3 arrays that satisfy the condition : 
[1, 9, 3], [3, 1, 9], [9, 3, 1]

Input  : 1 3 9 12
Output : 11

Solución ingenua: iterar a través de la lista de todas las permutaciones y eliminar las arrays que contienen cualquier subarreglo [i, i+1] de A[] .
Código: código de Python para averiguar la permutación en la array 
 

Python3

# Python implementation of the approach
from itertools import permutations
 
# Function that returns the count of all the permutation
# having no subarray of [i,i+1]
 
def count(arr):
    z=[]
    perm = permutations(arr)
     
    for i in list(perm):
        z.append(list(i))
    q=[]
     
    for i in range(len(arr)-1):
        x,y=arr[i],arr[i+1]
         
        for j in range(len(z)):
            if z[j].index(x)!=len(z[j])-1:
                if z[j][z[j].index(x)+1]==y:
                    q.append(z[j])
                     
    for i in range(len(q)):
         if q[i] in z:
             z.remove(q[i])
    return len(z)
  
# Driver Code
A = [1,3, 8, 9]
print(count(A))

Producción : 
 

11

Solución eficiente: La siguiente es una solución recursiva basada en el hecho de que la longitud de la array decide el número de todas las permutaciones que no tienen subarreglo [i, i+1] para cada i en A[ ]
Supongamos que la longitud de A[ ] es n, entonces 
 

n        = n-1
count(0) = 1
count(1) = 1
count(n) = n * count(n-1) + (n-1) * count(n-2)

Código: a continuación se muestra el código para implementar la función recursiva que devuelve el recuento de permutaciones 
 

C++

// C++ implementation of the approach
// Recursive function that return count of
// permutation based on the length of array.
#include <bits/stdc++.h>
using namespace std;
 
int count(int n)
{
    if(n == 0)
        return 1;
    if(n == 1)
        return 1;
    else
        return (n * count(n - 1)) +
                        ((n - 1) * count(n - 2));
}
 
// Driver code
int main()
{
    int A[] = {1, 2, 3, 9};
 
    int len = sizeof(A) / sizeof(A[0]);
    cout << count(len - 1);
}
 
// This code is contributed by 29AjayKumar

Java

// Java implementation of the approach
// Recursive function that return count of
// permutation based on the length of array.
import java.util.*;
 
class GFG
{
 
static int count(int n)
{
    if(n == 0)
        return 1;
    if(n == 1)
        return 1;
    else
        return (n * count(n - 1)) +
                        ((n - 1) * count(n - 2));
}
 
// Driver Code
static public void main(String[] arg)
{
    int []A = {1, 2, 3, 9};
 
    System.out.print(count(A.length - 1));
}
}
 
// This code is contributed by PrinciRaj1992

Python3

# Python implementation of the approach
# Recursive function that return count of
# permutation based on the length of array.
 
def count(n):
    if n == 0:
        return 1
    if n == 1:
        return 1
    else:
        return (n * count(n-1)) + ((n-1) * count(n-2))
     
# Driver Code
A = [1, 2, 3, 9]
print(count(len(A)-1))

C#

// C# implementation of the approach
// Recursive function that return count of
// permutation based on the length of array.
using System;
     
class GFG
{
 
static int count(int n)
{
    if(n == 0)
        return 1;
    if(n == 1)
        return 1;
    else
        return (n * count(n - 1)) +
         ((n - 1) * count(n - 2));
}
 
// Driver Code
static public void Main(String[] arg)
{
    int []A = {1, 2, 3, 9};
 
    Console.Write(count(A.Length - 1));
}
}
 
// This code is contributed by Princi Singh

Javascript

<script>
// Javascript implementation of the approach
// Recursive function that return count of
// permutation based on the length of array.
 
function count(n) {
 
    if(n == 0)
        return 1;
    if(n == 1)
        return 1;
    else
        return (n * count(n - 1)) +
                        ((n - 1) * count(n - 2));
}
 
// Driver code
 
let A = [1, 2, 3, 9];
let len = A.length;
document.write(count(len - 1));
 
// This code is contributed by Samim Hossain Mondal.
</script>

Producción : 
 

11

Publicación traducida automáticamente

Artículo escrito por divyamohan123 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *