Majhne spremembe

This commit is contained in:
Martin Vuk 2026-01-14 11:59:44 +01:00
parent b6c83ca3e5
commit a23c2e32fe
8 changed files with 12 additions and 15 deletions

View file

@ -16,6 +16,5 @@
width: 2cm, fill: blue.lighten(50%), ..args)
#let file-object(coord, hash, name, ..args) = commit-object(coord, hash, name,
width: 2cm, fill: gray.lighten(50%), ..args)
#let git-object(hash, content) = table(columns: 1, [Zgoščena vrednost: #raw(hash)], raw(block:true, content))
#let bla(coord, ..args) = file-object(coord, "bcc138", ..args)[bla]
#let blabla(coord, ..args) = file-object(coord, "2ce22b", ..args)[blabla]

View file

@ -1,6 +1,6 @@
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
#import fletcher.shapes: house, chevron, pill
#import "../definicije.typ": file-object, tree-object, git-object, commit-object
#import "../definicije.typ": file-object, tree-object, commit-object
#diagram(node-stroke: 0.5pt,
{

View file

@ -1,6 +1,6 @@
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
#import fletcher.shapes: house, chevron, pill
#import "../definicije.typ": file-object, tree-object, git-object, commit-object
#import "../definicije.typ": file-object, tree-object, commit-object
#diagram(node-stroke: 0.5pt,
{

View file

@ -1,6 +1,6 @@
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
#import fletcher.shapes: house, chevron, pill
#import "../definicije.typ": file-object, tree-object, git-object, commit-object
#import "../definicije.typ": file-object, tree-object, commit-object
#diagram(node-stroke: 1pt, node-shape: pill,
{

View file

@ -1,6 +1,6 @@
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
#import fletcher.shapes: house, chevron, pill
#import "../definicije.typ": file-object, tree-object, git-object, commit-object, bla, blabla
#import "../definicije.typ": file-object, tree-object, commit-object, bla, blabla
#diagram(
{

View file

@ -1,6 +1,6 @@
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
#import fletcher.shapes: house, chevron, pill
#import "../definicije.typ": file-object, tree-object, git-object, commit-object
#import "../definicije.typ": file-object, tree-object, commit-object
#diagram(node-stroke: 0.5pt,
{

View file

@ -1,6 +1,6 @@
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
#import fletcher.shapes: house, chevron, pill
#import "../definicije.typ": file-object, tree-object, git-object, commit-object, bla, blabla
#import "../definicije.typ": file-object, tree-object, commit-object, bla, blabla
#diagram(
{

View file

@ -4,9 +4,7 @@
#show heading: block.with(below: 1.5em)
#set text(lang: "sl")
#show link: set text(blue)
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
#import fletcher.shapes: house, chevron, pill
#import "definicije.typ": file-object, tree-object, git-object, commit-object
#let git-object(hash, content) = table(columns: 1, [Zgoščena vrednost: #raw(hash)], raw(block:true, content))
#let note(content) = rect(stroke: none, width: 100%,
text(style: "italic",
@ -18,7 +16,7 @@
#align(center)[
#text(size:2em)[*Matematika v Gitu*]
#text(size:2em)[*Matematični pogled na Git*]
#v(2em)
Martin Vuk
]
@ -59,12 +57,12 @@ Zato je Git #link("https://en.wikipedia.org/wiki/Distributed_version_control")[d
]
V nadaljevanju bomo obravnavali nasledjne teme:
- _Podatkovno skladišče:_ Kako Git uporablja #link("https://sl.wikipedia.org/wiki/Zgo%C5%A1%C4%8Devalna_funkcija")[zgoščevalno funkcijo]
- _Podatkovno skladišče:_ Kako Git uporablja #link("https://sl.wikipedia.org/wiki/Zgo%C5%A1%C4%8Devalna_funkcija")[zgoščevalno funkcijo] (angl. hash function)?
in #link("https://en.wikipedia.org/wiki/Merkle_tree")[Merklejeva drevesa] za hranjenje posnetkov vsebine mape.
- _Zgodovina sprememb:_ Kako zgodovino predstavimo z #link("https://en.wikipedia.org/wiki/Directed_acyclic_graph")[usmerjenim acikličnim grafom],
v katerem so vozlišča različice, povezave pa povežejo različice z njihovimi neposrednimi predhodniki.
v katerem so vozlišča različice, povezave pa povežejo različice z njihovimi neposrednimi predhodniki?
- _Reference_: Kako preproste reference (kazalci) na vsebino omogočajo bliskovito
preklaplanje med različicami in preprečijo popolno zmešnjavo, ko več ljudi hkrati spreminja iste datoteke.
preklaplanje med različicami in preprečijo popolno zmešnjavo, ko več ljudi hkrati spreminja iste datoteke?
= Podatkovno skladišče
@ -84,7 +82,7 @@ Git za izračun imena uporabi _zgoščevalno funkcijo_. Naj bo $B$ množica vseh
$
H: B -> {0, 1, dots, 2^(n)-1},
$
ki vsakemu besedilu $b$ priredi $n$-bitno vrednost $H(b)$. Vrednosti zgoščevalne funkcije $H(b)$ pravimo _zgostitev_ vsebine $b$.
ki vsakemu besedilu $b$ priredi $n$-bitno vrednost $H(b)$. Vrednosti zgoščevalne funkcije $H(b)$ pravimo _zgostitev_ vsebine $b$ (angl. hash).
Git hrani datoteke pod imeni, ki so enaka zgostitvi vsebine. Kaj pa če imata dve različni vsebini isto zgostitev? Funkcija $H$ ni injektivna, saj je množica nizov, bistveno večja od množice zgostitev. To pomeni, da imata lahko dve različni datoteki enako zgostitev. Če se to zgodi, rečemo, da pride do _kolizije zgostitve_. V primeru kolizije zgostitve bi Git shranil le eno datoteko, za drugo pa bi predpostavil da je že shranjena. Zato je funkcija $H$ izbrana tako, da
sprememba enega samega bita v besedilu $b in B$ spremeni vrednost $H(b)$ in je porazdelitev vrednosti $H(b)$ čim bližje enakomerni porazdelitvi. To pomeni, da so vse vrednosti $H(b)$ približno enako verjetne. Na ta način zmanjšamo verjetnost kolizije( glej @sec_kolizije). Verjetnost kolizije je izjemno majhna, zato Git lahko predpostavi, da je niz $b$ enolično določen z njegovo zgostitvijo $H(b)$.