1. Java / Говнокод #18053

    +141

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    public static void main(String[] args)
        {
            int[] array = {1,2,3};
            permure(array, array.length);
        }
    
        private static void permure(int[] arr, int size)
        {
            if(size < 2){
                System.out.println(Arrays.toString(arr));
            }else {
                for(int k = 0; k < size; k++){
                    swap(arr, size - 1, k);
                    permure(arr, size - 1);
                }
            }
    
        }
    
        private static void swap(int[] arr, int index0, int index1)
        {
            int tmp = arr[index0];
            arr[index0] = arr[index1];
            arr[index1] = tmp;
        }

    Изначально задумывалось чтобы код генерил все возможные варианты перестановок чисел в массиве,но делает ровно половину перестановок.

    Запостил: Danneborg, 23 Апреля 2015

    Комментарии (4) RSS

    • Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Нет, я нашел код одногрупника, который не работает и запостил его на говнокод.ру, посмеёмся вместе!
      Ответить
    • Генерация перестановок массивов зачастую сопряжена с экспоненциальной сложностью алгоритма, а значит и крайне большим временем его работы. Так, стандартными методами мы можем сгенерировать за разумное время лишь перестановки массивов длины порядка десяти. Генерация перестановок для массива из двадцати элементов уже недоступна пользователю среднестатистического ПК. Имеет смысл свести трудоёмкость к полиномиальной с помощью интегрального метода Стертора, описанного в его докторской диссертации:
      private static void permute(int[] arr, int size)
      {
          if(size < 2){
              System.out.println(Arrays.toString(arr));
          }else {
              swap(arr, size - 1, arr.length - size);
              permute(arr, size - 1);
          }
      }
      Ответить
      • while (!present(array)) Collections.shuffle(array);
        Ответить
        • +5% производительности:
          while (true) Collections.shuffle(array);

          если уж все перестановки генерим, то на мелочи типа проверок растачиватся не нужно.
          Ответить

    Добавить комментарий