You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

parameters.py 2.3 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Fri May 21 12:18:02 2021
  5. @author: ljia
  6. """
  7. def dichotomous_permutation(arr, layer=0):
  8. import math
  9. # def seperate_arr(arr, new_arr):
  10. # if (length % 2) == 0:
  11. # half = int(length / 2)
  12. # new_arr += [arr[half - 1], arr[half]]
  13. # subarr1 = [arr[i] for i in range(1, half - 1)]
  14. # else:
  15. # half = math.floor(length / 2)
  16. # new_arr.append(arr[half])
  17. # subarr1 = [arr[i] for i in range(1, half)]
  18. # subarr2 = [arr[i] for i in range(half + 1, length - 1)]
  19. # subarrs = [subarr1, subarr2]
  20. # return subarrs
  21. if layer == 0:
  22. length = len(arr)
  23. if length <= 2:
  24. return arr
  25. new_arr = [arr[0], arr[-1]]
  26. if (length % 2) == 0:
  27. half = int(length / 2)
  28. new_arr += [arr[half - 1], arr[half]]
  29. subarr1 = [arr[i] for i in range(1, half - 1)]
  30. else:
  31. half = math.floor(length / 2)
  32. new_arr.append(arr[half])
  33. subarr1 = [arr[i] for i in range(1, half)]
  34. subarr2 = [arr[i] for i in range(half + 1, length - 1)]
  35. subarrs = [subarr1, subarr2]
  36. # subarrs = seperate_arr(arr, new_arr)
  37. new_arr += dichotomous_permutation(subarrs, layer=layer+1)
  38. else:
  39. new_arr = []
  40. subarrs = []
  41. for a in arr:
  42. length = len(a)
  43. if length <= 2:
  44. new_arr += a
  45. else:
  46. # subarrs += seperate_arr(a, new_arr)
  47. if (length % 2) == 0:
  48. half = int(length / 2)
  49. new_arr += [a[half - 1], a[half]]
  50. subarr1 = [a[i] for i in range(0, half - 1)]
  51. else:
  52. half = math.floor(length / 2)
  53. new_arr.append(a[half])
  54. subarr1 = [a[i] for i in range(0, half)]
  55. subarr2 = [a[i] for i in range(half + 1, length)]
  56. subarrs += [subarr1, subarr2]
  57. if len(subarrs) > 0:
  58. new_arr += dichotomous_permutation(subarrs, layer=layer+1)
  59. return new_arr
  60. # length = len(arr)
  61. # if length <= 2:
  62. # return arr
  63. # new_arr = [arr[0], arr[-1]]
  64. # if (length % 2) == 0:
  65. # half = int(length / 2)
  66. # new_arr += [arr[half - 1], arr[half]]
  67. # subarr1 = [arr[i] for i in range(1, half - 1)]
  68. # else:
  69. # half = math.floor(length / 2)
  70. # new_arr.append(arr[half])
  71. # subarr1 = [arr[i] for i in range(1, half)]
  72. # subarr2 = [arr[i] for i in range(half + 1, length - 1)]
  73. # if len(subarr1) > 0:
  74. # new_arr += dichotomous_permutation(subarr1)
  75. # if len(subarr2) > 0:
  76. # new_arr += dichotomous_permutation(subarr2)
  77. # return new_arr

A Python package for graph kernels, graph edit distances and graph pre-image problem.