Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка TreeSet / 25 сообщений из 26, страница 1 из 2
11.07.2015, 11:37
    #39004949
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
Если не затруднит, то помогите прояснить ситуацию с компараторами для сортировки коллекции.
У меня есть TreeSet в которм класс с двумя полями типа Integer для координат х и у.
Используя метод subSet( Point( x, y), Piont( x, y)) я пытаюсь отсортировать обеъкты входящие в облать видимости координат, но получаю и те что за ней.
Перепробовал разные варианты копаратора.
Возможно ли решить такие задачи использовав копоратор?
...
Рейтинг: 0 / 0
11.07.2015, 12:28
    #39004961
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVan, компаратор определяет, какой из двух объектов больше. По какому принципу вы будете выбирать больший объект - решать вам. Что у одного объекта должно быть больше, чем у другого?

В вашей задаче не понятно, что такое область видимости координат. Какую она имеет форму?

Я себе так могу представить ситуацию: есть какая-то область в двумерной системе координат. Например, для простоты, круглая. У нее есть центр. У этого центра есть координаты x и y. И еще у этой области есть радиус.

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

А определение границ для subSet - это уже следующая проблема.
...
Рейтинг: 0 / 0
11.07.2015, 13:41
    #39004998
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
yelena,

Спасибо что откликнулись!

Область видимости это те значения Х и У которые я передаю в методе subSet
это будет квадратная область.

Допустим мне необходимы объекты Piont у которых х > 1 < 10 , y > 1 <10
subSet( Point( 1, 1 ) , Point( 10, 10 ) )
Както так объсню
...
Рейтинг: 0 / 0
11.07.2015, 14:51
    #39005034
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVan, ну и что получается, что вы хотите каким-то образом один раз отсортировать точки на координатной плоскости, а потом проходиться по ним при помощи разных subSet, подразумевающих разные квадраты?
Эти точки отличаются только координатами x,y и расстоянием до начала координат.
У вас subSet в виде квадрата не получится.
...
Рейтинг: 0 / 0
11.07.2015, 15:01
    #39005043
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
yelena, у меня уже просто голова квадратная.

пробую, ничего не выбирается после subSet.
Возник вопрос дугой:
если будет два разных TreeSet , с разными компараторами которые сортируют по Х и по У
после первого subSet я делаю putAll в другой TreeSet который сортирует по У
Тот putAll это будет ссылка на Класс Point или это копироваться будет ?
...
Рейтинг: 0 / 0
11.07.2015, 15:23
    #39005061
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVan, если вопрос о том, будут ли создаваться копии объектов, то ответ - нет, копии объектов создаваться не будут.
...
Рейтинг: 0 / 0
11.07.2015, 15:27
    #39005065
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
yelena,

Спасибо Вам Елена большое!

Все прояснили.
...
Рейтинг: 0 / 0
11.07.2015, 21:53
    #39005173
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVan,

вам k-d дерево нужно
...
Рейтинг: 0 / 0
11.07.2015, 22:43
    #39005179
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
kealon(Ruslan),

Спасибо.

Озакомился, тут все сложнее чем мне надо, узлы как объекты хранящие ссылки, память будет расходована на все это, потом еще и массивы перебирать, затраты временные.

Очень сложное дерево, до такого пока не дорос наверное, где такое применяется наверное чтото типа микробиологии или наблюдение за космосом, милларды точек.
...
Рейтинг: 0 / 0
12.07.2015, 21:26
    #39005444
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVankealon(Ruslan),

Спасибо.

Озакомился, тут все сложнее чем мне надо, узлы как объекты хранящие ссылки, память будет расходована на все это, потом еще и массивы перебирать, затраты временные.

а TreeSet по вашему как сделан?
freeVanОчень сложное дерево, до такого пока не дорос наверное, где такое применяется наверное чтото типа микробиологии или наблюдение за космосом, милларды точек.
в вашем случае 2-d дерево, массив там не обязателен
...
Рейтинг: 0 / 0
13.07.2015, 08:22
    #39005548
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVanДопустим мне необходимы объекты Piont у которых х > 1 < 10 , y > 1 <10
subSet( Point( 1, 1 ) , Point( 10, 10 ) )
Както так объсню
Вы что-то совсем не в ту степь зарулили.
Координаты {x,y} это Частично упорядоченное множество . Для него, конечно, можно создать компаратор, но он будет неоднозначным. Так как компаратор имеет 3 значения - больше, меньше, равен. А в частичном порядке их 4 - больше, меньше, равен, и "отношение не определено"

Единственный способ упорядочить отношение это привести к единому числу f(x, y), например расстояние до определенной точки.

