Имя: Пароль:
IT
 
Помогите придумать функцию
0 DirecTwiX
 
17.05.13
23:52
Есть таблица с двумя колонками
А Б

А меняется от 0 до N (больше тысячи, но неизвестно на сколько больше)
Б от 0 до 1

Нужно отсортировать таблицу так, чтобы вверху оказались строки, у которых А и Б большие, а внизу, у которых хотя бы один из параметром мал.
Искать максимум по столбцу нельзя.
100 0.1
должна быть выше 100 0.99


Хотя бы какие-нибудь идеи.

Спасибо
1 DirecTwiX
 
17.05.13
23:53
100 0.1
должна быть выше 100 0.99

Также как и
100 0.1
выше 99 0.1
2 HeroShima
 
17.05.13
23:53
ты гонишь
3 DirecTwiX
 
17.05.13
23:55
(2) К логарифму очень тянет..
4 HeroShima
 
17.05.13
23:56
(3) ну, ну
5 orefkov
 
17.05.13
23:59
Для начала надо определиться с критериями большести и малости, потом тупо для каждой строки посчитать вес в соответствии с этими критериями и отсортировать.
6 DirecTwiX
 
17.05.13
23:59
(4) Просто умножение пока попробую, но верю, что есть что-то лучше
7 DirecTwiX
 
18.05.13
00:00
(5) В том то и дело, что для каждой таблицы эти критерии разные. Таблица - результат запроса
8 HeroShima
 
18.05.13
00:03
(7) это в самом деле что-то меняет?
9 DirecTwiX
 
18.05.13
00:05
(8) При условии "Искать максимум по столбцу нельзя." - да
10 orefkov
 
18.05.13
00:07
Почему 100 0.1 выше 100 0.99, 0.99 ведь больше 0.1 ?
И что должно быть выше 100 0.001 и 99 0.999 ?
11 DirecTwiX
 
18.05.13
00:08
(10) Описался. 0.099
12 exwill
 
18.05.13
00:08
Да уж! Мехмат уже не торт )))
13 DirecTwiX
 
18.05.13
00:08
99 0.999 > 100
14 DirecTwiX
 
18.05.13
00:09
(12) Курсач между прочем) Сегодня утром защита)
15 HeroShima
 
18.05.13
00:11
(9) при сортировке это лишнее в любом случае
16 orefkov
 
18.05.13
00:12
Проще тогда все-таки перемножать, но еще с отдельными коэффициентами для каждого столбца. Коэффициенты будут задавать "важность" столбца в общем вкладе и подбираются эксперементально на тестовых данных, пока не получиться устраивающий вариант. Грубо говоря, это и будут критерии "большести" и "малости".
17 orefkov
 
18.05.13
00:15
(13)
А как ты определил?
По какому правилу? Его и заложи в формулу.
Как ты например расставишь 99/0.2 и 100/0.15 ?
18 exwill
 
18.05.13
00:15
(13) Я так понимаю, что по условиям можно поставить как

100 0.001
99 0.999

так и:

99 0.999
100 0.001
19 exwill
 
18.05.13
00:16
(17) В этом то и цимес задачи.
Можно и так и так.
20 exwill
 
18.05.13
00:19
Хорошая задача. На основную проблему программирования.
21 DirecTwiX
 
18.05.13
00:20
(16) С коэффициентами для каждого столбца?) А потом их перемножить?)
(17) Вот не знаю как расставить. Поэтому сюда и за идеями пришёл)
(19) Нужно хоть как)
22 exwill
 
18.05.13
00:21
Собственно, "пузырьковый" метод должен прокатить.
23 DirecTwiX
 
18.05.13
00:21
(22) Сортировка пузырьком? Что сортировать то им?
24 exwill
 
18.05.13
00:22
(23) Поднимаешь вверх, если хотя бы одно значение больше.
25 exwill
 
18.05.13
00:24
Тут только проблему остановки надо решить.
26 DirecTwiX
 
18.05.13
00:24
(24) В терминах (0) ты предлагаешь max(A, B). Далеко не то, что нужно.
27 DirecTwiX
 
18.05.13
00:24
И до сих пор не могу понять при чём тут "пузырьковый" метод...
28 exwill
 
18.05.13
00:27
(26) какой мах(А,В)? Господи!

Если А1>А2 или В1>B2

обычный "пузырек": Если А1>А2
29 NS
 
18.05.13
00:31
(16) Перемножить с коэффициентами - это как?
30 DirecTwiX
 
18.05.13
00:31
(28) Да, прав. Я что-то тупанул.
Но про пузырёк всё равно никак не пойму) В любом методе сортировки сравнение есть.
За идею спасибо! Сейчас подумаю
31 exwill
 
18.05.13
00:32
Придумай, как остановится, и задача решена.
Мне лень.
32 NS
 
18.05.13
00:32
Сложить логарифмы с коэффициентами можно (равнозначно перемножить с возведением каждого в степень, в разную)
33 exwill
 
18.05.13
00:34
В обычном "пузырьке" остановка происходит, если не было перестановок.
Здесь же могут быть циклические перестановки.
34 DirecTwiX
 
18.05.13
00:34
(31) Сортировать именно по функции надо. Это делает СУБД. На половине пути останавливать запрос и сортировать тысячи строк пузырьком не очень хочется)
35 DirecTwiX
 
18.05.13
00:37
(33) Разве? В моём представлении "пузырёк" это

for (int i; i=1; i<n-1)
for (int j; j=i+1; j<n)
if (a[i]<a[j}) swap();

Вроде ничего не напутал..
36 HeroShima
 
18.05.13
00:38
- * - = +
37 exwill
 
18.05.13
00:38
(34) Я думал - это теоретическая задача.
С практической точки зрения у тебя что-то не то с постановкой. Или, говоря по-простому,  ...ней страдаешь.
38 exwill
 
18.05.13
00:40
(35)

for (int i; i=1; i<n-1)
for (int j; j=i+1; j<n)
if (a[i]<a[j] or b[i]<b[j]) swap();
39 HeroShima
 
18.05.13
00:41
всем спать...
40 DirecTwiX
 
18.05.13
00:48
(38) Я (35) написал к (30) и (33)

(37) Возможно и правда страдаю) Сейчас буду думать, что мне нужно..

(38) + Результат такого деяние может быть очень странным и хаотичным..
41 exwill
 
18.05.13
00:52
(40) Каков критерий, таков результат.
Сам сказал: ниже располагается строка, у которой хотя бы один из параметров меньше.
42 Klesk
 
18.05.13
01:25
(0)
SELECT
....
SORT BY ....

не?
43 DirecTwiX
 
18.05.13
02:19
(42) ORDER BY то есть?
И по чему сортировать предлагаешь?)
44 DirecTwiX
 
18.05.13
02:27
Пока прогуливался до аптеки, понял что приблизительно мне нужно. Нужно чтобы вес столбца возростал со значением.
Буду пробовать корень, логарифм (log(A)*B например)
45 Klesk
 
18.05.13
03:18
(43) может я не вкурил, а так нельзя?

 ТЗ=Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("А");
   ТЗ.Колонки.Добавить("Б");
   ГСЧ = Новый ГенераторСлучайныхЧисел();

   Для сч=1 по    100 Цикл
       
       НС=ТЗ.Добавить();
       НС.А=Окр(ГСЧ.СлучайноеЧисло(1,10000),0);
       НС.Б=ГСЧ.СлучайноеЧисло(1,100)/100;
   КонецЦикла;
   
   ТЗ.Сортировать("А Убыв,Б Убыв");
46 DirecTwiX
 
18.05.13
03:25
(45) Не то.
Спокойно может оказаться, что элементы с наибольшими Б будут внизу. А нужно чтобы были ближе к верху
47 Klesk
 
18.05.13
03:29
(46) так колонки независимы?
выгрузи в 2 таблицы, отсортируй
48 DirecTwiX
 
18.05.13
03:35
(47) Зависимы)
49 Klesk
 
18.05.13
03:38
(48) тогда надо пропорцию составить )
50 Klesk
 
18.05.13
03:45
(49) хотя без максимума нереально наверно
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс