[r-t] Similar compositions

Andrew Johnson andrew_johnson at uk.ibm.com
Thu Feb 28 14:22:05 GMT 2019

Last year we considered similar compositions.

John Goldthorpe had the good idea of using 6 hashes, rather than just all 
the rows (in order or sorted):

>Anyway, from what I can remember I generate six hashes per composition.  
They are done by creating a text file (albeit in memory) which contains 
each row of the composition, in order.  I then calculate the MD5 checksum 
for this file.  Other options are available.  Another composition with the 
same checksum is obviously the same.  I then sort the rows in to order and 
calculate a new checksum to detect the same rows but in a different 
order.  Next I do the same things but only using the lead-ends and 
lead-heads, and finally I do it using only the lead-ends and lead-heads 
which have calls.

That should be good for spotting identical compositions, possibly to 
different methods.

I'd like a way of comparing two compositions to see just how similar they 
are. My plan is to count the number of rows with changes that are the 
same, i.e. row n and row n+1 in composition A match row m and row m+1 in 
composition B.
Assuming A is the reference composition I then I rotate or reverse 
composition B to maximise the count, as I assume rotations/reversals are 
trivial variations which should not affect the 'similarity' figure.
I then calculate a percentage this is of the total changes in B. That way 
if B is a shortened version of A it can be calculated as nearly 100% the 

Composition A and B need to be in the same method; substituting between 
methods can be considered a different problem, which CompLib makes a good 
attempt at. Substituting with spliced methods is going to be harder.

We shouldn't reverse asymmetric methods (e.g. Grandsire) but the reversal 
is unlikely to be more similar.

This similarity figure looks at all the rows, not just those affected by 
calls, but I think that works from the effect outside the tower where a 
listener could have written out all the rows of composition A, and counts 
each change when 2 successive rows rung from composition B match 2 
successive rows in the list from composition A.

Some results:
Middleton's 5600 Cambridge (A) #c10029 compared to Johnson's variation of 
5056 starting with 2H (B) #c14095:

rows A=5600 rows B=5056 rotate 0:>12345678 start=12345678 same rows=2944 
58.23% same next row=2786; 94.63% of same rows; 55.10% of all rows
rows A=5600 rows B=5056 rotate 448:>13425678 start=14235678 same rows=5056 
100.00% same next row=5055; 99.98% of same rows; 99.98% of all rows

so comparing without rotation the similarity is not great (55.10%), but 
starting B after 2 courses (448 rows), or alternatively starting off with 
the row 13425678 gives a 99.98% similarity (only 1 change is different, 
jumping on with the before).

Middleton's versus Washbrook #c14493
rows A=5600 rows B=5184 rotate 0:>12345678 start=12345678 same rows=5184 
100.00% same next row=5181; 99.94% of same rows; 99.94% of all rows

so only 3 changes different (a Q-set? of bobs)

Middleton's versus Washbrook #c14494
rows A=5600 rows B=5184 rotate 224:>14235678 start=13425678 same rows=5184 
100.00% same next row=5181; 99.94% of same rows; 99.94% of all rows

very similar (with a start 1 course later)

Heywood versus Washbrook
rows A=5184 rows B=5184 rotate 4959:<14326587 start=14326587 same 
rows=5184 100.00% same next row=5184; 100.00% of same rows; 100.00% of all 

so they are identical if Washbrook's is started at row 4959 going 

Let's try some other compositions:
5056 Yorkshire by Henry Dains #c14958
5056 Yorkshire by Arthur Knight #c14968

rows A=5056 rows B=5056 rotate 3936:>13254678 start=13254678 same 
rows=4512 89.24% same next row=4494; 99.60% of same rows; 88.88% of all 

so with 88.88% they are different, but have similarities.

Instead of actual rotating composition B I renumber it to have rounds (the 
first row of A) at some other point in B. That's equivalent for round 
blocks. For compositions like Brian Price's 5090 (#c10162) you can't 
rotate without affecting the treble's path. We can still do the compare.

rows A=5600 rows B=5090 rotate 224:>14235678 start=13425678 same rows=5056 
99.33% same next row=5050; 99.88% of same rows; 99.21% of all rows

So that means ring Price's comp starting from 13425678, or else have a 
rounds start from the end of the first course, and have the single, the 
treble dodges 1/2 up, then that is the lead-head again, and the treble 
does another dodge as the effect of wrapping around the composition.

It also works for triples. Compare Parker's 12-part (7-obs.) of Grandsire 
Triples #c40921 with Bruerton #c22092

rows A=5040 rows B=5040 rotate 28:<1762453 start=1475632 same rows=5040 
100.00% same next row=3267; 64.82% of same rows; 64.82% of all rows

This measure does show compositions with blocks inserted in different 
places e.g. by 2 courses inserted with 3 bobs or a course between two 
singles as being quite different. Adding / removing a Q-set which just 
reorders parts of a composition would appear to be a small change.

Does this measure seem useful? I'm happy to compare any two compositions 
in CompLib.

Andrew Johnson

Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU

More information about the ringing-theory mailing list