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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - 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