|  | 
		
	
		|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 2:03
				 |  
				| 
					
						| | Автор: kondrat Без умения писать строки, - точно не появится.
 | 
 | 
 Совершенно точно, как и без умения говорить, пить, смотреть, читать, просыпаться утром, засыпать вечером и т.д. и т.п. Вы на редкость проницательны!    |  
				|  |  | 
		|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 5:06
				 |  
				| 
					
						| | Автор: гость 
 
 
 ну, если комп не самый древний, то следующий код выполнится где-то за 100-200 мс:
 
 //C++ Builder
 
 int a=1000000; //количество элементов в массиве
 int i=0; //счетчик цикла
 int s=0;   //переменная, содержащая случайный номер элемента массива
 int prom=0; //вспомогательная переменная
 
 //массив со значениями и инициализация его (от 1 до а)
 int * data = new int [a];  for (i=0; i<a; i++) {data[i]=i;}
 
 //проходим весь массив по порядку и для каждого элемента подбираем
 //случайную пару, далее меняем их местами
 for (i=0; i<a; i++)
 {
 s= random(a);
 //меняем местами порядковый элемент и случайно выбранный
 prom = data[s]; data[s]= data[i];  data[i]= prom;
 }
 | 
 | 
 О!!! Сразу видно руку мастера! Спасибо! То что доктор прописал! Всё как Вы сказали 100-200мс  Не зря советовали мне этот форум, как хотя и бесноватый, но с присутствием реальных профи.    |  
				|  |  | 
		|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 7:07
				 
					Изменено: 17 янв 19 7:10
				 |  
				| 
					
						Дело не в кодинге.
 Во первых моська бросила вызов.
 
 Во вторых - голову нельзя заставить не работать. Верно и обратное.
 
 77.247 - вам понадобилось 2млн итераций.
 
 А слабо за 1млн?!
 
 Или фантазии не хватает...
 
 PS И перестаньте комментировать каждую строчку кода. Уж лет так 10 это плохой стиль. Комментарий - признак тухлятины (code smell)
 |  
				|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 8:13
				 |  
				| 
					
						| | Автор: kondrat 
 
 Присоединяюсь и одобряю код mss.
 Вот, ваще летает, и каждый раз по-новому, с хорошим качеством:
 
 const long N = 999999;
 long *a, p, i;
 mt19937 mersenne(static_cast<unsigned int>(time(0)));
 
 a = new long[N+1];
 for (i=0; i<N+1; i++) a[i]=i;
 cout << "a[N] = " << a[N] << endl;
 for (i=0; i<N+1; i++) {
 p = mersenne()%(N+1);
 a[i] = a[p];
 a[p] = i;
 }
 cout << "a[N] = " << a[N] << endl;
 delete a;
 
 
 | 
 | 
 Да, всётаки Ваш код лучше, за счет утилизации временной переменной которая равна i он немного быстрее. Спасибо! Вы выйграли! В итоге буду юзать: vector<int> mix(int N)
 {
 mt19937 mersenne(time(0));
 
 int *a = new int[N];
 for (int i = 0; i < N; i++) a[i] = i;
 for (int i = 0; i < N; i++)
 {
 int p = mersenne() % (N);
 a[i] = a[p];
 a[p] = i;
 }
 
 vector<int> res(a, a + N);
 delete[] a;
 return res;
 }
 
 |  
				|  |  | 
		|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 8:38
				 |  
				| 
					
						| | Автор: гость 
 for (int i = 0; i < N; i++) a[i] = i+1;
 for (int i = 0; i < N; i++){***}
 
 | 
 | 
 Итого - 2млн итераций   Для тех кто на бронепоезде повторяю - за 1млн   int next = 0;
 for (int i=0; i < N; ){
 int p = mersenne() % (N);
 a[i] = a[p];
 a[p] = ++next;
 for(; i<N && n[i]!=0; i++);
 }
 
 |  
				|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 8:43
				 |  
				| 
					
						Хе-хе. Если вам нужно ускорить какой-то код, смотрите в сторону malloc/free, которые хоть и кодонебезопасны, но более низкоуровневые и гибкие.
					 |  
				|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 8:55
				 |  
				| 
					
						| | Автор: Михайло 
 Хе-хе. Если вам нужно ускорить какой-то код, смотрите в сторону malloc/free, которые хоть и кодонебезопасны, но более низкоуровневые и гибкие.
 | 
 | 
 в цпп new/delete тоже самое, только короче, 1 в 1, нет ни % издержек, учите матчасть салага    |  
				|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 9:02
				 |  
				| 
					
						new помимо выделения памяти производит инициализацию её, а это скорее всего избыточная операция, лошара. Хо-хо!
					 |  
				|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 9:10
				 |  
				| 
					
						| | Автор: mss 
 
 
 Итого - 2млн итераций
  
 Для тех кто на бронепоезде повторяю - за 1млн
  
 int next = 0;
 for (int i=0; i < N; ){
 int p = mersenne() % (N);
 a[i] = a[p];
 a[p] = ++next;
 for(; i<N && n[i]!=0; i++);
 }
 
 | 
 | 
  что за n[i]? напишите полный код плиз, у меня не вышло чтото разумное с ним пока получить
					 |  
				|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 9:34
				 
					Изменено: 17 янв 19 9:37
				 |  
				| 
					
						int data[1000000]; int buf[1000000]; // инициализация массива for int (i=0; i<1000000;i++)  { data[i]=i;    buf[i]=irand()%999000000; } // Дальше применяем алгоритм быстрой сортировки, в связке data и buf // Быстрая сортировка - вики |  
				|  |  | 
		|  | 
			
				| На: Задачка на сообразительность  
					Добавлено: 17 янв 19 9:39
				 
					Изменено: 17 янв 19 9:41
				 |  
				| 
					
						| | Автор: гость что за n[i]? напишите полный код плиз, у меня не вышло чтото разумное с ним пока получить
 | 
 | 
 пардонте... а так? vector<int> mix(int N)
 {
 mt19937 mersenne(time(0));
 
 int *a = new int[N]; // здесь должны быть нули я пологаю
 
 int next = 0;
 for (int i=0; i < N; ){
 int p = mersenne() % (N);
 a[i] = a[p];
 a[p] = ++next;
 for(; i<N && a[i]!=0; i++);
 }
 
 vector<int> res(a, a + N);
 delete[] a;
 return res;
 }
 
 |  
				|  |  | 
		|  |