-
Notifications
You must be signed in to change notification settings - Fork 116
Add regular tree generator #197
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 5 commits
01896fe
dac8f9a
7abb310
9a0fb29
f441197
ec15727
b26cf91
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -536,6 +536,54 @@ function double_binary_tree(k::Integer) | |||||||||||||||||||||||||||||||||
| return g | ||||||||||||||||||||||||||||||||||
| end | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||
| regular_tree(k::Integer, z::integer) | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| Create a [regular tree](https://en.wikipedia.org/wiki/Bethe_lattice), | ||||||||||||||||||||||||||||||||||
| also known as Bethe Lattice or Cayley Tree, | ||||||||||||||||||||||||||||||||||
| of depth `k` and degree `z`. | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| # Examples | ||||||||||||||||||||||||||||||||||
| ```jldoctest | ||||||||||||||||||||||||||||||||||
| julia> regular_tree(4, 3) | ||||||||||||||||||||||||||||||||||
| {40, 39} undirected simple Int64 graph | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
|
Comment on lines
+549
to
+551
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would remove it and I would put it in the docstring of the function regular_tree(k,z).
Suggested change
|
||||||||||||||||||||||||||||||||||
| julia> regular_tree(5, 2) == binary_tree(5) | ||||||||||||||||||||||||||||||||||
| true | ||||||||||||||||||||||||||||||||||
|
Comment on lines
+554
to
+556
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same as above.
Suggested change
|
||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||
| function regular_tree(k::T, z::T) where {T<:Integer} | ||||||||||||||||||||||||||||||||||
| k <= 0 && return SimpleGraph(0) | ||||||||||||||||||||||||||||||||||
| k == 1 && return SimpleGraph(1) | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
| if Graphs.isbounded(k) && BigInt(z)^k - 1 > typemax(k) | ||||||||||||||||||||||||||||||||||
| throw(DomainError(k, "z^k - 1 not representable by type $T")) | ||||||||||||||||||||||||||||||||||
aurorarossi marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||
| end | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| n = T((z^k - 1) / (z - 1)) | ||||||||||||||||||||||||||||||||||
| ne = Int(n - 1) | ||||||||||||||||||||||||||||||||||
| fadjlist = Vector{Vector{T}}(undef, n) | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| @inbounds fadjlist[1] = convert.(T, 2:(z + 1)) | ||||||||||||||||||||||||||||||||||
| @inbounds for l in 2:(k - 1) | ||||||||||||||||||||||||||||||||||
| w = Int((z^(l - 1) - 1) / (z - 1)) | ||||||||||||||||||||||||||||||||||
| x = w + z^(l - 1) | ||||||||||||||||||||||||||||||||||
| @simd for i in 1:(z^(l - 1)) | ||||||||||||||||||||||||||||||||||
| j = w + i | ||||||||||||||||||||||||||||||||||
| fadjlist[j] = [ | ||||||||||||||||||||||||||||||||||
| ceil(T, (j - x) / z) + w | ||||||||||||||||||||||||||||||||||
| convert.(T, (x + (i - 1) * z + 1):(x + i * z)) | ||||||||||||||||||||||||||||||||||
| ] | ||||||||||||||||||||||||||||||||||
| end | ||||||||||||||||||||||||||||||||||
| end | ||||||||||||||||||||||||||||||||||
| l = k | ||||||||||||||||||||||||||||||||||
| w = Int((z^(l - 1) - 1) / (z - 1)) | ||||||||||||||||||||||||||||||||||
| x = w + z^(l - 1) | ||||||||||||||||||||||||||||||||||
| @inbounds @simd for j in (w + 1):x | ||||||||||||||||||||||||||||||||||
| fadjlist[j] = T[ceil(Int, (j - x) / z) + w] | ||||||||||||||||||||||||||||||||||
| end | ||||||||||||||||||||||||||||||||||
| return SimpleGraph(ne, fadjlist) | ||||||||||||||||||||||||||||||||||
| end | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would add the docstring also to this function.
Suggested change
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's quite often the case, that the docstrings for multiple methods of a function are only added for a single method - I think that would also be better here, than adding docstrings for both methods of this function. |
||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||
| roach_graph(k) | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That wikipedia article might be a bit confusing, because it talks about infinite trees in the introduction.
Maybe we can decribe that a bit more clearly here?
If I understood correctly, what you want to create is a perfect k-ary tree such as described here? https://en.wikipedia.org/wiki/M-ary_tree#Types_of_m-ary_trees