powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация алгоритма перестановок???
20 сообщений из 20, страница 1 из 1
Реализация алгоритма перестановок???
    #34739274
A.D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый!
Наверняка, где-то здесь есть решение аналогичной задачи, но, увы, не нашел...
Итак. Есть массив из 3-х чисел, скажем {1,2,3}. Как отобразить все возможные варианты перестановок (каковых, естественно, n!)
с учетом того, что их (перестановки) нужно преобразовать в String

Заранее спасибо.
С уважением.

P.S. И до кучи вопрос. Догадываюсь, что подобных задачек до фига, но как часто алгоритмы, реализованные в этих задачках, встречаются в реальной жизни?
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739400
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739421
A.D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, конечно, но есть 2 проблемы:
1. С английским не так хорошо, как хотелось бы.
2. Сам алгоритм я видел и в словесной форме и на Паскале реализованный.

А надо на Java.
Заранее спасибо.
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739441
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A.D.Спасибо, конечно, но есть 2 проблемы:
2. Сам алгоритм я видел и в словесной форме и на Паскале реализованный.
А надо на Java.
Заранее спасибо.

А в чем трудность перевода алгоритма с паскаля на Java? Просто синтаксис немного поменяется и некоторые детали, например, особенности хранения структур данных на Java.
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739451
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"A.D." <nospam@sql.ru>;
Сам алгоритм я видел и в словесной форме и на Паскале реализованный.

тогда в чем проблема?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739563
A.D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм.
Вот на Паскале:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
program Perestanovki;
      type Pere=array [ byte ] of  byte ;
      var N,i,j: byte ;
	  X:Pere;
	  Yes: boolean ;
      procedure Next(var X:Pere;var Yes: boolean );
	var i: byte ;
	procedure Swap(var a,b: byte );  {обмен переменных}
	  var c: byte ;
	begin c:=a;a:=b;b:=c end;
      begin
	i:=N- 1 ;
	{поиск i}
	 while  (i> 0 )and(X[i]>X[i+ 1 ])  do  dec(i);
	 if  i> 0  then
	  begin
	    j:=i+ 1 ;
	    {поиск j}
	     while  (j<N)and(X[j+ 1 ]>X[i])  do  inc(j);
	    Swap(X[i],X[j]);
	     for  j:=i+ 1  to (N+i) div  2   do  Swap(X[j],X[N-j+i+ 1 ]);
	    Yes:=true
	  end
	 else  Yes:=false
      end;
    begin
      write('N=');readln(N);
       for  i:= 1  to N  do  X[i]:=i;
      repeat
	 for  i:= 1  to N  do  write(X[i]);writeln;
	Next(X,Yes)
      until not Yes
    end.

С учетом отсутствия указтелей и другой нумерацией массива переделал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
 class  Transposer 
{
	
	 static   int  i =  0 ;
	 static   int  j =  0 ;
	 static   int  [] arr_i = { 1 , 2 , 3 };
     static   int  N = arr_i.length- 1 ;
	 static   int  count_i_while =  0 ;
	 static   int  count_j_while =  0 ;
	 static   int  count_next =  0 ;
	 static   int  temp =  0 ;



     static   boolean  Yes = true;

	 static   void  Next( int  [] X,  boolean  Yes)
	{

        int  i;
	


      i  = N- 1 ;

	   while  (i>- 1  && X[i]>X[i+ 1 ])
		{ 
	      i--;
		}



	   if  (i>- 1 )
	  {
		  j = i+ 1 ;

            while  (j<N && X[j+ 1 ]>X[i])
           {
             count_j_while++;
			 j++;
           }

		   //swap(X[i],X[j]);

            temp = X[i];
             X[i] = X[j];
             X[j] = temp;



		        for  (j = i+ 1 ;j<=((N+i)% 2 );j++)
		       {
                 temp = X[j];
                 X[j] = X[N-j+i+ 1 ];
                 X[N-j+i+ 1 ] = temp;
		       }

            Yes = true;
	  
	  }
          else 
            Yes = false;


	}


	    static   void  swap( int  a, int  b)
		{
          int  c;
		 c = a;
		 a = b;
		 b = c;
		}


	
	 public   static   void  main(String[] args) 
	{
	
	 for (i= 0 ;i<=N;i++)
		{	
         arr_i[i]= i+ 1 ;
		System.out.print("arr_i[i]= " + arr_i[i]);

		System.out.println();
        }
          do 
         {
			  for  (i= 0 ;i<=N;i++ )
			 {
		      System.out.print(arr_i[i]);
			 }
		      System.out.println();
               Next(arr_i,Yes);
         }
          while  (Yes);

	}
}


В итоге после 4-й перестановки зацикливается....
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739632
Anarion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А дебагом пройти - не?
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739762
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 static   void  swap( int  a, int  b)
		{
          int  c;
		 c = a;
		 a = b;
		 b = c;
		}

