相关疑难解决方法(0)

快速置换 - >数字 - >置换映射算法

我有n个元素.为了举个例子,让我们说,7个元素,1234567.我知道有7个!=这些7个元素可能有5040个排列.

我想要一个包含两个函数的快速算法:

f(number)将0到5039之间的数字映射到唯一的排列,并且

f'(置换)将置换映射回其生成的数字.

我不关心数字和排列之间的对应关系,只要每个排列都有自己唯一的数字.

所以,举个例子,我可能会在哪里有功能

f(0) = '1234567'
f'('1234567') = 0
Run Code Online (Sandbox Code Playgroud)

想到的最快的算法是枚举所有排列并在两个方向上创建查找表,这样,一旦创建表,f(0)将是O(1)并且f('1234567')将是查找字符串.然而,这是内存饥饿,特别是当n变大时.

任何人都可以提出另一种算法,它可以快速工作,没有内存缺点吗?

algorithm math permutation combinatorics

108
推荐指数
5
解决办法
4万
查看次数

来自Guava或Java枚举的ImmutableSet

在这里阅读一个关于使用ImmutableSetGuava 的好例子.为了完整起见,此处报告了此示例:

public static final ImmutableSet<String> COLOR_NAMES = ImmutableSet.of(
  "red",
  "orange",
  "yellow",
  "green",
  "blue",
  "purple");

class Foo {
  Set<Bar> bars;
  Foo(Set<Bar> bars) {
    this.bars = ImmutableSet.copyOf(bars); // defensive copy!
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我可以通过使用Java枚举获得相同的结果吗?

PS:这个问题在我的脑海中更加混乱!

java enums guava

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

algorithm ×1

combinatorics ×1

enums ×1

guava ×1

java ×1

math ×1

permutation ×1