Statistics

Problem Statement for "RandomSort"

Problem Statement

You are given a int[] permutation containing a permutation of the first n positive integers (1 through n), and you want to sort them in ascending order. To do this, you will perform a series of swaps. For each swap, you consider all pairs (i, j) such that i < j and permutation[i] > permutation[j]. Among all those pairs, you choose one randomly and swap permutation[i] and permutation[j]. Each pair has the same probability of being chosen. Return the expected number of swaps needed to sort permutation in ascending order.

Definition

Class:
RandomSort
Method:
getExpected
Parameters:
int[]
Returns:
double
Method signature:
double getExpected(int[] permutation)
(be sure your method is public)

Notes

  • The returned value must be accurate to within a relative or absolute value of 1E-9.

Constraints

  • permutation will contain between 1 and 8 elements, inclusive.
  • permutation will contain each integer between 1 and n, inclusive, exactly once, where n is the number of elements in permutation.

Examples

  1. {1,3,2}

    Returns: 1.0

    Exactly one swap is needed.

  2. {4,3,2,1}

    Returns: 4.066666666666666

    In the first step, any two elements can be swapped.

  3. {1}

    Returns: 0.0

    This permutation is already sorted, so there's no need to perform any swaps.

  4. {2,5,1,6,3,4}

    Returns: 5.666666666666666

  5. {1,2}

    Returns: 0.0

  6. {2,1}

    Returns: 1.0

  7. {1,2,3}

    Returns: 0.0

  8. {2,1,3}

    Returns: 1.0

  9. {2,3,1}

    Returns: 2.0

  10. {3,1,2}

    Returns: 2.0

  11. {3,2,1}

    Returns: 2.333333333333333

  12. {1,5,2,3,6,4}

    Returns: 4.0

  13. {1,5,3,7,8,6,2,4}

    Returns: 8.685714285714287

  14. {6,3,4,1,5,8,7,2}

    Returns: 9.355555555555558

  15. {3,1,4,2,6,5}

    Returns: 4.0

  16. {5,1,4,2,3}

    Returns: 4.866666666666665

  17. {7,2,5,4,1,3,8,6}

    Returns: 9.22063492063492

  18. {2,1,6,5,4,3}

    Returns: 5.0666666666666655

  19. {5,3,4,2,1}

    Returns: 5.8317460317460315

  20. {4,1,8,3,6,5,2,7}

    Returns: 8.933333333333334

  21. {7,8,1,6,4,2,3,5}

    Returns: 11.61303167731739

  22. {6,1,4,2,3,5}

    Returns: 5.866666666666666

  23. {5,1,6,2,4,3}

    Returns: 6.488888888888889

  24. {3,6,2,5,1,4}

    Returns: 6.7333333333333325

  25. {3,4,2,5,6,7,1}

    Returns: 6.866666666666666

  26. {4,1,7,2,6,8,3,5}

    Returns: 9.155555555555555

  27. {3,6,2,1,7,8,5,4}

    Returns: 9.298412698412697

  28. {4,3,1,5,6,2,7}

    Returns: 5.866666666666666

  29. {7,5,3,4,1,2,8,6}

    Returns: 9.904761904761905

  30. {3,1,4,5,2}

    Returns: 4.0

  31. {5,2,1,4,3}

    Returns: 4.666666666666666

  32. {4,2,1,3,6,5}

    Returns: 4.333333333333333

  33. {4,2,1,3,5}

    Returns: 3.333333333333333

  34. {3,8,5,7,1,4,6,2}

    Returns: 11.212698412698412

  35. {5,6,4,1,2,3}

    Returns: 7.712987012987013

  36. {2,1,4,5,3}

    Returns: 3.0

  37. {4,1,2,6,3,5}

    Returns: 5.0

  38. {6,2,4,5,7,1,3}

    Returns: 8.63015873015873

  39. {5,4,3,2,1}

    Returns: 6.03015873015873

  40. {3,1,5,2,4}

    Returns: 4.0

  41. {3,7,2,6,5,1,4}

    Returns: 8.753968253968253

  42. {8,5,4,1,7,3,2,6}

    Returns: 11.308225108225109

  43. {4,2,1,3,5}

    Returns: 3.333333333333333

  44. {3,5,2,1,4}

    Returns: 4.866666666666665

  45. {2,1,7,4,5,6,3}

    Returns: 5.999999999999998

  46. {6,7,5,4,2,3,1}

    Returns: 10.44287775716347

  47. {6,7,4,2,1,5,3}

    Returns: 9.657431457431459

  48. {2,4,3,1,5}

    Returns: 3.333333333333333

  49. {4,2,3,1,5}

    Returns: 3.6666666666666665

  50. {4,5,2,1,6,3,7}

    Returns: 6.488888888888889

  51. {7,4,8,3,1,5,6,2}

    Returns: 11.465367965367967

  52. {6,1,7,3,2,5,4}

    Returns: 8.296825396825398

  53. {3,5,1,4,2,6}

    Returns: 5.0

  54. {2,7,5,3,1,6,4}

    Returns: 7.965079365079364

  55. {4,1,5,2,3,6}

    Returns: 4.666666666666666

  56. {5,3,4,2,1}

    Returns: 5.8317460317460315

  57. {4,2,5,6,3,1}

    Returns: 6.765079365079365

  58. {1,6,5,4,3,2}

    Returns: 6.03015873015873

  59. {3,1,4,2,5}

    Returns: 3.0

  60. {6,2,3,5,1,8,7,4}

    Returns: 8.866666666666664

  61. {4,3,6,1,7,2,5}

    Returns: 8.155555555555555

  62. {2,7,8,3,5,1,4,6}

    Returns: 10.153968253968257

  63. {8,6,4,2,7,3,5,1}

    Returns: 12.041991341991341

  64. {3,7,1,2,6,4,5}

    Returns: 7.533333333333333

  65. {6,7,5,1,3,4,2}

    Returns: 9.987538651824366

  66. {2,3,4,1,5}

    Returns: 3.0

  67. {7,3,5,6,1,2,4}

    Returns: 9.493650793650792

  68. {4,1,2,5,3}

    Returns: 4.0

  69. {2,7,3,5,4,1,6}

    Returns: 7.4

  70. {4,2,5,1,3}

    Returns: 5.0

  71. {5,7,4,2,6,1,3}

    Returns: 9.663780663780663

  72. {5,2,4,1,3}

    Returns: 5.199999999999998

  73. {3,6,1,2,4,5}

    Returns: 5.666666666666665

  74. {1,3,4,2,6,5}

    Returns: 3.0

  75. {3,2,4,5,1}

    Returns: 4.333333333333333

  76. {8,6,5,1,3,4,2,7}

    Returns: 11.078447742733456

  77. {1,3,5,2,4}

    Returns: 3.0

  78. {5,4,2,3,1,7,8,6}

    Returns: 7.831746031746032

  79. {6,7,4,8,2,1,5,3}

    Returns: 12.087157287157288

  80. {5,6,8,4,3,7,2,1}

    Returns: 12.095798910084625

  81. {2,3,5,1,4}

    Returns: 4.0

  82. {5,7,3,4,6,1,8,2}

    Returns: 10.595238095238095

  83. {2,5,4,1,6,3}

    Returns: 5.866666666666666

  84. {2,3,8,5,6,4,1,7}

    Returns: 8.831746031746032

  85. {3,2,6,5,4,1}

    Returns: 6.3999999999999995

  86. {1,3,8,4,7,6,2,5}

    Returns: 8.220634920634918

  87. {5,4,2,3,1}

    Returns: 5.8317460317460315

  88. {5,4,7,3,6,1,2}

    Returns: 9.657431457431455

  89. {1,2,5,3,4}

    Returns: 2.0

  90. {2,7,1,5,8,6,3,4}

    Returns: 9.552380952380954

  91. {6,3,5,4,2,1,7}

    Returns: 7.806349206349205

  92. {2,7,3,1,6,8,5,4}

    Returns: 8.965079365079365

  93. {1,3,6,5,2,4}

    Returns: 4.866666666666665

  94. {3,7,2,4,5,1,6}

    Returns: 7.533333333333333

  95. {3,1,2,6,5,4}

    Returns: 4.333333333333333

  96. {1,5,7,4,3,2,6}

    Returns: 6.887301587301588

  97. {1,4,2,6,8,7,3,5}

    Returns: 7.48888888888889

  98. {3,2,7,6,1,4,5}

    Returns: 7.765079365079366

  99. {5,2,1,4,3}

    Returns: 4.666666666666666

  100. {3,1,2,5,4}

    Returns: 3.0

  101. {1,2,4,5,3}

    Returns: 2.0

  102. {2,6,3,7,8,4,1,5}

    Returns: 9.876190476190477

  103. {4,6,3,2,1,5}

    Returns: 6.887301587301588

  104. {7,4,1,2,6,3,5}

    Returns: 8.298412698412697

  105. {4,2,5,1,3}

    Returns: 5.0

  106. {5,3,2,7,1,4,6}

    Returns: 7.733333333333332

  107. {4,8,5,3,2,1,6,7}

    Returns: 9.966955266955267

  108. {4,1,2,3,5,6}

    Returns: 3.0

  109. {7,6,2,4,8,1,3,5}

    Returns: 11.341702741702743

  110. {3,4,1,2,5}

    Returns: 3.666666666666666

  111. {4,5,7,1,6,2,3}

    Returns: 9.207936507936507

  112. {8,7,6,5,4,3,2,1}

    Returns: 13.221053196152711

    Maximal number of inversions.

  113. {8,7,6,5,1,4,3,2}

    Returns: 12.895467847303319

    Almost maximal number of inversions.

  114. {4, 1, 2, 3}

    Returns: 3.0

    3 inversions; 1, 1, or 1 inversion removed.

  115. {1, 4, 3, 2}

    Returns: 2.333333333333333

    3 inversions; 3, 1, or 1 inversion removed.

  116. {2, 1, 4, 3, 6, 5, 8, 7}

    Returns: 4.0

    Maximal number of pairwise independent inversions.

  117. {4, 3, 2, 1, 8, 7, 6, 5}

    Returns: 8.133333333333333

    Two independent 10-inversion groups.

  118. {5, 4, 3, 2, 1, 8, 7, 6}

    Returns: 8.363492063492064

  119. {2, 1, 8, 7, 6, 5, 4, 3}

    Returns: 9.24819624819625

  120. {1, 7, 6, 5, 4, 3, 2, 8}

    Returns: 8.248196248196248

  121. {7, 6, 5, 4, 3, 2, 1, 8}

    Returns: 10.641022469593898

  122. {1, 2, 3, 4, 5, 6, 7, 8}

    Returns: 0.0

    Longest test with no inversions.

  123. {8, 7, 6, 5, 4, 3, 2, 1 }

    Returns: 13.221053196152711

  124. {2, 5, 1, 6, 3, 4 }

    Returns: 5.666666666666666

  125. {4, 3, 2, 1 }

    Returns: 4.066666666666666

  126. {2, 8, 6, 5, 1, 7, 3, 4 }

    Returns: 10.632034632034634

  127. {8, 7, 6, 5, 4, 3, 1, 2 }

    Returns: 13.144130119229633

  128. {5, 2, 4, 7, 3, 6, 1 }

    Returns: 8.298412698412697

  129. {2, 5, 1, 6, 3, 8, 4, 7 }

    Returns: 7.666666666666666

  130. {8, 6, 7, 5, 4, 3, 2, 1 }

    Returns: 13.133236873042268

  131. {4, 2, 8, 6, 3, 5, 1, 7 }

    Returns: 9.730158730158731

  132. {7, 6, 5, 4, 3, 2, 1 }

    Returns: 10.641022469593898

  133. {7, 8, 1, 4, 5, 6, 3, 2 }

    Returns: 11.519288119288117

  134. {1, 8, 2, 5, 7, 3, 4, 6 }

    Returns: 8.253968253968253

  135. {2, 7, 1, 8, 4, 6, 3, 5 }

    Returns: 9.552380952380954

  136. {8, 4, 6, 1, 2, 3, 7, 5 }

    Returns: 10.595238095238095

  137. {2, 4, 3, 6, 8, 1, 7, 5 }

    Returns: 8.333333333333332


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: