С Новым годом! Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.07.2017
Сообщений: 11

Уменьшить размер выборки при сравнении по 10 колонкам

20.07.2017, 18:52. Показов 897. Ответов 7

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Задача есть 2 таблицы с 10 колонками в каждой. В каждой колонке содержатся ID, то есть числовые значения.
Нужно совместить (join) таблицы, используя "нестрогое" соотвествие - 2 записи совмещаются, если значения равны хотя бы в 6-ти колонках.

Количество записей в таблицах очень велико, обычный join не подходит, потому что очень трудозатратно.

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

Даже можно сначала отобрать избыточное количество записей, но меньшее по количеству от общего числа, а уже в меньшем количестве осуществлять точный join.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.07.2017, 18:52
Ответы с готовыми решениями:

Уменьшить размер фотографии при загрузке на сервер
Добрый день как сделать, если размер фотки больше заданного, уменьшить ее до заданного. Я так понял, что $_FILES только показывает размер...

Как сделать, чтобы при нажатии кнопок увеличить/уменьшить, размер текстового поля(textarea) ?
Помогите, пожалуйста! Как сделать, чтобы при нажатии кнопок увеличить/уменьшить, размер текстового поля(textarea) соответственного...

Уменьшить размер
Сделал простенькую игру на юнити и она занимает около 30мб(апк файл). Там всего 3 плагина и пару картинок. Помогите как-то это исправить

7
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
20.07.2017, 19:32
правильное решение - это не иметь 6 колонок и вытянуть их в строки
0
0 / 0 / 0
Регистрация: 19.07.2017
Сообщений: 11
20.07.2017, 20:32  [ТС]
Можно и в строки вытянуть. Но мне нужно отобрать по условию 6 признаков из 10 и не факт, что совпадающие признаки идут подряд.
Например совпадасть может 1,3,4,5,6,8 признак.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
20.07.2017, 21:36
значения произвольные или фиксированные?

Добавлено через 6 минут
str_id, par, val
1,1,3
1,2,5
1,3,1
1,4,9
2,1,3
2,2,4
2,3,1
2,4,9
вот таблица, представляющая ваши обе,
ее можно связать по полю par и получить количество совпавших
SQL
1
2
SELECT COUNT(*) FROM table1 t1 LEFT JOIN table1 t2 ON (t2.par=t1.par AND t2.str_id<>t1.str_id AND t2.value=t1.value)
WHERE t1.str_id=1
0
0 / 0 / 0
Регистрация: 19.07.2017
Сообщений: 11
21.07.2017, 13:02  [ТС]
Обычный джоин я уже делал. У меня примерно 10 млн. записей. Мне нужно сравнить эти записи друг с другом по условию, которое я описал выше. В колонках хранятся id из словарей по каждому признаку.
На проверку 1 записи уходит с моими ресурсами примерно 17 секунд. 17 х 10 млн. примерно 5.4 года.
Поэтому очень желательно сначала ограничить выборку.
Или (над чем я сейчас работаю) сформировать какой-то хеш-ключ, по которому можно было бы построить индекс для более быстрого поиска схожих записей.
Например: если я хочу сравнить по первым 6-ти признакам я формирую строку из 6-ти ID разделенную каким либо разделителем (пусть |). По этому полю создаю индекс, потом по нему подбираю соотвествующие записи. Тогда на поиск уходит меньше времени (если не учитывать параллельность при сравнении для 1 записи) на 1 запись уходит 12 секунд.
Можно сформировать сочетания по 6 признаков из 10 и сформировать из этих сочетаний строки, но таких сочетаний получается 210. Это много.
В качестве гипотезы - можно ли вычислить какой-нибудь коэффициент, который будет отражать набор 10 признаков? В последствии его можно будет использовать например при сравнении для 1 записи с коэф k - отобрать все записи с коэффициентами плюс/минус от k на определенную величину (величина будет отражать количество признаков для сравнения)
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
21.07.2017, 13:35
исходную задачу озвучьте
потому что правильный подход я описал выше.
12 сек на одну запись это очень печаль
на самом деле 10 млн или 100 это ужас но не ужас-ужас

что нужно сравнить?
каждую с каждой?
одну конкретную с 10 другими?
0
0 / 0 / 0
Регистрация: 19.07.2017
Сообщений: 11
21.07.2017, 13:54  [ТС]
Задача - нужно создать группы строк из всей выборки, у которых совпадают 6 (3-4-5 или сколько необходимо) признаков из 10. Тоесть сделать аггрегацию по совокупности признаков.
Если ближе к реальности:
Предположим существует набор личных данных населения.
В каких-то строках вместо полного имени введено только начальная буква, или поле оставлено пустым, а имя и фамилия введены в поле "Фамилия". Такая же ситуация наблюдается и с другими полями - например может быть введен или пропущен идентификационный код, разное написание адреса и т.д. Причины ошибок - много источников и человеческий фактор.
Но если вручную начать сравнивать записи, то по совокупности признаков можно определить, что эти записи принадлежат одному человеку.
Пока хеш-ключ остается самым оптимальным решением - полное количество подобных записей находится за 12-14 секунд.
Я не проверял, как быстро запишется результирующая выборка, но прямой джоин вообще не выдает общее количество за "терпимое" количество времени.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
21.07.2017, 13:58
т.е. все-таки полный перебор всех
ну, 12 сек на 10млн это вполне приемлемое время для такой задачи
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.07.2017, 13:58
Помогаю со студенческими работами здесь

Уменьшить размер изображения
Привет всем! Есть вопрос. Достаю изображение из базы данных в виде base64String. Функцией Base64ToImageAndSave преобразую в Image и...

Уменьшить размер фото
Вот коды &lt;li id=&quot;page_Portfolio&quot;&gt; &lt;div class=&quot;box1&quot;&gt; &lt;div class=&quot;inner&quot;&gt; &lt;a...

Уменьшить размер apk
Народ подскажите как уменьшить размер apk файла. Выбрал device filter - ARMv7. Уменьшился размер на 30%. Компилирую файл захожу в ...

Уменьшить размер страницы
Доброго времени суток. Нужно вставить в окно фрейм сайта, определенной ширины (в исходнике можно задать &lt;body...

Уменьшить размер флешки
Привет! Тема наверно избитая, купил флешку на 64 а она оказалась на 8. Как сделать, чтобы везде показываелся ее реальный размер? Чтобы она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru