Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычислить время и количество памяти 
:(
    Опции темы
Abbath1349
Дата 25.9.2011, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Подскажите как можно вычислить время и количество памяти которое использует алгоритм?
PM MAIL   Вверх
nworm
Дата 25.9.2011, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



2 варианта.

1-й. Ассимптотические оценки. Те которые с О-большое.
Посмотрите какую-нибудь статью или книгу, где такие оценки считаются для алгоритмов похожих на Ваш.

2-й Опытные оценки. Замеряем время  с помощью функций языка программирования. Ну и память, в принципе, можно померить. Только это режеделают.
См., например PAPI
PM MAIL WWW   Вверх
Abbath1349
Дата 25.9.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Цитата(nworm @ 25.9.2011,  13:29)


2-й Опытные оценки. Замеряем время  с помощью функций языка программирования. Ну и память, в принципе, можно померить. Только это режеделают.

Проблема в том,что они не всегда показывают один и тот же результат.
PM MAIL   Вверх
nworm
Дата 25.9.2011, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



Цитата(Abbath1349 @ 25.9.2011,  18:51)
Цитата(nworm @ 25.9.2011,  13:29)


2-й Опытные оценки. Замеряем время  с помощью функций языка программирования. Ну и память, в принципе, можно померить. Только это режеделают.

Проблема в том,что они не всегда показывают один и тот же результат.

Надо разбираться с этой проблемой. Вариантов много. Например, считать много раз и найти средние значения.
PM MAIL WWW   Вверх
ivan219
Дата 25.9.2011, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: нет
Всего: 12



Я обычно делаю так.
Загоняю алгоритм в поток по окончанию поток ликвидируется и можно посмотреть время его работы.
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, FFT, RealFFT, Math;

type
  TFFT = class(TThread)
  protected
   procedure Execute; override;
  public
   procedure FOnTerminate(Sender: TObject);
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    LabeledEdit1: TLabeledEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure Generator;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  N: Cardinal;
  aFFT: TFFT;
  Signal: TReal1DArray;
  Fi, Mag: Array[0..7] of Double;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Caption := 'Стоп';
 if aFFT <> Nil then
  begin
   aFFT.Free;
   aFFT := Nil;
  end;

 aFFT := TFFT.Create(True);
 //aFFT.Priority := tpTimeCritical; // Максимальный приоритет потока
 aFFT.OnTerminate := aFFT.FOnTerminate;
 N := StrToInt(LabeledEdit1.Text);
 Signal := Nil;
 SetLength(Signal, N);
 Generator;
 aFFT.Resume;
end;

procedure TForm1.Generator;
var
 I, I1: Integer;
begin
 for I := 0 to N -  1 do Signal[I] := 0;
 for I := 0 to N - 1 do
  for I1 := 1 to 8 do
   Signal[I] := Signal[I] + I1 * Sin(2 * Pi * I * I1 / N + I1 * Pi / 180);
end;

{ TFFT }

procedure TFFT.Execute;
var
  II, I, I1, nn: Integer;
  a, wRe, wIm, Re, Im, F, V0, V1, V2, k: Double;
begin
 for II := 0 to 7 do
  begin
   nn := N;
   k := II + 1;
   F := 2 * Pi * k / nn;
   wRe := Cos(F);
   wIm := -Sin(F);
   a := 2 * wRe;

   V0 := Signal[0];
   V1 := Signal[1] + a * V0;
   V2 := Signal[2] + a * V1 - V0;

   I1 := 0;
   for I := 0 to nn div 3 - 2 do
    begin
     Inc(I1, 3);
     V0 := Signal[I1]     + a * V2 - V1;
     V1 := Signal[I1 + 1] + a * V0 - V2;
     V2 := Signal[I1 + 2] + a * V1 - V0;
    end;

   Re := V2 * wRe - V1;
   Im := V2 * wIm;

   MAG[II] := 2 * Sqrt(Re * Re + Im * Im) / nn;
   Fi[II] := 90 - ArcTan2(Im, Re) * (180 / Pi);
   if Fi[II] > 180 then Fi[II] := Fi[II] - 360;
  end;
end;

procedure TFFT.FOnTerminate(Sender: TObject);
var
  lpCreationTime, loExitTime, lpKernelTime, lpUserTime: TFileTime;
  I: Integer;
begin
  GetThreadTimes(aFFT.Handle,lpCreationTime, loExitTime, lpKernelTime, lpUserTime);
  Form1.Label1.Caption := 'Время: ' + FloatToStr(Int64(lpUserTime) / 10000) + ' мс';
  Form1.Memo1.Clear;
  for I := 0 to 7 do
   begin
    Form1.Memo1.Lines.Add('MAG = ' + FloatToStr(Round(MAG[I] * 100) / 100));
    Form1.Memo1.Lines.Add('Fi = ' + FloatToStr(Round(Fi[I] * 100) / 100));
    Form1.Memo1.Lines.Add('');
   end;
  Form1.Button1.Caption := 'Старт';
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 if aFFT <> Nil then aFFT.Free;
 Signal := Nil;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 //if not SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS) then  // максимальный приоритет
  //ShowMessage('Ошибка.');
end;

end.


Про память как то не задумывался.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.