O(n^2) – побеждаем сложность

#АнатомияФункций – приёмы



Всем привет!



В чат прилетела задачка на поиск пар подобных текстов (сразу обращаю внимание – не кластеризация, а именно расчёт подобия и вынимание избранных, причём с линейной метрикой). Соответственно на больших данных это очень ресурсозатратно. Что смог – сократил, по этому поводу код:

let

from = List.Distinct(Excel.CurrentWorkbook(){[Name="база"]}[Content][Наименование]),

lst = List.Buffer(List.Transform(List.Zip({from,{1..List.Count(from)}}),(x)=>{x{0},Text.ToList(Text.Upper(x{0})),Text.Length(x{0}),x{1}})),



g=(x,y)=>2*List.Count(List.Intersect({x{1},y{1}}))/(x{2}+y{2}),

f=(x)=>List.Select(List.Transform(List.Skip(lst,x{3}),(y)=>{x{0},y{0},g(x,y)}),(z)=>z{2}>0.86),

tr = List.TransformMany(lst,f,(x,y)=>y),

to = Table.FromList(tr,(x)=>x,{"Наименование","Похожее","Подобие"})

in

to


Ну а что тут к чему смотрим -

С исходниками на sponsr - там же и курс по языку М

На дзен

и если повезет на ютуб



Лайки, комменты, подписки приветствуются )))

Надеюсь, было полезно.

Всех благ!

@buchlotnik