|
В какой диапазон попало число | ☑ | ||
---|---|---|---|---|
0
Anttonnio
13.04.16
✎
18:50
|
Добрый день!
Чисто технический вопрос: У меня есть несколько диапазонов чисел Допустим от 1 до 28 От 29 до 104 От 105 до 280 И т.д(таких диапазонов 20) Можно ли как-то быстро понять в каком диапазоне число? Чем Если че<=28 и че>=1 тогда Одын(); Иначеесли че<=104 и че >=29 тогда Дыдва() И т.д. |
|||
1
Cyberhawk
13.04.16
✎
18:54
|
Беги из центральной границы диапазонов в какую-то сторону
|
|||
2
Cyberhawk
13.04.16
✎
18:55
|
И дели пополам каждый из оставшихся, далее снова от середины беги
|
|||
3
GROOVY
13.04.16
✎
18:56
|
Если диапазоны не вложенные, ИМХО, достаточно на иначеесли проверять границы в порядке убывания или возрастания. Ну собстно (1).
|
|||
4
Cyberhawk
13.04.16
✎
18:56
|
Допустим у тебя диапазоны 1-10 11-20 21-30 и т.д. до 91-100
Сравниваешь сначала х > 50, если да, то отсекаешь первую половину диапазона. В оставшейся половине 51-60 61-70 ... 91-100 сравниваешь опять с границей среднего диапазона (70 или 80) и отсекаешь опять |
|||
5
Cyberhawk
13.04.16
✎
18:57
|
Можно и последовательно, как в (3), но итераций будет больше, если нужный диапазон находится в "дальней" половине
|
|||
6
Anttonnio
13.04.16
✎
18:59
|
(1) Ага) ну ясно из разряда быстрой сортировки)
Еще думал вычислить изначально вероятность попадания в конкретный диапазон и по мере убывания вероятности - будет ли это быстрее предложенного? |
|||
7
Карупян
13.04.16
✎
19:01
|
можно методом деления пополам
|
|||
8
Карупян
13.04.16
✎
19:01
|
но для 20 нет смысла заморачиваться
|
|||
9
Cyberhawk
13.04.16
✎
19:06
|
(6) Как вычислять вероятность, по длине даипазона?
Насчет "быстрее" - нужно сравнивать на большом числе итераций поиска |
|||
10
Anttonnio
13.04.16
✎
19:09
|
(9) ну т.е. Я примерно знаю в какой диапазон попадает чаще, а в какой реже - в таком порядке и выстроить?
|
|||
11
Карупян
13.04.16
✎
19:10
|
Ну можно проверить предполагаемый диапазон, а потом методом деления пополам
|
|||
12
Anttonnio
13.04.16
✎
19:12
|
А если упростить задачу - отсортировать таблицу чисел и тогда мы точно будем знать в каком диапазоне было предыдущее число, следовательно текущее может быть ли в текущем либо в одном из следующих?
|
|||
13
Cyberhawk
13.04.16
✎
19:12
|
(12) Сортировка тоже стОит времени :)
|
|||
14
Anttonnio
13.04.16
✎
19:16
|
(13) сортировку можно и на уровне запроса сделать
Что-то вроде: ТекДиапазон для каждого жи = 1 по 100 000 Цикл Если Че[жи]>ТекДиапазон.Максимум тогда Переопределитьдиапазон(); КонецЕсли Конеццмкла |
|||
15
Два Волшебника
13.04.16
✎
19:21
|
(0) Если критична скорость - я бы сделал массив из диапазонов и смотрел, обращаясь по индексу.
Либо в массив запихнуть структуры с минимальным и максимальным значением диапазона: Массив[0] - от 0 до 5 Массив[1] - от 0 до 5 Массив[2] - от 0 до 5 Массив[3] - от 0 до 5 Массив[4] - от 0 до 5 Массив[5] - от 0 до 5 Массив[6] - от 6 до 10 Массив[7] - от 6 до 10 Массив[8] - от 6 до 10 либо использовать два массива: МассивМин[0] = 0, МассивМакс[0] = 5 МассивМин[1] = 0, МассивМакс[1] = 5 МассивМин[2] = 0, МассивМакс[2] = 5 МассивМин[3] = 0, МассивМакс[3] = 5 МассивМин[4] = 0, МассивМакс[4] = 5 МассивМин[5] = 0, МассивМакс[5] = 5 МассивМин[6] = 6, МассивМакс[6] = 10 МассивМин[7] = 6, МассивМакс[7] = 10 МассивМин[8] = 6, МассивМакс[8] = 10 Массивы, разумеется, генерировать автоматически. И вычислять ничего не надо! Profit! |
|||
16
mistеr
13.04.16
✎
20:01
|
(0) Если чисел много и они в базе, то диапазоны тоже в базу и джойнить.
|
|||
17
PR пять
13.04.16
✎
20:09
|
О чем вы вообще трындите, массивов всего 20 штук.
Ни. О. Чем. Если ИначеЕсли Иначе КонецЕсли Без вариантов. |
|||
18
Anttonnio
14.04.16
✎
08:25
|
Ясно!)
Спасиоб всем за комментарии |
|||
19
FIXXXL
14.04.16
✎
09:32
|
загони в ВТ и запросом получи, без всяких если
|
|||
20
Тролль главный
14.04.16
✎
09:38
|
+(19)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |