Majhne spremembe
This commit is contained in:
parent
b6c83ca3e5
commit
a23c2e32fe
8 changed files with 12 additions and 15 deletions
|
|
@ -16,6 +16,5 @@
|
||||||
width: 2cm, fill: blue.lighten(50%), ..args)
|
width: 2cm, fill: blue.lighten(50%), ..args)
|
||||||
#let file-object(coord, hash, name, ..args) = commit-object(coord, hash, name,
|
#let file-object(coord, hash, name, ..args) = commit-object(coord, hash, name,
|
||||||
width: 2cm, fill: gray.lighten(50%), ..args)
|
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 bla(coord, ..args) = file-object(coord, "bcc138", ..args)[bla]
|
||||||
#let blabla(coord, ..args) = file-object(coord, "2ce22b", ..args)[blabla]
|
#let blabla(coord, ..args) = file-object(coord, "2ce22b", ..args)[blabla]
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
||||||
#import fletcher.shapes: house, chevron, pill
|
#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,
|
#diagram(node-stroke: 0.5pt,
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
||||||
#import fletcher.shapes: house, chevron, pill
|
#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,
|
#diagram(node-stroke: 0.5pt,
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
||||||
#import fletcher.shapes: house, chevron, pill
|
#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,
|
#diagram(node-stroke: 1pt, node-shape: pill,
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
||||||
#import fletcher.shapes: house, chevron, pill
|
#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(
|
#diagram(
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
||||||
#import fletcher.shapes: house, chevron, pill
|
#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,
|
#diagram(node-stroke: 0.5pt,
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
||||||
#import fletcher.shapes: house, chevron, pill
|
#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(
|
#diagram(
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,7 @@
|
||||||
#show heading: block.with(below: 1.5em)
|
#show heading: block.with(below: 1.5em)
|
||||||
#set text(lang: "sl")
|
#set text(lang: "sl")
|
||||||
#show link: set text(blue)
|
#show link: set text(blue)
|
||||||
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
|
#let git-object(hash, content) = table(columns: 1, [Zgoščena vrednost: #raw(hash)], raw(block:true, content))
|
||||||
#import fletcher.shapes: house, chevron, pill
|
|
||||||
#import "definicije.typ": file-object, tree-object, git-object, commit-object
|
|
||||||
|
|
||||||
#let note(content) = rect(stroke: none, width: 100%,
|
#let note(content) = rect(stroke: none, width: 100%,
|
||||||
text(style: "italic",
|
text(style: "italic",
|
||||||
|
|
@ -18,7 +16,7 @@
|
||||||
|
|
||||||
|
|
||||||
#align(center)[
|
#align(center)[
|
||||||
#text(size:2em)[*Matematika v Gitu*]
|
#text(size:2em)[*Matematični pogled na Git*]
|
||||||
#v(2em)
|
#v(2em)
|
||||||
Martin Vuk
|
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:
|
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.
|
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],
|
- _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
|
- _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
|
= 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},
|
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
|
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)$.
|
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)$.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue