Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2 3 4

Можно ли оптимизировать?


dmk ©   (05.08.17 15:45[40]

А вариант который предложил Sha такой же тормозной, только тормозит при добавлении.
Не выходит пока каменный цветок. 100 тысяч элементов терпимо. 2 миллиона - можно на час погулять сходить.


dmk ©   (05.08.17 15:53[41]

Если кому интересно - могу исходники дать полные. Только без распространения.
Такая проблема обсуждалась между NVIdia и ATI. Решили оставить как есть - рисовать дубликаты. Где то на форумах читал.


Sha ©   (05.08.17 16:32[42]

> dmk ©   (05.08.17 15:45) [40]
> А вариант который предложил Sha такой же тормозной, только тормозит при добавлении.


Просто не умеешь готовить.

Может, стоит задуматься о смене профессии?


dmk ©   (05.08.17 18:51[43]

>Может, стоит задуматься о смене профессии?
Это вы не правильно задачу поняли. Я вам удушиться не предлагаю. Заметьте!
Давайте вежливо. Жизнь и так тяжелая штука :)


dmk ©   (05.08.17 18:59[44]

Я попробовал ваш метод. Проверка при добавлении. На 2-х млн точек очень долго ждать.
Точка добавляется так:

Массив[Индекс] := Индекс точки;
Нет ли такого индекса или индекса наоборот в массиве?
И так 2 факториал. Чего не так то?


Sha ©   (05.08.17 19:10[45]

Все не так. Ты не разобрался в решении.

Жизнь такая штука. Никто не обязан разбираться в твоем коде. А тебе постоянно придется разбираться в чужом.  

1. Скомпилируй и запусти мой код без изменений.
2. Убедись, что он отрабатывает за доли секунды
(ну, или сообщи о возникшей проблеме).
3. Адаптируй мой код под свои нужды.


Sha ©   (05.08.17 19:35[46]

И еще.

Когда будешь проводить замеры на моем примере, имей в виду,
что при малом размере квадрата и большом числе отрезков
вероятность сгенерировать уникальный отрезок
может оказаться равна 0 или близка к 0. А в реале она почти 1.

Поэтому, чтобы результат не уходил далеко от реальности необходимо
одновременно с увеличением числа отрезков увеличивать размер квадрата.


dmk ©   (05.08.17 21:37[47]

>Никто не обязан разбираться в твоем коде.
Я спросил, вы отозвались. Теперь вот сруливаете. Не вопрос.
Давайте вопрос этот закроем и разбежимся по кельям. Так же проще :)
Тем более я сделал переиндексацию индексов по порядку.
Делается почти мгновенно и ни одного повторного варианта по индексам.
Совпадения только по координатам точек. Теперь нужна  новая сортировка с 6-ю сравнениями.


Sha ©   (05.08.17 21:58[48]

>>Никто не обязан разбираться в твоем коде.

> dmk ©   (05.08.17 21:37) [47]
> Я спросил, вы отозвались. Теперь вот сруливаете. Не вопрос.

да нет, мне не слабо и весь код за тебя написать, но есть вопрос )


Sha ©   (05.08.17 22:14[49]

Я отозвался на задачу, т.к. было явно видно,
что для решения выбран неверный алгоритм.

Попытался направить, но вижу, что зря.

Мы обсуждаем всякую фигню, типа кто срулил
или типа какой костыль подойдет лучше,
вместо выбора правильного алгоритма.

Продолжай ковырять. Извини, что помешал.


dmk ©   (06.08.17 00:07[50]

Вы первый недовольство проявили. Продолжу. Ибо надо. Спасибо за участие.


Inovet ©   (06.08.17 04:33[51]

> [50] dmk ©   (06.08.17 00:07)
> Вы первый недовольство проявили

Это ты про тормозной алгоритм Sha сказал, на что он ответил, что ты не умеешь готовить и подсказал рецепт. Так что кто тут чем недоволен?


dmk ©   (06.08.17 11:36[52]

Inovet ©   (06.08.17 04:33) [51]
А ты рефери что ли?


dmk ©   (06.08.17 11:39[53]

Это мне предложили профессию сменить. Я тут ни на кого не наезжал.
Всегда вежлив и тактичен.


Inovet ©   (06.08.17 12:55[54]

> [52] dmk ©   (06.08.17 11:36)
> А ты рефери что ли?

Это взгляд со стороны.


dmk ©   (06.08.17 13:12[55]

Ошибочный взгляд. Мы не ругаемся :) Мы бурно обсуждаем.
И вообще я к Sha очень положительно отношусь. И вообще к форумному народу в целом.
Так что не нагнетайте.


Игорь Шевченко ©   (06.08.17 19:52[56]

А я его еще больше Ку!


ВладОшин ©   (06.08.17 20:47[57]


> dmk ©   (17.07.17 11:28) [13]
> >а как заполняется TJoin ?
> Они уже заполнены. Читаются из файла.


Как?

Стандартных функций delphi аля LoadIntoTJoinsFromFile3dMax? насколько знаю, нет


ВладОшин ©   (06.08.17 23:56[58]

что получается..
не Sha, конечно (ну, тот крут! скачал-потестил примеры.. Круто!), но вроде, не очень долго тоже, а главное понятно )

 TJ = packed record
   P0, P1: Integer;
   X: integer; //  для xor
   d: Boolean; // дубль или нет
 end;

var
A: array[1..1000000] of TJ;

procedure qSort(l, r: integer); //сортировка
var
 i,j: integer;
 q: integer;
 O: TJ;
begin
 i := l;
 j := r;
 q := A[(l+r) div 2].X;
 repeat
   while (A[i].X < q) do inc(i);
   while (q < A[j].X) do dec(j);
   if (i <= j) then
   begin
     O := A[i];   // exch  [i] [j]
     A[i] := A[j];
     A[j] := O;
     inc(i); dec(j);
   end;
 until (i > j);
 if (l < j) then qSort(l,j);
 if (i < r) then qSort(i,r);
end;

procedure TForm1.btn1Click(Sender: TObject);
var
 i, j, N, M : integer;
begin
 N := 1000000; //линий
 M := 100;        // значений
 Randomize;
 for i := 1 to N do //инит
 begin
   A[i].P0 := Random(M);
   A[i].P1 := Random(M);
   A[i].X := A[i].P0 xor A[i].P1;
   A[i].d := False;  //пока все не дубль
 end;

 lb1.Caption := IntToStr(GetTickCount);
 QSort(1,N);

 i := 1;
 repeat
   j := i + 1;
   while A[i].X = A[j].X do
   begin
     A[j].d := ((A[j].P0 = A[i].P0) and (A[j].P1 = A[i].P1)) or ((A[j].P1 = A[i].P0) and (A[j].P0 = A[i].P1));
     inc(j);
   end;
   i := j;
 until i >= N;

 lb2.Caption := IntToStr(GetTickCount);

~ 0.25 сек

в массиве (A[i].d = True) у дублей, т.е. котрых можно выкинуть/не рисовать


manaka ©   (07.08.17 08:59[59]


> dmk ©   (05.08.17 15:44) [39]
> Помечать надо потому, что проверка идет до конца цикла.
> Все элементы должны быть сравнены друг с другом.
>


Они все равно будут сравнены.
смотри как будет быстро для массива a1[m]:

n=1;
for i=1 to m-1 do begin
 k=0;
 for j= i+1 to m do begin
   if a[j]=a[i] do begin
     k=1;
     break;
   end;
 end;
 if k=0 do begin
   a2[n]=a1[i]; // добавляется только уникальный элемент
   inc(n);
 end;
end;

Первые n элементов a2 - новый массив соединений


Страницы: 1 2 3 4 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо