Java: получить подмножество массива, соответствующего критериям - PullRequest
1 голос
/ 02 марта 2012

У меня есть массив массивов.float[][] Test

Например

  {  {433801.000f,335601.000f,5},
     {433821.000f,335631.000f,5},
     {433811.000f,335671.000f,5}  };

Как получить подмножество этого массива (или массива массивов), где значения соответствуют критериям.пример, где Test[i][0] > 40000 и Test[i][1] + Test[i][2] < 350000

Я, очевидно, могу перебрать список.Но это будет очень медленно, когда массив огромной величины.

Как бы я сделал это в векторизованном виде.

Я также использую JavaME, если это вызывает какие-либо ограничения.Но решение JavaSE также было бы неплохо и, надеюсь, работало бы в JavaME.

Ответы [ 3 ]

5 голосов
/ 02 марта 2012

Нет способа сделать это без итерации, если вы не сохраните больше информации о данных.

Я бы предложил, чтобы помимо сохранения полных данных, для каждой новой записи вы проверяли ее с вашим условием и, если оно истинно, сохраняли ссылку на элемент в другом массиве (ну, Vector лучше для обоих этих если хранение не действительно плотно).

Затем, когда вы хотите, чтобы все элементы соответствовали условию, просто найдите все ссылки во втором «массиве». Примерно так оптимизируются некоторые запросы к базе данных. Стоимость поиска снижается за счет более высокой стоимости вставки и хранения.

2 голосов
/ 02 марта 2012

Я думаю, что итерация по всему массиву и проверка этих условий выполняется так же быстро, как и любой другой способ Плюс в том, что это очень просто реализовать. Насколько большой вы ожидаете, что массив будет? Если в худшем случае будет всего несколько тысяч строк, все будет в порядке :).

1 голос
/ 02 марта 2012

Единственный способ избежать линейного сканирования - хранить данные в отсортированном виде.Использование некоторой древовидной структуры - это, вероятно, путь для быстрого поиска.Это означает не хранить ваши данные в массивах массивов, которые могут нарушать ваши требования к памяти, но это компромисс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...