на яве значения примитивов передается по значению, поэтому этот метод не будет работать
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739781
Фотография agrasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
test it :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
 public   static   void  main(String[] args) {
   int [] pa =  new   int [] { 1 ,  2 ,  3 };
  prmt(pa,  0 );
}

 private   static   void  prmt( int [] pa,  int  i) {
   if  (i == pa.length -  1 ) {
    arraout(pa);
  }  else  {
     for  ( int  j = i; j < pa.length; j++) {
      aswap(pa, i, j);
      prmt(pa, i +  1 );
      aswap(pa, i, j);
    }
  }
}

 private   static   void  aswap( int [] pa,  int  i,  int  j) {
   int  k = pa[i];
  pa[i] = pa[j];
  pa[j] = k;
}

 private   static   void  arraout( int [] pa) {
  String s = "[";

   for  ( int  a : pa) {
    s += a + ", ";
  }

  s = s.substring( 0 , s.length() -  2 );

  s += "]";

  System.out.println(s);
}
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739786
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если нужно поменять значения двух ячеек массива местами, то метод swap переписать так:

Код: plaintext
1.
2.
3.
4.
5.
 static   void  swap( int [] array,  int  index1,  int  index2) {
      int  tmp = array[index1];
     array[index1]= array[index2];
     array[index2] = tmp;
}

так как массивы и другие объекты в яве передаются в методы по ссылке.
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739826
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://alglib.sources.ru/combinatorial/permutations.php
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739875
A.D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарствую! Завтра все посмотрю.
Еще один момент.
Не сочтите за труд, ответьте, плиз на вопрос в P.S. из первого поста. Проблема вот в чем. Java осваиваю по книжке и аналогичные задачки попадаются сплошь и рядом. Стоит ли заострять на них внимание? Потому как не совсем понятно насколько часто подобные "выверты" встречаются в реальной практике...
Заранее спасибо.
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34739941
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A.D.И до кучи вопрос. Догадываюсь, что подобных задачек до фига, но как часто алгоритмы, реализованные в этих задачках, встречаются в реальной жизни?
ПМСМ, уменее решать такие задачки никогда не помешает. Но не стоит забывать, что учить язык и алгоритмы, это все-таки разные цели.
А что за книга такая?
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34740606
A.D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv A.D.И до кучи вопрос. Догадываюсь, что подобных задачек до фига, но как часто алгоритмы, реализованные в этих задачках, встречаются в реальной жизни?
ПМСМ, уменее решать такие задачки никогда не помешает. Но не стоит забывать, что учить язык и алгоритмы, это все-таки разные цели.
А что за книга такая?
Книга: А.Хортон "Java 2".

Кстати, а почему алгоритм и язык - это разные цели? У меня на работе так: Начальник говорит: "Вот отчет из старой системы, нужно, чтобы он примерно так же выглядел в новой" Старая система написана на чистейшем С (причем и некое подобие СУБД для старой системы тоже написано на С). А новая система пишется на связке Java-Oracle.
Т.е. мне нужно:
а) Разработать алгоритм
б) Реализовать его на Java.
Мне всегда казалось, что так везде...
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34740691
A.D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agrasofftest it :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
 public   static   void  main(String[] args) {
   int [] pa =  new   int [] { 1 ,  2 ,  3 };
  prmt(pa,  0 );
}

 private   static   void  prmt( int [] pa,  int  i) {
   if  (i == pa.length -  1 ) {
    arraout(pa);
  }  else  {
     for  ( int  j = i; j < pa.length; j++) {
      aswap(pa, i, j);
      prmt(pa, i +  1 );
      aswap(pa, i, j);
    }
  }
}

 private   static   void  aswap( int [] pa,  int  i,  int  j) {
   int  k = pa[i];
  pa[i] = pa[j];
  pa[j] = k;
}

 private   static   void  arraout( int [] pa) {
  String s = "[";

   for  ( int  a : pa) {
    s += a + ", ";
  }

  s = s.substring( 0 , s.length() -  2 );

  s += "]";

  System.out.println(s);
}


Благодарствую! Работает...
А вот это: for (int a : pa) - как расшифровывается? Уж больно интересная конструкция...
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34740991
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A.D.
Благодарствую! Работает...
А вот это: for (int a : pa) - как расшифровывается? Уж больно интересная конструкция...
http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34742280
A.D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. А русского перевода или аналога нет? Если нет, поколупаюсь так...
Кстати, нашел у себя 2 ошибки, которые и были причиной зацикливания:
1. Операцию % перепутал с целочисленным делением.
2. Переменная Yes изменялась в Next(), но не менялась вне его, по причине аналогичной методу swap().

Вобщем, теперь все в порядке. Огромное спасибо за помощь.
Кстати, буду благодарен и за дальнейшие ответы на вопрос заданный в P.S. Только конкретизирую немного его. Есть ли смысл в процессе самостоятельного обучения заморачиваться на подобных задачках?
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34742584
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да . шобы моск работать начинал. как по ломоносову
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34742606
Anarion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсть ли смысл в процессе самостоятельного обучения заморачиваться на подобных задачках?

Я бы еще очень активно покопал java.util.*, а особенно Collections и Apache Commons.
...
Рейтинг: 0 / 0
Реализация алгоритма перестановок???
    #34742907
A.D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anarion авторЕсть ли смысл в процессе самостоятельного обучения заморачиваться на подобных задачках?

Я бы еще очень активно покопал java.util.*, а особенно Collections и Apache Commons.

Дико извиняюсь, что подразумевается под "активно покопать"?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация алгоритма перестановок???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]