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

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

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

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

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

тогда в чем проблема?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.08.2007, 17:39:49
    #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
20.08.2007, 17:54:47
    #34739632
Anarion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация алгоритма перестановок???
А дебагом пройти - не?
...
Рейтинг: 0 / 0
20.08.2007, 18:21:29
    #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
20.08.2007, 18:26:20
    #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
20.08.2007, 18:27:08
    #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
20.08.2007, 18:41:02
    #34739826
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация алгоритма перестановок???
http://alglib.sources.ru/combinatorial/permutations.php
...
Рейтинг: 0 / 0
20.08.2007, 18:53:28
    #34739875
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация алгоритма перестановок???
Благодарствую! Завтра все посмотрю.
Еще один момент.
Не сочтите за труд, ответьте, плиз на вопрос в P.S. из первого поста. Проблема вот в чем. Java осваиваю по книжке и аналогичные задачки попадаются сплошь и рядом. Стоит ли заострять на них внимание? Потому как не совсем понятно насколько часто подобные "выверты" встречаются в реальной практике...
Заранее спасибо.
...
Рейтинг: 0 / 0
20.08.2007, 19:14:55
    #34739941
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация алгоритма перестановок???
A.D.И до кучи вопрос. Догадываюсь, что подобных задачек до фига, но как часто алгоритмы, реализованные в этих задачках, встречаются в реальной жизни?
ПМСМ, уменее решать такие задачки никогда не помешает. Но не стоит забывать, что учить язык и алгоритмы, это все-таки разные цели.
А что за книга такая?
...
Рейтинг: 0 / 0
21.08.2007, 09:58:22
    #34740606
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация алгоритма перестановок???
Leonidv A.D.И до кучи вопрос. Догадываюсь, что подобных задачек до фига, но как часто алгоритмы, реализованные в этих задачках, встречаются в реальной жизни?
ПМСМ, уменее решать такие задачки никогда не помешает. Но не стоит забывать, что учить язык и алгоритмы, это все-таки разные цели.
А что за книга такая?
Книга: А.Хортон "Java 2".

Кстати, а почему алгоритм и язык - это разные цели? У меня на работе так: Начальник говорит: "Вот отчет из старой системы, нужно, чтобы он примерно так же выглядел в новой" Старая система написана на чистейшем С (причем и некое подобие СУБД для старой системы тоже написано на С). А новая система пишется на связке Java-Oracle.
Т.е. мне нужно:
а) Разработать алгоритм
б) Реализовать его на Java.
Мне всегда казалось, что так везде...
...
Рейтинг: 0 / 0
21.08.2007, 10:18:38
    #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
21.08.2007, 11:30:40
    #34740991
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация алгоритма перестановок???
A.D.
Благодарствую! Работает...
А вот это: for (int a : pa) - как расшифровывается? Уж больно интересная конструкция...
http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html
...
Рейтинг: 0 / 0
21.08.2007, 16:26:23
    #34742280
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация алгоритма перестановок???
Спасибо. А русского перевода или аналога нет? Если нет, поколупаюсь так...
Кстати, нашел у себя 2 ошибки, которые и были причиной зацикливания:
1. Операцию % перепутал с целочисленным делением.
2. Переменная Yes изменялась в Next(), но не менялась вне его, по причине аналогичной методу swap().

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

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

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

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


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