<div dir="ltr"><div dir="ltr">Hi,<div><br></div><div>@Richard O'Keefe, Thanks a lot for your attention, shared knowledge and enlightenment.<br></div><div><br></div><div>>> I am still in the dark about whether you want to view these things<br>>> as sequences of BYTEs, as encoded sequences of CODEPOINTS,<br>>> as encoded sequences of base-character+combining characters,<br>>> as sequence of grapheme clusters, or quite possibly as sequences<br>>> of tokens<br></div></div><div><br></div><div>Honestly, my knowledge for LCS is not deep. I just observe the output of each libraries that i test,  if the output suite my need, then i choose that library.</div><div><a href="https://pypi.org/project/pylcs/">https://pypi.org/project/pylcs/</a> already provide functions to solve LCSubsequence and LCSubstring. But unfortunately all of the integration options not suited my case except NIF. I've try os:cmd() , Pyrlang and i'm not interested with erlang port because  similarr with Pyrlang there are a terms serialization handling. </div><div><br></div><div>So I decided to learn to write a NIF based on this <a href="https://github.com/wollmers/c-lcs-bv/blob/master/lcstest.c">https://github.com/wollmers/c-lcs-bv/blob/master/lcstest.c</a> . I need your help if someday i facing lots os error when run my very first NIF. And i do really still welcome for any Erlang's BIF based solution (if any). So i don't need to write a NIF that risk crashing the VM.</div><div><br></div><div><br></div><div>>> Take a step backwards.<br>>> What do these strings (binaries) *represent*?<br>>> What is the logical structure of the things you are representing?<br>>> Why do you want an operation that is completely insensitive<br>>> to that logical structure?<br>>> Can two different strings represent the same abstract concept?<br>>> What, if anything, does *part* of a string represent?<br></div><div><br></div><div>Honestly, for now i don't really understand some of your guidance above, for now i will just act as a house builder using Ikea's solutions (analogy).</div><div>Someday i will spent my free time for learning LCS more deeply act as a house building architect (analogy).</div><div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Pada tanggal Sel, 31 Mar 2020 pukul 11.13 Richard O'Keefe <<a href="mailto:raoknz@gmail.com">raoknz@gmail.com</a>> menulis:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">"substring" is a special case of "subsequence".<br>
"OAR" is a subsequence of "cOronA viRus" but not a substring of it.<br>
"OAR" is a substring of "bOARs" but not a prefix of it.<br>
<br>
I am still in the dark about whether you want to view these things<br>
as sequences of BYTEs, as encoded sequences of CODEPOINTS,<br>
as encoded sequences of base-character+combining characters,<br>
as sequence of grapheme clusters, or quite possibly as sequences<br>
of tokens.<br>
<br>
A lesson I learned back in 1980 is that "STRINGS ARE WRONG".<br>
As Alan Perlis said, "The string is a stark data structure and<br>
everywhere it is passed there is much duplication of process.<br>
It is a perfect vehicle for hiding information."  Since then experience<br>
has only reinforced this: if you are looking inside a string, then you<br>
probably should not be using a string.<br>
<br>
Take a step backwards.<br>
What do these strings (binaries) *represent*?<br>
What is the logical structure of the things you are representing?<br>
Why do you want an operation that is completely insensitive<br>
to that logical structure?<br>
Can two different strings represent the same abstract concept?<br>
What, if anything, does *part* of a string represent?<br>
<br>
<br>
On Tue, 31 Mar 2020 at 02:45, I Gusti Ngurah Oka Prinarjaya<br>
<<a href="mailto:okaprinarjaya@gmail.com" target="_blank">okaprinarjaya@gmail.com</a>> wrote:<br>
><br>
> Hi All,<br>
><br>
> Thank your very much for the answers,<br>
><br>
> @Valentin Micic , Your lcs function skipping the "World" word. I need "o" and "World" also count.<br>
><br>
> @Marc Worrel, Your function also similar with Valentine Micic's function.<br>
><br>
> @Richard O'Keefe , I suppose substring or subsequence is same thing, but i think i am wrong, the point is, i need the function to also count<br>
> "o" from <<"Hellaao World">>, and "World" from <<"Hello World">><br>
> from example: lcs(<<"Hello World">>, <<"Hellaao World">>)<br>
><br>
> I think i need to make a NIF .<br>
> I will try to make NIF based on this <a href="https://github.com/wollmers/c-lcs-bv" rel="noreferrer" target="_blank">https://github.com/wollmers/c-lcs-bv</a> wonderful example ANSI C code.<br>
><br>
> I've try Pyrlang <a href="https://pyrlang.github.io/Pyrlang/" rel="noreferrer" target="_blank">https://pyrlang.github.io/Pyrlang/</a> in the hope i that i can use / communicate with <a href="https://pypi.org/project/pylcs/" rel="noreferrer" target="_blank">https://pypi.org/project/pylcs/</a> through:<br>
> rpc:call('<a href="mailto:py@127.0.0.1" target="_blank">py@127.0.0.1</a>', 'pylcs', 'lcs', [<<"Hello World">>,<<"Hellaao World">>])  in a python-process node but Pyrlang not help much in my case. still very slow<br>
> because it run over the network.<br>
><br>
><br>
><br>
><br>
> Pada tanggal Sen, 30 Mar 2020 pukul 20.08 Ben Murphy <<a href="mailto:benmmurphy@gmail.com" target="_blank">benmmurphy@gmail.com</a>> menulis:<br>
>><br>
>> Hi,<br>
>><br>
>> I think the implementation on rosetta code is slightly broken from a<br>
>> performance point of view. Usually, if you are memoising in this<br>
>> problem you would use the offsets for where you are in the string. So<br>
>> if you were writing in an imperative language you would just have a N<br>
>> x M array. Obviously, you can't do this in Erlang so they are storing<br>
>> stuff in a dictionary. However, for the keys it looks like they are<br>
>> using the string/list for the key instead of the offset. This means<br>
>> the dict code will have to iterate over the remaining bit of the<br>
>> string for every lookup. So instead of being O(NxM) you end up with an<br>
>> algorithm that is O(NxMx(N + M)). So instead of being quadratic it<br>
>> gives you cubic performance. This might explain why it is so slow.<br>
>> Note: I haven't included the log() term that is introduced by the<br>
>> dictionary lookup that can't be avoided in Erlang.<br>
>><br>
>> On Mon, Mar 30, 2020 at 11:18 AM I Gusti Ngurah Oka Prinarjaya<br>
>> <<a href="mailto:okaprinarjaya@gmail.com" target="_blank">okaprinarjaya@gmail.com</a>> wrote:<br>
>> ><br>
>> > Hi,<br>
>> ><br>
>> > I need longest common substring erlang implementation. Please help me<br>
>> ><br>
>> > I've tried <a href="https://rosettacode.org/wiki/Longest_common_subsequence#Erlang" rel="noreferrer" target="_blank">https://rosettacode.org/wiki/Longest_common_subsequence#Erlang</a> but very very slow T_T<br>
>> ><br>
>> > and i've tried binary:longest_common_prefix([<<"i love you 2020-03-28">>,<<"i love you 2020-03-01">>]) not effective / not valid<br>
>> ><br>
>> > Thank you<br>
>> ><br>
</blockquote></div></div>