我找到了一条包含对象的路线。每一个都有0或1的值。我需要唯一的路由ID,它将识别任何对象的顺序。目前,我正在使用转换为十进制的二进制数(见图)。

问题是,路由中的对象数量高达15,因此,十进制数将非常大(高达32767),并且有许多值,这将永远不会被使用。
如何将该数字转换为另一个唯一值,但要小得多(<255)?我需要这样做,只有使用简单的算术运算符(+,-,*,div)。
发布于 2014-05-08 07:47:55
您有相当于15位必须保存的信息。用15位表示的最大二进制数是32767,这绝不是巧合,这也是可能的组合的最大数目(-1)。
如果不首先提供某种简化规则(即数字必须是奇数,数字必须是回文,等等),就不能减少这个数字。否则,15位的任何组合都是允许的。
虽然你可以执行数学运算来简化这个数字,但是你在这个过程中会丢失信息,因此它是单向的(你不能通过倒转数学运算(S)来计算原始数字)。
发布于 2014-05-08 08:07:10
假设,你只会旅行所有可能的路线中的一小部分。
在这种情况下,您可以使用路由位和递增的数值id之间的映射。您必须将该映射存储在某个地方,但是这样,每一条使用的路径都会得到一个指定的唯一id,该id可以用于以后引用它。
我不太确定这是否是一个有效的方法,但你并没有要求这个方面。
发布于 2014-05-08 07:44:57
这是不可能的,因为每条路线都可能到达(或不到达?)你的路线和2^15一样多
也许你必须考虑其中一些永远不会出现的事实(这是真的吗?)所以你只能计算这些可以到达的数字。这将减少你的方式。
若要将路由数量从0减少到255,必须消除约2^7条路由。这可能意味着七个对象的值总是相同的(0或1)。
例如
等等。
https://softwareengineering.stackexchange.com/questions/238349
复制相似问题