|
Създадено на 19.09.2020, видяно: 1864 пъти. #11143
Чакам вие да кажете първо, за да не ви вкарвам в коловоз. Моето решение определено не е оптимално.
bvbfan
Създадено на 20.09.2020, видяно: 1844 пъти. #11150
SQLite, blob за полетата, Levenstein в кода и дерзаеш.
johnfound
Създадено на 20.09.2020, видяно: 1840 пъти. #11151
Грешките може да са до над 100, но да предположим че ни интересува match с до 64 грешки.
Това какво значи? Че може да се дават като решение стрингове чието растояние на Левенщайн всъщност не е най-малкото в множество А?
Или че просто растоянието на Левенщайн трябва да се смята приблизително и някой път може да е грешно сметнато, но все пак е най-малкото сред грешно сметнатите?
Между другото, идеята на bvbfan съвсем не е лоша. Просто трябва да се имплементира потребителска функция за растоянието на Левенщайн в sqlite и директно да се напише заявка на SQL. Резултата може да се окаже съвсем изненадващо добър.
|
Последно редактирано на 20.09.2020 от |, видяно: 1813 пъти. #11189
Грешките може да са до над 100, но да предположим че ни интересува match с до 64 грешки.
Това какво значи? Че може да се дават като решение стрингове чието растояние на Левенщайн всъщност не е най-малкото в множество А?
Или че просто растоянието на Левенщайн трябва да се смята приблизително и някой път може да е грешно сметнато, но все пак е най-малкото сред грешно сметнатите?
Levenshtеin distance се смята между стрингове, които не съвпадат точно. Може да има до 100 такива разлики между стринговете. В общи линии, стринговете в колекция Б са грешни копия на стринговете е колекция А. Отделно му трябва и къде са грешките като позиция, както и какъв тип грешка е (insertion, deletion, substitution), но това са подробности и може да се сметне по-късно.
Между другото, идеята на bvbfan съвсем не е лоша. Просто трябва да се имплементира потребителска функция за растоянието на Левенщайн в sqlite и директно да се напише заявка на SQL. Резултата може да се окаже съвсем изненадващо добър.
Наистина ли мислиш, че потребителска функция в sqlite ще е по-добра от в момента работещия мноконишков, сравнително оптимизиран код? :) Защото той отнема около седмица на машина с 48*2 ядра, при това когато стринговете от колекция А е 100К. :) А компютрите имат много памет, може да предположиш че е безкрайно много (1.5 TB).
Levenshtеin distance се смята между стрингове, които не съвпадат точно. Може да има до 100 такива разлики между стринговете. В общи линии, стринговете в колекция Б са грешни копия на стринговете е колекция А. Отделно му трябва и къде са грешките като позиция, както и какъв тип грешка е (insertion, deletion, substitution), но това са подробности и може да се сметне по-късно.
Тоест, си искал да кажеш че търсиш минималното разстояние, но не по-голямо от 100 (64). Понятието "грешка" в този контекст е заблуждаващо, още повече, че в предишното изречение използваш правилната дума "разстояние" в същият смисъл.
Наистина ли мислиш, че потребителска функция в sqlite ще е по-добра от в момента работещия мноконишков, сравнително оптимизиран код? :) Защото той отнема около седмица на машина с 48*2 ядра, при това когато стринговете от колекция А е 100К. :) А компютрите имат много памет, може да предположиш че е безкрайно много (1.5 TB).
Каква връзка имат нишките тука? SQLite също може да работи паралелно в много нишки, заявките могат ефективно да се разпаралелят, а SQLite има сериозно оптимизиран код, който със сигурност ще е по-бърз от това, което сте писали набързо.
Евентуално може да има проблеми само ако искате да изпълнявате на клъстър по мрежата, но и тогава може да се измисли нещо.
|
Създадено на 20.09.2020, видяно: 1788 пъти. #11200
Каква връзка имат нишките тука? SQLite също може да работи паралелно в много нишки, заявките могат ефективно да се разпаралелят, а SQLite има сериозно оптимизиран код, който със сигурност ще е по-бърз от това, което сте писали набързо.
И какво точно ще направи този "сериозно оптимизиран код" в sqlite? :) Можеш ли да го опишеш?
johnfound
Последно редактирано на 21.09.2020 от code2, видяно: 1785 пъти. #11202
Между другото, специално в био-информатиката се смята за по-подходящо да се използва разстоянието на Дамерау-Левенщейн в което размяната на местата на два символа е една операция, а не 2.
johnfound
Създадено на 20.09.2020, видяно: 1784 пъти. #11203
И какво точно ще направи този "сериозно оптимизиран код" в sqlite? :) Можеш ли да го опишеш?
В смисъл? Ще изпълнява SQL заявките, какво друго може да прави кода в SQL база данни?
|
Създадено на 20.09.2020, видяно: 1781 пъти. #11205
Между другото, специално в био-информатиката се смята за по-подходящо да се използва разстоянието на Дамерау-Левенщайн в което размяната на местата на два символа е една операция, а не 2.
Не и в този случай.
|
Създадено на 20.09.2020, видяно: 1780 пъти. #11206
И какво точно ще направи този "сериозно оптимизиран код" в sqlite? :) Можеш ли да го опишеш?
В смисъл? Ще изпълнява SQL заявките, какво друго може да прави кода в SQL база данни?
Как ТОЧНО ще изпълнява SQL заявките? Какви ще са заявките, и в какъв достъп до данните ще се транслират те?
johnfound
Създадено на 20.09.2020, видяно: 1772 пъти. #11212
Как ТОЧНО ще изпълнява SQL заявките? Какви ще са заявките, и в какъв достъп до данните ще се транслират те?
Е, ти сега искаш да ти реша задачата на SQL ли?
Във всеки случай, бих започнал с нещо такова:
create table setA(strA text);
create table setB(strB text);
select
min(LsDist(strB, strA))
from
setB left join setA
group by
strB
А по-нататък ще видя какво и как може да се оптимизира, раздели на нишки и т.н.
|
Създадено на 20.09.2020, видяно: 1769 пъти. #11214
Как ТОЧНО ще изпълнява SQL заявките? Какви ще са заявките, и в какъв достъп до данните ще се транслират те?
Е, ти сега искаш да ти реша задачата на SQL ли?
Във всеки случай, бих започнал с нещо такова:
create table setA(strA text);
create table setB(strB text);
select
min(LsDist(strB, strA))
from
setB left join setA
group by
strB
А по-нататък ще видя какво и как може да се оптимизира, раздели на нишки и т.н.
И какви операции ще направи sqlite в този случай?
johnfound
Създадено на 20.09.2020, видяно: 1766 пъти. #11216
И какви операции ще направи sqlite в този случай?
Ами пусни я и виж. Това си е твоя задача все пак.
|
Последно редактирано на 20.09.2020 от |, видяно: 1764 пъти. #11218
И какви операции ще направи sqlite в този случай?
Ами пусни я и виж. Това си е твоя задача все пак.
Няма нужда да го правя. Знам, че моят код е по-бърз. При това без да е оптимален.
П.П. Много е забавно когато някой фен на асемблера ми дава съвет да използвам sql за оптимален код. :)
П.П.2. Само една подсказка: това ВИНАГИ ще сравнява всяка двойка от стрингове.
bvbfan
Създадено на 20.09.2020, видяно: 1758 пъти. #11221
Наистина ли мислиш, че потребителска функция в sqlite ще е по-добра от в момента работещия мноконишков, сравнително оптимизиран код? :) Защото той отнема около седмица на машина с 48*2 ядра, при това когато стринговете от колекция А е 100К. :) А компютрите имат много памет, може да предположиш че е безкрайно много (1.5 TB).
Ако питаш мен, аз не мисля, сигурен съм.
|
Създадено на 20.09.2020, видяно: 1756 пъти. #11223
Тоест твоя код не прави всяко с всяко ?
Не
|
Създадено на 20.09.2020, видяно: 1754 пъти. #11225
Наистина ли мислиш, че потребителска функция в sqlite ще е по-добра от в момента работещия мноконишков, сравнително оптимизиран код? :) Защото той отнема около седмица на машина с 48*2 ядра, при това когато стринговете от колекция А е 100К. :) А компютрите имат много памет, може да предположиш че е безкрайно много (1.5 TB).
Ако питаш мен, аз не мисля, сигурен съм.
Е, като се има предвид, че беше сигурен че ARM използва gcc, OK. :)