git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Question: How range-diff lapjv algorithm work

From
MÅMartin Ågren <martin.agren@gmail.com>
Date
Mar 8, 2023, 07:47 UTC
Message-ID
<CAN0heSoVBmkuEOkW3wRNXRRjG7y8UqvORie6ocYnmQRz4jEXkg@mail.gmail.com>
In-Reply-To
<CAOLTT8TcX6Wit=AOFGNLjA4v9HAvJJxCEtt3JhgUR+3OARycNw@mail.gmail.com>
On Wed, 8 Mar 2023 at 07:50, ZheNing Hu <adlternative@gmail.com> wrote:
>
> My question is:
> 1. In step 3, why is the matrix size (a.nr + b.br) * (a.nr + b.br)
> instead of a.nr * b.nr?

There's some explanation of that in the man page for `git range-diff`, under "ALGORITHM". Look for "To explain also new commits, we introduce dummy nodes on both sides:".

> 2. Why the cost(x,y) which satisfies "x ∈ [a.nr, a.nr + b.nr) y ∈ [0,
> b.nr) || x ∈ [0, a.nr) y ∈ [b.nr, b. The cost of nr + a.nr)" is set to
> "diffsize(a or b) * creation_factor / 100 : COST_MAX"? What is the
> role of creation_factor? [1]

The `--creation-factor` command line option is also described in the manpage. There was a thread on the mailing list with various discussions around this creation factor a while back. Maybe there's something interesting there [1].

> 3. How does LAPJV work here? [2]
>
> [1]: https://github.com/git/git/blob/725f57037d81e24eacfda6e59a19c60c0b4c8062/range-diff.c#L310
> [2]: https://github.com/git/git/blob/725f57037d81e24eacfda6e59a19c60c0b4c8062/linear-assignment.c#L15

This appears to be based on work by Jonker and Volgenant. Maybe searching for those names online could find something. Maybe not git-specific, but even if it's just the general algorithm as such, it might be possible to find different explanations of the algorithm.

I haven't really studied this algorithm, but since it's faster than the Hungarian algorithm, I could imagine that either

  * it's super-useful to first understand the Hungarian algorithm, then
    understand why and how the Jonker-Volgenant algorithm does better,
    or,
  * it's completely useless to first understand the Hungarian algorithm,
    since they're so different.
:-)
[1] https://lore.kernel.org/git/1196830250.20220726145447@yandex.ru/
Martin
Previous: ZheNing HuNext: ZheNing Hu
Message 2 of 4 in “Question: How range-diff lapjv algorithm work”
  1. ZheNing HuMar 8, 2023
  2. Martin ÅgrenMar 8, 2023
  3. ZheNing HuMar 9, 2023
  4. Johannes SchindelinMar 28, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.