Skip to content

Commit

Permalink
Add DeepSeek experiment
Browse files Browse the repository at this point in the history
  • Loading branch information
mhvelplund committed Jan 29, 2025
1 parent 949d46c commit aff7583
Show file tree
Hide file tree
Showing 10 changed files with 685 additions and 1 deletion.
5 changes: 5 additions & 0 deletions docs/.pages
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
nav:
- index.md
- DevOps
- Miscellaneous
- Programming
2 changes: 2 additions & 0 deletions docs/blog/deepseek/.pages
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
nav:
- index.md
268 changes: 268 additions & 0 deletions docs/blog/deepseek/full_reasoning.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
# The full reasoning behind the answer

Alright, so I need to find the shortest path from node x to node s in this graph. Let me start by understanding how the
graph is structured based on the given information.

First, let's list out all the nodes and their connections:

- **s:** connected to a
- **a:** connected to s, b, h
- **b:** connected to a, c, f
- **c:** connected to b, d, e
- **d:** only connected to c
- **e:** only connected to c
- **f:** connected to b, h, q
- **g:** connected to f (but wait, g is only connected to f? Hmm)
- **h:** connected to a, i, q
- **i:** connected to h, j, k
- **j:** connected to i
- **k:** connected to i, l
- **l:** connected to k, m, n, o
- **m:** connected to l
- **n:** connected to l, o, q
- **o:** connected to l, n
- **p:** connected to q, x
- **q:** connected to f, h, n, p
- **x:** connected to p

Okay, so we have a graph with nodes s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, x.

Wait, hold on. The node 'g' is only connected to 'f', but in the given data, it's written as "g: f". So that means from
g, you can go to f, right? But in our problem, we're going from x to s, so maybe 'g' isn't directly involved unless we
need to take a longer path. Let me note that for later.

Our goal is to find the shortest path from x to s. So let's think about how to approach this.

I know that one of the standard algorithms for finding the shortest path in an unweighted graph is Breadth-First Search
(BFS). Since all edges are considered equal weight, BFS should work here.

So, to perform BFS:

1. Start from node x.
2. Explore all nodes adjacent to x.
3. Then explore all nodes adjacent to those nodes, and so on, until we find s.
4. Keep track of the path taken to reach each node to reconstruct the shortest path once we hit s.

Let me try to visualize or perhaps sketch out the connections:

Starting from x: x is connected only to p (x -> p).

From p: p is connected to q and x. Since we came from x, next would be q.

From q: connected to f, h, n, p. So from q, we can go to f, h, or n.

Let me map this out step by step:

1. Start at x (level 0).
2. Level 1: p.
3. From p, level 2: q.
4. From q, level 3: f, h, n.
5. From each of these:
- From f: connected to b, h, q. But h and q have already been visited; so go to b (level 4).
- From h: connected to a, i, q. a is closer to s; let's see where that leads (level 4). Also, from h you can go to i.
- From n: connected to l, o, q. So go to l and o (level 4).

Wait, so in level 3, we have f, h, n.

Let me note the steps more clearly:

Level 0:
- x

Level 1:
- p

Level 2:
- q

Level 3:
- f, h, n

Now, processing each node at level 3.

Starting with f:
From f: connected to b, h, q.
- b hasn't been visited yet. So mark b as level 4.
- h is already in level 3; don't need to revisit.

Processing h next (since from x->p->q->h):
From h: connected to a, i, q.
- a is new; so mark a as level 4.
- i is also new; mark i as level 4.

Then processing n:
From n: connected to l, o, q.
- l and o haven't been visited yet. So mark l and o as level 4.

So now at level 4, we have b, a, i, l, o.

Wait, but a is directly connected to s! Because looking back at the nodes:

s: a

So from a, you can go to s. Since we're trying to reach s, once we get to a, that's one step away.

But let me confirm if 'a' is in level 4 or not.

Wait, our BFS levels are as follows:

Level 0: x

Level 1: p

Level 2: q

Level 3: f, h, n

Level 4: From f: b; from h: a, i; from n: l, o. So level 4 is b, a, i, l, o.

So a is in level 4, but s is connected to a. Therefore, once we reach a at level 4, the next step would be s at level 5.

But wait, perhaps there's a shorter path? Let me check all possibilities because sometimes BFS can have multiple paths.

Alternatively, let me see if from h (level 3), going to i, then from i: j and k. From k: l and so on, but that might
take longer.

From b (level 4): connected to a, c, f. So a is reachable here as well.

So whether you go through h to a or through b to a, it's the same distance.

Therefore, s can be reached from a at level 5.

