GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.3 (7)<< < Пред. | След. > >>   Поиск:  
 Автор Тема: На: Задачка на сообразительность
kondrat
Сообщений: 4026
На: Задачка на сообразительность
Добавлено: 17 янв 19 1:46
Без умения писать строки, - точно не появится.
[Ответ][Цитата]
rrr3
Сообщений: 11857
На: Задачка на сообразительность
Добавлено: 17 янв 19 2:03
Цитата:
Автор: kondrat
Без умения писать строки, - точно не появится.

Совершенно точно, как и без умения говорить, пить, смотреть, читать, просыпаться утром, засыпать вечером и т.д. и т.п. Вы на редкость проницательны!
[Ответ][Цитата]
kondrat
Сообщений: 4026
На: Задачка на сообразительность
Добавлено: 17 янв 19 2:30
Вот он какой, консенсус!
[Ответ][Цитата]
гость
77.247.181.*
На: Задачка на сообразительность
Добавлено: 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мс


Не зря советовали мне этот форум, как хотя и бесноватый, но с присутствием реальных профи.
[Ответ][Цитата]
kondrat
Сообщений: 4026
На: Задачка на сообразительность
Добавлено: 17 янв 19 6:10
А чё за компы у вас?
[Ответ][Цитата]
mss
Сообщений: 2659
На: Задачка на сообразительность
Добавлено: 17 янв 19 7:07
Изменено: 17 янв 19 7:10
Дело не в кодинге.

Во первых моська бросила вызов.

Во вторых - голову нельзя заставить не работать. Верно и обратное.

77.247 - вам понадобилось 2млн итераций.

А слабо за 1млн?!

Или фантазии не хватает...

PS И перестаньте комментировать каждую строчку кода. Уж лет так 10 это плохой стиль. Комментарий - признак тухлятины (code smell)
[Ответ][Цитата]
гость
77.247.181.*
На: Задачка на сообразительность
Добавлено: 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;
}
[Ответ][Цитата]
гость
77.247.181.*
На: Задачка на сообразительность
Добавлено: 17 янв 19 8:16
Цитата:
Автор: kondrat

А чё за компы у вас?
i7 3770, 16 оперативы
[Ответ][Цитата]
mss
Сообщений: 2659
На: Задачка на сообразительность
Добавлено: 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++);
}
[Ответ][Цитата]
Михайло
Сообщений: 2366
На: Задачка на сообразительность
Добавлено: 17 янв 19 8:43
Хе-хе. Если вам нужно ускорить какой-то код, смотрите в сторону malloc/free, которые хоть и кодонебезопасны, но более низкоуровневые и гибкие.
[Ответ][Цитата]
гость
185.220.101.*
На: Задачка на сообразительность
Добавлено: 17 янв 19 8:55
Цитата:
Автор: Михайло

Хе-хе. Если вам нужно ускорить какой-то код, смотрите в сторону malloc/free, которые хоть и кодонебезопасны, но более низкоуровневые и гибкие.
в цпп new/delete тоже самое, только короче, 1 в 1, нет ни % издержек, учите матчасть салага
[Ответ][Цитата]
Михайло
Сообщений: 2366
На: Задачка на сообразительность
Добавлено: 17 янв 19 9:02
new помимо выделения памяти производит инициализацию её, а это скорее всего избыточная операция, лошара. Хо-хо!
[Ответ][Цитата]
гость
77.247.181.*
На: Задачка на сообразительность
Добавлено: 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]? напишите полный код плиз, у меня не вышло чтото разумное с ним пока получить
[Ответ][Цитата]
Ko.B
Сообщений: 1549
На: Задачка на сообразительность
Добавлено: 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
// Быстрая сортировка - вики
[Ответ][Цитата]
mss
Сообщений: 2659
На: Задачка на сообразительность
Добавлено: 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;
}
[Ответ][Цитата]
 Стр.3 (7)1  2  [3]  4  5  6  7<< < Пред. | След. > >>