|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- Created on Fri May 21 12:18:02 2021
-
- @author: ljia
- """
-
- def dichotomous_permutation(arr, layer=0):
- import math
-
- # def seperate_arr(arr, new_arr):
- # if (length % 2) == 0:
- # half = int(length / 2)
- # new_arr += [arr[half - 1], arr[half]]
- # subarr1 = [arr[i] for i in range(1, half - 1)]
- # else:
- # half = math.floor(length / 2)
- # new_arr.append(arr[half])
- # subarr1 = [arr[i] for i in range(1, half)]
- # subarr2 = [arr[i] for i in range(half + 1, length - 1)]
- # subarrs = [subarr1, subarr2]
- # return subarrs
-
-
- if layer == 0:
- length = len(arr)
- if length <= 2:
- return arr
-
- new_arr = [arr[0], arr[-1]]
- if (length % 2) == 0:
- half = int(length / 2)
- new_arr += [arr[half - 1], arr[half]]
- subarr1 = [arr[i] for i in range(1, half - 1)]
- else:
- half = math.floor(length / 2)
- new_arr.append(arr[half])
- subarr1 = [arr[i] for i in range(1, half)]
- subarr2 = [arr[i] for i in range(half + 1, length - 1)]
- subarrs = [subarr1, subarr2]
- # subarrs = seperate_arr(arr, new_arr)
- new_arr += dichotomous_permutation(subarrs, layer=layer+1)
-
- else:
- new_arr = []
- subarrs = []
- for a in arr:
- length = len(a)
- if length <= 2:
- new_arr += a
- else:
- # subarrs += seperate_arr(a, new_arr)
- if (length % 2) == 0:
- half = int(length / 2)
- new_arr += [a[half - 1], a[half]]
- subarr1 = [a[i] for i in range(0, half - 1)]
- else:
- half = math.floor(length / 2)
- new_arr.append(a[half])
- subarr1 = [a[i] for i in range(0, half)]
- subarr2 = [a[i] for i in range(half + 1, length)]
- subarrs += [subarr1, subarr2]
-
- if len(subarrs) > 0:
- new_arr += dichotomous_permutation(subarrs, layer=layer+1)
-
- return new_arr
-
- # length = len(arr)
- # if length <= 2:
- # return arr
-
- # new_arr = [arr[0], arr[-1]]
- # if (length % 2) == 0:
- # half = int(length / 2)
- # new_arr += [arr[half - 1], arr[half]]
- # subarr1 = [arr[i] for i in range(1, half - 1)]
- # else:
- # half = math.floor(length / 2)
- # new_arr.append(arr[half])
- # subarr1 = [arr[i] for i in range(1, half)]
- # subarr2 = [arr[i] for i in range(half + 1, length - 1)]
- # if len(subarr1) > 0:
- # new_arr += dichotomous_permutation(subarr1)
- # if len(subarr2) > 0:
- # new_arr += dichotomous_permutation(subarr2)
-
- # return new_arr
|