How to compare two lists of discrete elements

4 min readNov 19, 2021

Suppose you are given two sequences (or lists), l1 and l2, and now you would like to compare how much l1 is different from l2. How would you compare them, quantitatively?

There are many metrics to compare two sequences like l1 and l2, though the focuses are not always the same. Some compare the bag of elements contained by each sequence. Others may care more about the oscillation pattern within each sequence. There may even be someone simply compares the length difference of the two sequences.

We will, in the second half of this post, put our explanation in a scenario of natural language processing. However, comparing difference between discrete sequences (instead of vectors) could be a broader headache. You may have compared your Monday course schedule with your friends in another class, and noticed that they are different. Or you may have compared your recent phone call history with some other person’s, and noticed that they are, of course, different. Or you may also have compared sequence of book arrangement on the top level of your bookshelf with some other person’s book arrangement, and noticed that they are different. Many such sequences can be compared, and difference can be seen. But, how do you measure the difference?

Suppose you have had your books arranged in the manner of l1 on the top level of your bookshelf. From left to right, they look like below:

l1 = [A, 3, 8, Y, U, &, 5, 5, H]

Yes, you have only nine books, and among them there is a duplicated ‘5’. These nine books have fully occupied your narrow bookshelf’s top level, and each of them is with the same thickness. This means you could only put nine books on this level.

One day, your friend Lucy visited your study, and noticed your arrangement l1. Lucy was particularly attracted (… well somehow…) by l1. She went back her own home and planned to duplicate l1 in her study. Lucy has an infinitely wide bookshelf top level, but she only wanted to utilize nine slots, because she was to duplicate l1. She took a look at her top level bookshelf, there are some books already arranged there, in sequence l2. Though not necessarily different from l1, l2 looks like this:

l2 = [G, 3, U, Y, Y, H, T, #, 5, F, L, T, 0, K]

Lucy has 14 books on her top level.

Lucy wants to modify her l2 to make it an l1. What should she do?

There are some books {A, 8, &} missing, so she has to buy them beforehand. Particularly, she also needs one more ‘5’, as there are two occurrence of ‘5’ in l1.

Therefore, Lucy bought a bag of books {&:1, 8:1, 5:1, A:1} and leave the bag on her desk. Then she realized that besides collecting missing books, she needs to remove the excessive books {G, Y, T, #, F, L, T, 0, K} from her top level of shelf.

After the above preparation, Lucy started to rearrange the books.

How many steps would she need to rearrange l2 to l1? Or what could be the fastest, most straightforward way? The answer is to take all books off the shelf and put each one back on according to l1. However, by doing that, Lucy would need a desk large enough to accommodate all her 18 books (14 original one + 4 newly bought). She did not want to do that, as she just wanted to use a tiny space on her desk. (please, please don’t ask me why she does not use her ‘infinitely wide bookshelf’ :) This is because she decided to only utilize nine slots, as you had l1.)

Thus, Lucy’s rearranging strategy was to take off as few books as possible, and put on the correct ones back. Therefore, she may need a few more steps to reach the final arrangement same as l1.

Did she make it?

Yes, of course, and there are many solutions. Some take more steps, some take not as many. Some lead 10 books scattered on the desk, some may only require 9 to be there. But, none of the solutions will use fewer than 9 units of space on desk, as after all Lucy has only nine books on the shelf eventually.

We are coming to the end of Lucy’s story with her bookshelf.

Though she made it, and successfully changed l2 to something same as l1, we may want to find her a best solution, that uses least steps, and occupies least space on her desk. This optimal solution indicates the least cumbersome way to change l2 to l1. By looking for this optimal solution, we can say that we found a definition of ‘distance from l2 to l1.’ So it is with ‘distance from l1 to l2’ if we reverse the steps of this optimal solution.

Now, we found a way to measure the distance between two sequences. The pattern is that: the more steps used, the larger the distance would be; the more space used, the larger the distance would be. (However, how to integrate time and space is another issue, we may simply multiply one with another, or we can use sum of space at each time step.)

Hold on, how would we help Lucy to find an optimal solution? Is there a deterministic algorithm?

See you in the next section ><