Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2014, 21:36   #21
BHMJ(G)
 
Регистрация: 23.06.2014
Сообщений: 6
По умолчанию

n**2 это квадрат (n^2). По моему алгоритму в сравнении с каждой данной точкой участвуют все точки, которые не были обработаны ранее, т.е. для первой точки это будет n-1 сравнений, для второй n-2 и т.д., что в итоге даёт (n^2)/2 операций. Вы можете предложить алгоритм со временем порядка n*log(n)? И да, я говорю об алгоритме поиска точек, составляющих спираль, а не о конечной сортировке точек перед отрисовкой.

Последний раз редактировалось BHMJ(G); 27.06.2014 в 21:42.
BHMJ(G) вне форума Ответить с цитированием
Старый 28.06.2014, 21:24   #22
Леон2110
Пользователь
 
Регистрация: 23.06.2014
Сообщений: 13
По умолчанию

Читая сообщения вспомнил про условие, в конце задачи написано: Обеспечить число действий порядка n*log n. Что это должно значить?

И кстати вот код сортировки полностью, может кому пригодится:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo2: TMemo;
    Button4: TButton;
    btn2: TButton;
    procedure Button4Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:integer;

 a: array[0..14] of TPoint;


 implementation

{$R *.dfm}

//процедура сортировки
procedure BubbleSort( var a: array of TPoint; min, max: Integer);
var
i, j: integer;
tmp: TPoint;
begin
//заполняем массив случайными числами от 0 до 195 с шагом 5
 randomize;
for i:=0 to 14 do
begin
a[i].x:=random(40)*5;
a[i].y:=random(40)*5;
end;
//сортировка массива
for i:=min to max do
for j:=min to max do
if (A[i].x < A[j].x) or ( (A[i].x = A[j].x) and (A[i].y < A[j].y) ) then begin
tmp:=A[i];
A[i]:=A[j];
A[j]:=tmp;
end;
end;


//кнопка запускающая процедуру сортировки и вывод в мемо2
procedure TForm1.Button4Click(Sender: TObject);
begin
BubbleSort(a,low(a),high(a));
for i:=low(a) to high(a) do
begin
  Memo2.Lines.Add (IntToStr(A[i].x)+ ','+ IntToStr(A[i].y));
end;
end;

//соединяем точки прямыми и рисуем красные кружки в местах точек
procedure TForm1.btn2Click(Sender: TObject);
begin
 With Form1.Canvas do
begin
  Polyline(a);
  Pen.Color := clRed;
  for i := low(a) to high(a) do
    Ellipse(a[i].x - 2, a[i].y - 2, a[i].x + 2, a[i].y + 2);
end;
end;

end.
Леон2110 вне форума Ответить с цитированием
Старый 28.06.2014, 21:30   #23
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Думаю, преподаватель хочет более эффективный алгоритм сортировки:

(Из Знай сложности алгоритмов)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.06.2014, 06:11   #24
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Вы можете предложить алгоритм со временем порядка n*log(n)?
Да, а че тут предлагать?
Сортировка - n*log(n)
Выпуклая оболочка - n*log(n) - из за того, что предварительно нужна сортировка, но если точки отсортированы точки оболочки собираются за n (в худшем случае, если все точки принадлежат оболочке).

Твоя задача - чуть модифицировать выпуклую оболочку. Оболочка - это один слой твоей спирали.

выходит n*log(n) + n = n*log(n)

Даже не догадываюсь куда ты тут n^2 засадил.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На плоскости задано множество точек. Определить все тройки точек, которые являются вершинами прямоугольного треугольника Олечка12 Помощь студентам 11 22.04.2014 19:56
Даны координаты точек n на плоскости. Найти номера двух точек, расстояние между которыми наибольшее. getredtm Помощь студентам 3 01.07.2013 01:47
Delphi. На плоскости заданы n точек своими координатами.Построить квадрат Allexey Помощь студентам 4 18.06.2013 13:46
Даны координаты n точек на плоскости. Найти номера двух точек, расстояние между которыми наибольшее. Viwwna Паскаль, Turbo Pascal, PascalABC.NET 2 19.11.2011 06:33
определить радиус и центр окружности, на кот. лежит наиб.число точек заданного на плоскости мн-ва точек) kcю Помощь студентам 0 17.11.2009 19:50