(这不是 CS 课的作业,即使看起来很像)
我使用位域来表示 0 到 22 之间的范围。例如,作为输入,我有几个不同的范围(顺序无关紧要)。我用于.
和0
为了X
更好1
的可读性。
.....XXXXX..............
..XXXX..................
.....XXXXXXXXXXXXXXX....
........XXXXXXX.........
XXXXXXXXXXXXXXXXXXXXXXXX
位域范围的数量通常低于 10,但可能会高达 100。从该输入中,我想计算互斥的连续范围,如下所示:
XX......................
..XXX...................
.....X..................
......XX................
........XX..............
..........XXXXX.........
...............XXXXX....
....................XXXX
(同样,输出顺序无关紧要,它们只需要相互排斥和连续,即它们不能有洞。.....XXX.......XXXXX....
必须分成两个单独的范围)。
我尝试了几种算法,但最终都变得相当复杂和不优雅。对我有极大帮助的是一种检测.....XXX.......XXXXX....
有孔的方法以及一种确定孔中一个位的索引的方法。
编辑:位域范围代表地图上的缩放级别。它们旨在用于为 Mapnik(OpenStreetMap 使用的平铺渲染系统等)输出 XML 样式表。