И у вас типичная ошибка в вопросе, вы не описываете задачу, вы описываете своё решение.
...
Рейтинг: 0 / 0
28.07.2015, 09:00
    #39017323
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVan,
во либа, как раз под вашу задачу, может кому и пригодится
FLANN - Fast Library for Approximate Nearest Neighbors
...
Рейтинг: 0 / 0
28.07.2015, 09:11
    #39017328
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVanЕсли не затруднит, то помогите прояснить ситуацию с компараторами для сортировки коллекции.
У меня есть TreeSet в которм класс с двумя полями типа Integer для координат х и у.
Используя метод subSet( Point( x, y), Piont( x, y)) я пытаюсь отсортировать обеъкты входящие в облать видимости координат, но получаю и те что за ней.
Перепробовал разные варианты копаратора.
Возможно ли решить такие задачи использовав копоратор?

Я так понял Вам надо свой компаратор придумать...???
Ну так положите в него какой нибудь принцип...например удалённость координаты от какой нибудь точки
Показатель=(x1-x2) квадрат + (y1-y2) квадрат
А если от начала координат то вообще просто.
Показатель=(x) квадрат + (y) квадрат.

И сравнивайте показатели для сортировки.
...
Рейтинг: 0 / 0
18.08.2015, 15:59
    #39031741
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
irbis_al,

Помоему гениально!!!
Спасибо за идею, как раз таки от начала координат.
...
Рейтинг: 0 / 0
18.08.2015, 16:48
    #39031784
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
irbis_al,

Пока не тестировал, но сразу понял где бдет проблема, а что если координата Х отрицательная или У?
...
Рейтинг: 0 / 0
18.08.2015, 16:59
    #39031801
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVanirbis_al,

Пока не тестировал, но сразу понял где бдет проблема, а что если координата Х отрицательная или У?
Ты напиши формулу расстояния по Пифагору. Там отрицательные возводятся в квадарат и уходят.

Вот почемучка...
...
Рейтинг: 0 / 0
18.08.2015, 17:03
    #39031807
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
mayton,
Квадрат отрицательного будет положительное.
...
Рейтинг: 0 / 0
18.08.2015, 17:10
    #39031814
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVan, будешь продолжать спорить или всё таки напишешь формулу?
...
Рейтинг: 0 / 0
18.08.2015, 17:16
    #39031825
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
mayton,
х1=-2;
y1=-3;
x2=2;
y2=3;

R1 = (-2)квадрат + (-3)квадрат ;
R2 = (2)квадарат + (3квадрат );

R1 = 4 + 9
R2 = 4 + 9
...
Рейтинг: 0 / 0
18.08.2015, 18:24
    #39031864
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
freeVan, всё правильно. В твоей системе метрик расстояние от (-2,-3) до (0,0) центра и от центра до (2,3) одинаково.

Ты получил что хотел. И сортировка в данном случае будет считать что эти Points одниаковы.
...
Рейтинг: 0 / 0
18.08.2015, 18:38
    #39031871
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
mayton,
Спасибо за активнсть.
Думаю что можно будет изменить ответ формулы на отрицательный если одна из координат отрицательня.
Пока занят другим, потом проверю на практике.
...
Рейтинг: 0 / 0
18.08.2015, 19:22
    #39031892
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
Вот тебе еще для коллекции.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
/**
 * Created by mayton on 8/18/2015.
 */
public class Point implements Comparable {

    int x;
    int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public int compareTo(Object o) {
        if (o==null) return -1;
        if (o instanceof Point){
            Point p = (Point)o;
            if (this.x < p.x) return -1;
            if (this.x > p.x) return 1;
                // x1 = x2
                if (this.y < p.y) return -1;
                if (this.x > p.y) return 1;
                // x1 = x2 AND y1 = y2
                return 0;
        }
        return -1;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        if (x != point.x) return false;
        return y == point.y;

    }

    @Override
    public int hashCode() {
        int result = x;
        result = 31 * result + y;
        return result;
    }
}



Если захочешь переписать под Double то помни что сравнение разных визуально (на экране) констант может внезапно
дать true в силу погрешности кастинга. И есть побочные эффекты при сравнении Double.NaN.
...
Рейтинг: 0 / 0
18.08.2015, 19:30
    #39031894
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
mayton,

Вообще шикарно, супер спасибо!

У меня там еще есть пост по поводу ByteBufferPool, посмотрите.
http://www.sql.ru/forum/1171339/bytebufferpool
...
Рейтинг: 0 / 0
18.08.2015, 22:00
    #39031928
freeVan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
Не подход ит.

Point 1 : х = 3 у = 4;
Point 2 : x = 4 y = 3;

получается одинаково удалены от начала координат.
На практике мне надо отсортировать только те точки которые попадают в область видимости.

Например:

Point 1 : х = 3 у = 4;
Point 2 : x = 6 y = 7;

В область видимости попадают те точки у которых 3 <= x <= 6 и 4 <= y <=7.
Нужен хитрый компаратор, либо использовать рекомендуемые библиотеки с кучей кода.
...
Рейтинг: 0 / 0
18.08.2015, 22:07
    #39031931
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка TreeSet
Мне кажется ты не понимаешь для чего нужен интерфейс Comparable.

И при чем здесь область видимости координат??
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка TreeSet / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]