Wait, let me re-examine the levels:

From x (0) -> p (1) -> q (2)

From q: f (3), h (3), n (3)

From f: b (4); From h: a (4), i (4); From n: l (4), o (4)

So from level 4, nodes are a, b, i, l, o.

At this point, s is connected to a. So once we process a at level 4, the next step would be s at level 5.

Is there any shorter path? Let me think if I can reach s in fewer steps.

Looking back:

From x: p (1)
p connects to q (2)
q connects to f, h, n (3)

From f: b (4); From h: a, i (4); From n: l, o (4)

Is there any other connection from level 2 or 3 that can reach s without going through a? Let me see.

s is only connected to a. So the only way to get to s is via a. Therefore, the earliest we can reach a is at level 4, so
s must be at level 5.

But wait, let's check if there are alternative routes from q (level 2). From q: f, h, n.

From f (3): b (4); then b connects to a (so that would take another step: 5)

From h (3): directly to a (which is level 4), so s is at level 5.

Alternatively, from h: go to i (4). Then i can go to j or k. But j and k are further away. So going through h seems the
shortest path via h->a->s.

But perhaps another path? Let's see:

x -> p -> q -> n -> l -> ... but that leads to m, which doesn't connect back. Alternatively, x->p->q->h->i->k->l... Not
useful for getting to s.

Alternatively, x->p->q->f->b->a->s: Let's count the steps:

x (0) -> p (1) -> q (2) -> f (3) -> b (4) -> a (5) -> s (6)

Wait, but earlier I thought it was level 5 for s. Hmm.

Wait no, maybe my levels are off because each edge is one step, so the number of edges determines the length.

But in BFS, the distance from x to s would be the number of edges traversed.

So starting at x (distance 0).

p: 1

q:2

f,h,n:3

From f: b:4; h: a,i:4; n: l,o:4

Then from a: s:5. So total distance is 5 steps.

But let me check another path:

x -> p -> q -> h ->a ->s: that's x(0)-p(1)-q(2)-h(3)-a(4)-s(5). Also, same length.

Alternatively, any other paths?

Let's see if going from q->n->l... but l connects to m,n,o, which don't connect back. Similarly, o is connected to n and
l; still no connection towards s.

Similarly, i connects to j and k, then to l. So that seems longer.

Therefore, both paths through f->b and h lead to a in 4 steps, but from a you need one more step to s. Therefore, the
shortest path is of length 5 edges.

But wait, let me recount:

x -> p:1

p -> q:2

q -> h:3

h ->a:4

a ->s:5

So that's 5 steps.

Alternatively, x->p->q->f->b->a->s: also 6 steps? Wait no.

Wait, in BFS each level is one step. So from x (level0), p(level1); q(level2); f,h,n(level3); b,a,i,l,o(level4);
s(level5). Therefore, the path length from x to s is 5 edges.

Therefore, the shortest path has 6 nodes: x,p,q,h,a,s

Wait, but that's 5 steps or 6 nodes? Wait, in terms of number of nodes visited, it would be 6: x,p,q,h,a,s. But when we
talk about the shortest path length, it's usually the number of edges traversed, which is 5.

But perhaps depending on how it's defined, sometimes people count the number of nodes. Let me check:

s is at level5 if counting steps from x. So to get s, you traverse 5 edges: x-p, p-q, q-h, h-a, a-s.

So yes, that would be 5 edges, so length 5.

Is there any shorter path? For example, x->p->q->f->b->a->s is longer because it's 6 steps. So no, the shortest path is
indeed through x-p-q-h-a-s with 5 edges.

Alternatively, if we take x-p-q-n-o-l-k-i-j... No, that leads away from s.

So yes, I think the shortest path is x -> p -> q -> h -> a -> s.

Therefore, in terms of nodes: [x,p,q,h,a,s], which is 5 edges or 6 nodes.

Wait, let me confirm once more:

Start at x (distance 0).

p is distance1.

q is distance2.

From q, f,h,n are distance3.

From h, a and i are distance4.

a connects to s, so s is distance5.

Therefore, the shortest path from x to s is of length5, going through p,q,h,a,s.

Alternatively, could we get to a via b? Let's see:

x->p(1)->q(2)->f(3)->b(4)->a(5)->s(6). That would make it longer. So yes, the path through h is shorter.

Therefore, the shortest path is x-p-q-h-a-s with 5 edges.
Binary file added docs/blog/deepseek/graphs/actual_graph.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/blog/deepseek/graphs/graph.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/blog/deepseek/img/unpossible.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit aff7583

Please sign in to comment.