Как написать алгоритм выборки в javascript?
Здравствуйте. Подскажите пожалуйста, целый день пытаюсь написать алгоритм, но пока ничего не выходит.
![]() Есть основные числа в белых ячейках, которые я получаю от пользователя и знаю их заранее. Напирмер: у нас есть число 500 оно соответсвует числу 100 и 5, или у нас есть число 75 — соответсвует числу 25 и 3 или возьмем число 450, которого в таблице нет. Тогда мы берем число, которое меньше числа 450 но ближе всех остальных находится к нему. В данном случае это 400, оно соответсвует числам 100 и 4 в нашей таблице. Вопрос: как мне правильно составить алгоритм в javascript, который будет находить соответствия для нужных чисел? Подскажите пожалуйста или дайте ссылку на подобные решения или статьи. Спасибо за потраченное время. |
А какой тут может быть алгоритм?
Проходим в цикле по элементам массива и пытаемся найти максимальное число, меньшее или равное искомому. Помоему по-другому никак. По крайней мере через цикл - проще всего. |
Цитата:
|
Isaac,
а с 5 как быть ? 6 будет 5,1 или 1,5? |
Object.defineProperty(Object.prototype, 'toString', { value: function () { var result = []; for (var property in this) { result.push( property + ' : ' + this[property] ); } return result.join(','); }, enumerable: false }); function find (needle) { var x = [1,2,3,4,5]; var y = [1,5,10,25,50,100]; var last = {x: -1, y: -1, value: -1}, temp; for (var i=0; i<x.length; i++) { for (var j=0; j<y.length; j++) { temp = x[i] * y[j]; if (temp == needle) { return {x: x[i], y: y[j], value: needle}; } if (temp < needle && temp > last.value) { last = {x: x[i], y: y[j], value: temp}; } } } return last; } alert ( find(450) ); alert ( find(250) ); toString перекрыл только для отладки, не стоит так делать в рабочем проекте. |
Цитата:
|
Цитата:
|
Поменять местами массивы x и y и изменить знак сравнения temp > last.value на temp >= last.value
|
Цитата:
|
Поменять
var x = [1,2,3,4,5]; var y = [1,5,10,25,50,100]; на var y = [1,5,10,25,50,100]; var x = [1,2,3,4,5]; :D |
Цитата:
|
Цитата:
Конечно же нужно поменять местами не строки, а содержимое массивов. |
Цитата:
|
Если таблица большая, нужна скорость, а памяти не жалко, можно составить отсортированный массив массивов, напр.
[ [1,1,1], [2,1,2], [3,1,3], ........ ,[20,10,2], [25,5,5], [30,10,3], ... ] и искать в нем бинарным поиском. Чуть сложнее вариант, но зато без доп. массива - искать в каждой строке (или столбце) исходной таблицы бинарным поиском. |
Часовой пояс GMT +3, время: 00:03. |