December 30, 2011 9 Comments
Back in my college days (all those many years ago, all two of them), I studied computer science, as did many of my friends. Sometimes we’d solve theoretical or coding problems for fun over dinner in the dining hall, or make references to them in jokes or details about our lives. It made sense, after all, especially when that’s all you’re studying for weeks on end most of the year. One time, while walking back from class to our apartments, some of my friends and I were talking about strings. Not strings as in balls of yarn, but ordered sequences of symbols. For instance, my name, “polyphanes”, is a string composed of several letters in the Roman alphabet. Other strings are “euphony”, “polygraph”, “cat”, and “polyandrous”; some could be things like “123456”, where the symbols are Arabic numerals; “10001010011”, binary numerals; or “TCAGAGAGCT”, DNA nucleotides. I think you get the idea. Strings can have many symbols (“polyphanes”), one symbol (like “p”), or even no symbols (the so-called empty string, or “”).
Strings are very useful in computer science, and are a very robust tool in the hands of someone who knows how to use them. For instance, you can take a snippet out of a string to make another string, specifically substring: “p” and “poly” are substrings of “polyphanes”. They both are strings in and of themselves, but appear within the larger string “polyphanes”. Substrings are strings that are composed of part or all of another string that is at least as large as the substring. The empty string, “”, is by definition a substring of any string, including itself. Now, say you have several strings “polyphanes”, “polygraph”, and “polyandrous”. Say you want to know whether there exists a substring common to all of them. From above, we know that the empty string is part of all of them, but that’s trivial to find out and doesn’t help us any. We know that “p” is part of all of them, as is “a”, but “g” only appears in “polygraph”. Again, this is mostly easy to figure out, but say you want to know what the longest common substring is between them. In this example, the longest common substring (LCSubS) is “poly”, with a length of four symbols. Finding the LCSubS is nontrivial, and can be a pretty complex problem in its own right. The LCSubS problem comes into heavy employ when dealing with DNA sequencing, when you have several strands of DNA and want to find the longest common sequence of nucleotides that they may have in common. If there aren’t any, we return the empty string, “”, meaning that there is nothing common at all between them.
Let’s flip the idea on its head, now: say you have several strings “rec”, “cyc”, “l” and “ab”. Is there a word (a string of Roman letters that makes sense in the English language) that makes use of all of these strings? Sure: “recyclable”: it can be formed by combining the above strings in a particular way. Viewed from the point of view of substrings, “recyclable” has “rec”, “cyc”, “l”, and “ab” as substrings. In this case, “recyclable” is a string and the shorter ones are substrings; alternatively, “rec” and the rest are strings and “recyclable” is a superstring. A superstring is a string that contains several other strings. Makes sense, right? Just as, above, we wanted to find the LCSubS, we can also try to find the shortest common superstring (SCSupS). “Recyclability” is one possible superstring, but it’s not the shortest.
It was this SCSupS problem that my friends were talking about in particular, and I mostly took a backseat to this conversation (I wasn’t in their class that was discussing this problem). However, it got me to think about one of my hobbies: geomancy. In geomancy, the geomantic figures (see this page for information if you’re unfamiliar with geomancy) like Puer or Albus can be seen as strings of one or two dots, or as I prefer, binary numerals. If we let single dots (active elements) be represented by the binary numeral 1 and double dots (passive elements) by the binary numeral 0, and order the symbols from left to right as we would a geomantic figure from top to bottom, we get the following strings to represent the geomantic figures:
I prefer these binary representations, myself, when I need to illustrate the structure of geomantic figures in a text-only medium.
Anyway, you have these four-bit strings of binary numbers that correspond to the sixteen geomantic figures. They’re each strings. Now, normally in geomancy we’re concerned with adding figures together (such that Puer and Albus make Via, or 1101 + 0010 = 1111). But in the context of strings, why not try applying this idea of SCSupS to the geomantic figures? For instance, there are works of geomancy that use five-lined figures, or even six-lined ones. Heck, the I Ching, a kind of Chinese geomancy, with its 64 hexagrams can be considered in a way similar to this. Let’s take Hexagram 22, 賁 (Adorning), which looks like the following:
We can consider it to have the binary structure of 100101 (using a 1 to represent a solid Yang line and a 0 to represent a broken Yin line). If we want to take a substring of length 4 from this string, we have four choices: 1001 (characters 1 through 4), 0010 (characters 2 through 5), or 0101 (characters 3 through 6). In this case, we could say that the strings of length 4 are substrings of the string of length 6, or we could say that the strings of length 4 have the string of length 6 as their superstring. The overlap provided by the figures helps 100101 to be the SCSupS for these strings; we could put them end to end, like 100100100101 (read: 1001-0010-0101), but that’s really long with a length of 12; we could overlap a few of them to make 00101001 (read: 0010-0101-1001, with overlap between the 010 of the first two figures and the 1 of the last two figures), but that has length 8. 100101 is the shortest common superstring with a length of 4, because the overlap between the substrings is at their max (three symbols between the first two and the last two figures). It’s kinda nifty.
So, if you can overlap some of the figures to form a superstring, why not try to make a superstring that contains all 16 geomantic figures to make a geomantic superfigure? This took some doing, and I eventually wrote a program to cycle through and figure out the minimum length of the superstrings that do this, but it turns out that there are 256 possible geomantic superfigures of length 19: a “geomantic figure” of a sort that has 19 rows of dots, with each substring of 4 rows being one of the sixteen geomantic figures. Why is 19 the minimum length for a geomantic superfigure? The math is easy: from the example above using Hexagram 22 which has a length of 6 and has three substrings of length 4, where each figure overlaps with the next using three of its rows, we can say that “for a geomantic superfigure, the shortest possible length is the number of figures contained in it n + 3″. Since there are 16 figures, a geomantic superfigure must be that plus three, or 19.
Consider an example:
0000 0001 0010 0100 1001 0011 0110 1101 1010 0101 1011 0111 1111 1110 1100 1000
Populus, Tristitia, Albus, Rubeus, Carcer, Fortuna Maior, Coniunctio, Puer, Amissio, Acquisitio, Puella, Caput Draconis, Via, Cauda Draconis, Fortuna Minor, Laetitia
In this case, we overlap Populus with Tristitia with Populus’ lower three lines and Tristitia’s upper three lines (0000 : 0001 = 00001), then we repeat the process with the next figure (00001 : 0010 = 000010), and so on. We end up with the string 0000100110101111000 of length 19 which, for every possible substring of length 4, contains all 16 geomantic figures. In other forms of representation, such as dot or line notation, we can get the following visual forms:
The third style, the intersecting lines, is interesting, and brings to mind bindrunes (special “master” runes that are composed of other runes) or supersigils that combine other sigils. The central idea is the same: combine several shapes, strings, or figures to form a more cohesive larger one. Here, with this geomantic superfigure, it composes the essence of all the geomantic figures in a particular order (Populus to Tristitia to Albus to Rubeus…). That order of the figures, how different states flow from one to another, is encapsulated in a single glyph. Further, if you connect the ends of the Laetitia on the bottom to the top of the Populus, you have a neverending loop, a cycle of manifestation or transformation in the figures.
As I mentioned before, there are 256 of these geomantic superfigures, or 16² superfigures. Some can be looped back onto itself, and some can’t, but each has the same 16 figures as its components in different orders. Each order and superfigure has meaning, like a kind of geomantic universe of its own, and can be employed in some kinds of geomantic sigil magic. This isn’t something I’ve actively used or dealt with in my own work yet, but it’s interesting to note, and if nothing else, is an interesting academic and mystical exercise. However, I feel like this is too interesting to not put up for aspiring geomantically-minded mages to never have heard about. If you want the complete list of 256 geomantic superfigures, let me know and I’ll send you a file listing them.