q2K BHP
Black History Portal
THE BHP WIRE —
HIDDEN TRUTHS
What's New!
THE JOURNEY THROUGH TIME

Explore Black History

Explore the people, places, events, achievements, struggles and stories that shaped our journey.

✊🏾

Civil Rights

Movements, leaders, victories and the continuing fight for equality.

⚙️

Black Inventors

Innovation, patents, science, technology and world-changing contributions.

🏆

Sports

Pioneers, champions, Negro Leagues, records, activism and excellence.

♟️

People

Meet the people whose lives, choices and achievements shaped the journey.

📍

Places

Black towns, communities, institutions and places where history happened.

📜

Events

Moments that changed communities, movements, institutions and the nation.

Enter a person, place, event, or topic.
MY'STORY

The MOVE Fire

This is a personal recollection on the Move fire on May 13, 1985 Philadelphia police fired thousands of rounds at the MOVE house, city officials approved dropping an explosive device on the roof, the resulting fire was allowed to burn, 11 people—including five children—died, and 61 homes were destroyed. Philadelphia City Council later called it a “brutal attack carried out by the City of Philadelphia on its own citizens” and acknowledged that no individual faced criminal consequences for the bombing. One timeline correction worth preserving for the BHP record: the major previous MOVE-police confrontation was August 8, 1978, about seven years before the bombing, not a year or two earlier. Officer James Ramp was killed, other police and firefighters were wounded, nine MOVE members were later convicted, and television cameras recorded police beating Delbert Africa during his arrest. The 1985 MOVE Commission later specifically criticized city planners for failing to adequately use lessons from that 1978 confrontation. And that actually strengthens the point you’re making: 1985 did not happen without precedent or institutional memory. There had already been a deadly confrontation with MOVE, years of conflict, negotiations and police involvement before Osage Avenue.

MORE →
BLACK FACTS
The Truths They Never Taught You...

Katherine Johnson — Mathematics to the Moon

Katherine Johnson’s mathematical calculations helped guide some of America’s most important early space missions while she confronted the racial and gender barriers faced by Black women in twentieth-century America.

MORE →
BHP gathered finds from its connected research sources. Showing the 4 strongest Black History matches.
← BACK TO RESULTS
Wikipedia

Fusion tree

In computer science, a fusion tree is a type of tree data structure that implements an associative array on w-bit integers on a finite universe, where each of the input integers has size less than 2w and is non-negative. When operating on a collection of n key–value pairs, it uses O(n) space and performs searches in O(logw n) time, which is asymptotically faster than a traditional self-balancing binary search tree, and also better than the van Emde Boas tree for large values of w. It achieves this speed by using certain constant-time operations that can be done on a machine word. Fusion trees were invented in 1990 by Michael Fredman and Dan Willard.[1]

Several advances have been made since Fredman and Willard's original 1990 paper. In 1999[2] it was shown how to implement fusion trees under a model of computation in which all of the underlying operations of the algorithm belong to AC0, a model of circuit complexity that allows addition and bitwise Boolean operations but does not allow the multiplication operations used in the original fusion tree algorithm. A dynamic version of fusion trees using hash tables was proposed in 1996[3] which matched the original structure's O(logw n) runtime in expectation. Another dynamic version using exponential tree was proposed in 2007[4] which yields worst-case runtimes of O(logw n + log log n) per operation. Finally, it was shown that dynamic fusion trees can perform each operation in O(logw n) time deterministically.[5]

This data structure implements add key, remove key, search key, and predecessor (next smaller value) and successor (next larger value) search operations for a given key. The partial result of most significant bit locator in constant time has also helped further research. Fusion trees utilize word-level parallelism to be efficient, performing computation on several small integers, stored in a single machine word, simultaneously to reduce the number of total operations.

How it works

[edit]

A fusion tree is essentially a B-tree with branching factor of w1/5 (any small exponent is also possible as it will not have a great impact on the height of the tree), which gives it a height of O(logw n). To achieve the desired runtimes for updates and queries, the fusion tree must be able to search a node containing up to w1/5 keys in constant time. This is done by compressing ("sketching") the keys so that all can fit into one machine word, which in turn allows comparisons to be done in parallel. So, a series of computations involving sketching, parallel comparison and most significant bit index locator, help reach the required solution.

Sketching

[edit]

Sketching is the method by which each w-bit key at a node containing k keys is compressed into only k − 1 bits. Each key x may be thought of as a path in the full binary tree of height w starting at the root and ending at the leaf corresponding to x. This path can be processed by recursively searching the left child of i if the ith bit is 0, and the right child if it is 1, generally, until all bits are scanned. To distinguish two paths, it suffices to look at their branching point (the first bit where any two keys differ). As there are a maximum of k keys, there will not be more than k-1 branching points, which means that no more than k-1 bits are required to identify a key. And hence, no sketch will have more than k-1 bits.

Visualization of the sketch function.
Visualization of the sketch function.

An important property of the sketch function is that it preserves the order of the keys. That is, sketch(x) < sketch(y) for any two keys x < y. So, for the entire range of keys, sketch(x0)<sketch(x1)<...<sketch(xk-1) because if the binary-tree-like path is followed, the nodes will be ordered in such a manner that x0<x1<...<xk-1.

Approximating the sketch

[edit]

If the locations of the sketch bits are b1 < b2 < ⋅⋅⋅ < br, then the sketch of the key xw-1⋅⋅⋅x1x0 is the r-bit integer .

With only standard word operations, such as those of the C programming language, it is difficult to directly compute the perfect sketch of a key in constant time. Instead, the sketch bits can be packed into a range of size at most r4, using bitwise AND and multiplication, called the approximate sketch, which does have all the important bits but also some additional useless bits spread out in a predictable pattern. The bitwise AND operation serves as a mask to remove all these non-sketch bits from the key, while the multiplication shifts the sketch bits into a small range. Like the "perfect" sketch, the approximate sketch also preserves the order of the keys and means that sketch(x0)<sketch(x1)<...<sketch(xk-1).

Some preprocessing is needed to determine the correct multiplication constant. Each sketch bit in location bi will get shifted to bi + mi via a multiplication by m = 2mi. For the approximate sketch to work, the following three properties must hold:

  1. bi + mj are distinct for all pairs (i, j). This will ensure that the sketch bits are uncorrupted by the multiplication.
  2. bi + mi is a strictly increasing function of i. That is, the order of the sketch bits is preserved even in x'.m.
  3. (br + mr) - (b1 + m1) ≤ r4. That is, the sketch bits are packed into a range of size at most r4, where r ≤ O(w1/5).

An inductive argument shows how the mi can be constructed. Let m1 = w − b1. Suppose that 1 < t ≤ r and that m1, m2... mt-1 have already been chosen. Then pick the smallest integer mt such that both properties (1) and (2) are satisfied. Property (1) requires that mt ≠ bi − bj + ml for all 1 ≤ i, j ≤ r and 1 ≤ l ≤ t-1. Thus, there are less than tr2 ≤ r3 values that mt must avoid. Since mt is chosen to be minimal, (bt + mt) ≤ (bt-1 + mt-1) + r3. This implies Property (3).

The approximate sketch is thus computed as follows:

  1. Mask out all but the sketch bits with a bitwise AND between x and .
  2. Multiply the key by the predetermined constant m as calculated above. This operation actually requires two machine words, but this can still be done in constant time.
  3. Mask out all but the shifted sketch bits. These are now contained in a contiguous block of at most r4 < w4/5 bits.

Parallel comparison

[edit]

The purpose of the compression achieved by sketching is to allow all of the keys to be stored in one w-bit word. Let the node sketch of a node be the bit string

1sketch(x1)1sketch(x2)...1sketch(xk)

Here, all sketch words are clubbed together in one string by prepending a set bit to each of them. We can assume that the sketch function uses exactly b ≤ r4 bits. Then each block uses 1 + b ≤ w4/5 bits, and since k ≤ w1/5, the total number of bits in the node sketch is at most w.

A brief notational aside: for a bit string s and nonnegative integer m, let sm denote the concatenation of s to itself m times. If t is also a bit string, st denotes the concatenation of t to s.

The node sketch makes it possible to search the keys for any b-bit integer y. Let z = (0y)k, which can be computed in constant time (multiply y by the constant (0b1)k), to make it as long as the node sketch such that each word in the node sketch can be compared with the query integer y in one operation, demonstrating word-level parallelism. If y were 5 bits long, it would be multiplied by 000001....000001 to get sketch(y)k. The difference between sketch(xi) and 0y results in the leading bit for each block to be 1, if and only if sketch(y) sketch(xi). We can thus compute the smallest index i such that sketch(xi) ≥ y as follows:

  1. Subtract z from the node sketch.
  2. Take the bitwise AND of the difference and the constant (10b)k. This clears all but the leading bit of each block.
  3. Find the most significant bit of the result, to identify the exact index of transition from elements with sketch smaller than the query sketch to those greater than the query sketch.
  4. Compute i, the rank of the sketch, using the fact that the leading bit of the i-th block has index i(b+1).

Desketching

[edit]

For an arbitrary query q, parallel comparison computes the index i such that

sketch(xi-1) ≤ sketch(q) ≤ sketch(xi)

Unfortunately, this does give the exact predecessor or successor of q, because the location of the sketch of q among the sketches of all the values may not be the same as the location of q in all the actual values. What is true is that, among all of the keys, either xi-1 or xi has the longest common prefix with q. This is because any key y with a longer common prefix with q would also have more sketch bits in common with q, and thus sketch(y) would be closer to sketch(q) than any sketch(xj).

The length longest common prefix between two w-bit integers a and b can be computed in constant time by finding the most significant bit of the bitwise XOR between a and b. This can then be used to mask out all but the longest common prefix.

Note that p identifies exactly where q branches off from the set of keys. If the next bit of q is 0, then the successor of q is contained in the p1 subtree, and if the next bit of q is 1, then the predecessor of q is contained in the p0 subtree. This suggests the following algorithm for determining the exact location of q:

  1. Use parallel comparison to find the index i such that sketch(xi-1) ≤ sketch(q) ≤ sketch(xi).
  2. Compute the longest common prefix p of q and either xi-1 or xi (taking the longer of the two).
  3. Let l-1 be the length of the longest common prefix p.
    1. If the l-th bit of q is 0, let e = p10w-l. Use parallel comparison to search for the successor of sketch(e). This is the actual predecessor of q.
    2. If the l-th bit of q is 1, let e = p01w-l. Use parallel comparison to search for the predecessor of sketch(e). This is the actual successor of q.
  4. Once either the predecessor or successor of q is found, the exact position of q among the set of keys is determined.

Fusion hashing

[edit]

An application of fusion trees to hash tables was given by Willard, who describes a data structure for hashing in which an outer-level hash table with hash chaining is combined with a fusion tree representing each hash chain. In hash chaining, in a hash table with a constant load factor, the average size of a chain is constant, but additionally with high probability all chains have size O(log n / log log n), where n is the number of hashed items. This chain size is small enough that a fusion tree can handle searches and updates within it in constant time per operation. Therefore, the time for all operations in the data structure is constant with high probability. More precisely, with this data structure, for every inverse-quasipolynomial probability p(n) = exp((log n)O(1)), there is a constant C such that the probability that there exists an operation that exceeds time C is at most p(n).[6]

Computational Model and Necessary Assumptions

[edit]

The computational model for the Fusion Tree algorithm is a Word RAM with a specific instruction set, including arithmetic instructions - addition, subtraction and multiplication (all performed modulo 2w) and Boolean operations - bitwise AND, NOT etc. A double-precision multiplication instruction is also included. It has been shown[7] that removal of the latter instruction makes it impossible to sort faster than O(n log n), unless it is permitted to use memory space of nearly 2w words (in contrast to linear space used by Fusion Trees), or include other instructions instead[2].

References

[edit]
  1. ^ Fredman, M. L.; Willard, D. E. (1990), "BLASTING Through the Information Theoretic Barrier with FUSION TREES", Proceedings of the Twenty-Second Annual ACM Symposium on Theory of Computing (STOC '90), New York, NY, USA: ACM, pp. 1–7, doi:10.1145/100216.100217, ISBN 0-89791-361-2, S2CID 16367160.
  2. ^ a b Andersson, Arne; Miltersen, Peter Bro; Thorup, Mikkel (1999), "Fusion trees can be implemented with AC0 instructions only", Theoretical Computer Science, 215 (1–2): 337–344, doi:10.1016/S0304-3975(98)00172-8, MR 1678804.
  3. ^ Raman, Rajeev (1996), "Priority queues: small, monotone and trans-dichotomous", Algorithms — ESA '96, Lecture Notes in Computer Science, vol. 1136, Berlin: Springer-Verlag, pp. 121–137, doi:10.1007/3-540-61680-2_51, ISBN 978-3-540-61680-1, MR 1469229.
  4. ^ Andersson, Arne; Thorup, Mikkel (2007), "Dynamic ordered sets with exponential search trees", Journal of the ACM, 54 (3): A13, arXiv:cs/0210006, doi:10.1145/1236457.1236460, MR 2314255, S2CID 8175703.
  5. ^ Patrascu, Mihai; Thorup, Mikkel (2014). "Dynamic Integer Sets with Optimal Rank, Select, and Predecessor Search". 2014 IEEE 55th Annual Symposium on Foundations of Computer Science. p. 166-175. arXiv:1408.3045. doi:10.1109/FOCS.2014.26. ISBN 978-1-4799-6517-5. S2CID 8943659.
  6. ^ Willard, Dan E. (2000), "Examining computational geometry, van Emde Boas trees, and hashing from the perspective of the fusion tree", SIAM Journal on Computing, 29 (3): 1030–1049, doi:10.1137/S0097539797322425, MR 1740562.
  7. ^ Ben-Amram, Amir M.; Galil, Zvi (1997), "When Can We Sort in o(n log n) Time?", Journal of Computer and System Sciences, 54 (2): 345–370, doi:10.1006/jcss.1997.1474.
[edit]

Source: Wikipedia. Article content is retrieved live through the MediaWiki API.

No preview image
Wikipedia

Exponential tree

An exponential tree is a type of search tree where the number of children of its nodes decreases doubly-exponentially with increasing depth. Values are stored only in the leaf nodes. Each node contains a splitter, a value less than or equal to all values in the subtree which is used during search. Exponential trees use another data structure in inner nodes containing the splitters from children, allowing fast lookup. Exponential trees achieve optimal asymptotic complexity on some operations. They have mainly theoretical importance.

MORE →
No preview image
Wikipedia

List of exponential topics

This is a list of exponential topics, by Wikipedia page. See also list of logarithm topics. Accelerating change Approximating natural exponents (log base e) Artin–Hasse exponential Bacterial growth Baker–Campbell–Hausdorff formula Barometric formula Beer–Lambert law Carlitz exponential Catenary Cell growth Characterizations of the exponential function Compound interest C0-semigroup De Moivre's formula Derivative of the exponential map Doléans-Dade exponential Double exponential function Doubling time e-folding Elimination half-life Error exponent Euler's formula Euler's identity e (mathematical constant) Exponent Exponent bias Exponential (disambiguation) Exponential backoff Exponential decay Exponential dichotomy Exponential discounting Exponential diophantine equation Exponential dispersion model Exponential distribution Exponential error Exponential factorial Exponential family Exponential field Ordered exponential field Exponential formula Exponential function Exponential generating function Exponential-Golomb coding Exponential growth Exponential hierarchy Exponential integral Exponential integrator Exponential map (Lie theory) Exponential map (Riemannian geometry) Exponential map (discrete dynamical systems) Exponential notation Exponential object (category theory) Exponential polynomials—see also Touchard polynomials (combinatorics) Exponential response formula Exponential sheaf sequence Exponential smoothing Exponential stability Exponential sum Exponential time Sub-exponential time Exponential tree Exponential type Exponentially equivalent measures Exponentiating by squaring Exponentiation Forgetting curve Four exponentials conjecture Fourier analysis List of Fourier analysis topics Gaussian function Gudermannian function Half-exponential function Half-life Hyperbolic function Inflation, inflation rate Interest Lambert W function Lifetime (physics) Limiting factor Lindemann–Weierstrass theorem List of integrals of exponential functions List of integrals of hyperbolic functions Lyapunov exponent Malthusian catastrophe Malthusian growth model Marshall–Olkin exponential distribution Matrix exponential Modular exponentiation Moore's law Nachbin's theorem Ordered exponential Piano key frequencies Plethystic exponential p-adic exponential function Power law Proof that e is irrational Proof that e is transcendental q-exponential Radioactive decay Rule of 70, Rule of 72 Schanuel's conjecture Scientific notation Six exponentials theorem Spontaneous emission Super-exponentiation Tetration Transseries Versor Weber–Fechner law Wilkie's theorem Zenzizenzizenzic

MORE →
No preview image
Wikipedia

Fusion tree

In computer science, a fusion tree is a type of tree data structure that implements an associative array on w-bit integers on a finite universe, where each of the input integers has size less than 2w and is non-negative. When operating on a collection of n key–value pairs, it uses O(n) space and performs searches in O(logw n) time, which is asymptotically faster than a traditional self-balancing binary search tree, and also better than the van Emde Boas tree for large values of w. It achieves this speed by using certain constant-time operations that can be done on a machine word. Fusion trees were invented in 1990 by Michael Fredman and Dan Willard. Several advances have been made since Fredman and Willard's original 1990 paper. In 1999 it was shown how to implement fusion trees under a model of computation in which all of the underlying operations of the algorithm belong to AC0, a model of circuit complexity that allows addition and bitwise Boolean operations but does not allow the multiplication operations used in the original fusion tree algorithm. A dynamic version of fusion trees using hash tables was proposed in 1996 which matched the original structure's O(logw n) runtime in expectation. Another dynamic version using exponential tree was proposed in 2007 which yields worst-case runtimes of O(logw n + log log n) per operation. Finally, it was shown that dynamic fusion trees can perform each operation in O(logw n) time deterministically. This data structure implements add key, remove key, search key, and predecessor (next smaller value) and successor (next larger value) search operations for a given key. The partial result of most significant bit locator in constant time has also helped further research. Fusion trees utilize word-level parallelism to be efficient, performing computation on several small integers, stored in a single machine word, simultaneously to reduce the number of total operations.

MORE →
Wikipedia

Hyperbolic tree

A hyperbolic tree (often shortened as hypertree) is an information visualization and graph drawing method inspired by hyperbolic geometry. Displaying hierarchical data as a tree suffers from visual clutter as the number of nodes per level can grow exponentially. For a simple binary tree, the maximum number of nodes at a level n is 2n, while the number of nodes for trees with more branching grows much more quickly. Drawing the tree as a node-link diagram thus requires exponential amounts of space to be displayed. One approach is to use a hyperbolic tree, first introduced by Lamping et al. Hyperbolic trees employ hyperbolic space, which intrinsically has "more room" than Euclidean space. For instance, linearly increasing the radius of a circle in Euclidean space increases its circumference linearly, while the same circle in hyperbolic space would have its circumference increase exponentially. Exploiting this property allows laying out the tree in hyperbolic space in an uncluttered manner: placing a node far enough from its parent gives the node almost the same amount of space as its parent for laying out its own children. Displaying a hyperbolic tree commonly utilizes the Poincaré disk model of hyperbolic geometry, though the Klein-Beltrami model can also be used. Both display the entire hyperbolic plane within a unit disk, making the entire tree visible at once. The unit disk gives a fish-eye lens view of the plane, giving more emphasis to nodes which are in focus and displaying nodes further out of focus closer to the boundary of the disk. Traversing the hyperbolic tree requires Möbius transformations of the space, bringing new nodes into focus and moving higher levels of the hierarchy out of view. Hyperbolic trees were patented in the U.S. by Xerox in 1996, but the patent has since expired.

MORE →
TOPIC OF THE DAY

Greenwood / Black Wall Street

Before the 1921 destruction of Tulsa’s Greenwood District, Black residents had created a remarkable center of business and community life. The district included stores, professional offices, entertainment venues and homes owned by Black citizens. Understanding Greenwood means learning what was built—not only what was burned.

MORE →
TRIVIA QUESTION OF THE DAY

What prosperous Tulsa district became widely known as “Black Wall Street”?

The Greenwood District.