问题标签 [bijection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
501 浏览

matlab - 如何在 Matlab 中生成两组的所有双射?

我想做的是在Matlab中以最简单的方式执行以下操作

假设我们有两个数组 {1,2,3} {4,5,6}。

该算法应该给我所有的双射:

1-4 2-5 3-6 / 1-4 2-6 3-5 / 1-5 2-4 3-6 / 1-5 2-6 3-4 / 1-6 2-5 3-4 / 1-6 2-4 3-5

0 投票
2 回答
1378 浏览

haskell - 有限双射的高效函数数据结构

我正在寻找一种表示两种类型之间有限双射的功能数据结构,即节省空间和节省时间。

例如,如果考虑到大小为 n 的双射 f,我会很高兴:

  • 用一对新元素扩展 f 的复杂度为 O(ln n)
  • 查询 f(x) 或 f^-1(x) 的复杂度为 O(ln n)
  • f 的内部表示比具有 2 个有限映射(表示 f 及其逆)更节省空间

我知道排列的有效表示,比如这篇论文,但它似乎并没有解决我的问题。

0 投票
5 回答
2680 浏览

python - 查找字符和数字之间可能的双射

假设您在列表 L 中有一个字符串 S 和一个数字序列,使得 len(S) = len(L)。

检查是否可以找到字符串的字符与序列中的数字之间的双射,以使每个字符匹配一个且仅一个数字,最干净的方法是什么。

例如,“aabbcc”应与 115522 匹配,但不能与 123456 或 111111 匹配。

我有一个带有两个字典和循环的复杂设置,但我想知道是否有一种干净的方法可以做到这一点,也许是通过使用 Python 库中的一些函数。

0 投票
2 回答
350 浏览

algorithm - 最大限度地降低转型成本

我想出了以下问题,但我无法找到解决方案。

陈述:

有N个酒杯。假设每个酒杯都有无限容量。每杯酒的量是一个非零正整数,单位是毫升。类型 1 的移动定义为将 1 ml 从玻璃 i 转移到玻璃 j。类型 2 的移动定义为从玻璃 i 中丢弃一毫升。所有类型 1 的移动的成本为 1。所有类型 2 的移动的成本为 k。给定每杯酒的初始数量,我们需要对这两种酒做一些移动,以确保每杯酒的数量是素数(或零)。打印这种转换的最低成本。

如何解决这个问题?任何可能的解决方案的想法?

0 投票
2 回答
392 浏览

algorithm - 伪随机的一对一 int32->int32 函数

我正在寻找一个 int32->int32 函数

  • 双射(一一对应)
  • 至少在一个方向上计算便宜
  • 将递增的序列 0, 1, 2, 3, ... 转换为看起来像一个很好的伪随机序列的序列(当参数变化很小时,~半位翻转,没有明显的模式)
0 投票
0 回答
549 浏览

types - 为什么没有双射数据类型

我最近遇到了一种情况,我需要在我的映射中添加反向查找功能,然后我惊讶地发现根本没有为这种双射设计的数据类型。

我能够使用两张地图,一个键值,一个值键

但我真的很好奇为什么没有双射数据类型

0 投票
1 回答
597 浏览

scala - 将双射提升为函子

也许我遗漏了一些明显的东西,但是我正在尝试清理使用 Scalaz 7 的项目中的一些样板,并且我没有找到一个看起来非常简单且可能有用的特定拼图。

假设我们有两种类型之间的双射:

现在假设我们发现我们需要 和 之间的双List[Foo]List[Bar]。我们可以很容易地编写一个提供此功能的隐式类(实际上我们也可以让它适用于任何函子):

请注意,这是bimap从 Haskell 的Data.Bijection. Scalaz 的双射也有一个名为 的方法bimap,但它有一个更繁忙的类型,并且似乎没有以任何明显的方式做我想做的事。

现在我们可以只写以下内容:

我们已经得到了我们需要的双射。

我是否遗漏了一些抽象,使我可以使用 Scalaz 7 中已经为双射提供的函数和实例更清晰地编写它?

0 投票
0 回答
97 浏览

java - 双射单一类型集合

是否存在任何仅使用一种类型的双射数据结构,这样如果a -> bab -> a和 b 属于同一类型?我看过BiMapGuava 和BidiMapApache Commons,但两者都需要获取地图的逆来检查反向映射,而我希望这无关紧要。如果现有集合中没有一个,那么像这样的简单类是否可以解决问题,或者这有什么问题:

0 投票
2 回答
261 浏览

function - 在集合上生成可逆排列

我想以非顺序方式遍历集合 Q = [0, 2^16) 中的所有元素。为此,我需要一个函数 f(x) Q --> Q,它给出了对集合进行排序的顺序。例如:

为了恢复顺序,我需要反函数 f'(x) Q --> Q ,它将输出:

该函数必须是双射的,对于 Q 的每个元素,该函数唯一地映射到 Q 的另一个元素。

我怎样才能生成这样的功能,或者是否有任何已知的功能可以做到这一点?

0 投票
1 回答
2062 浏览

c++ - 整数的双射映射

英语不是我的母语:对不起我的错误。预先感谢您的回答。

我正在学习 C++,我正在尝试检查具有相同整数数量的两个集合在多大程度上是双射的。

例子 :

ArrayA 和 ArrayB 是双射的。

我的实现很幼稚。

如果 x == 0,则这两个集合是双射的。简单的。

我的问题如下:我想计算集合之间的双射数量,而不仅仅是 ArrayA 和 ArrayB 之间关系的整个属性。

例子 :

集合作为一个整体是双射的吗?不,但是有 2 个双射(0 和 0、1 和 1)。

使用我的代码,输出将是 1 个双射。事实上,如果我们对数组进行排序,我们会得到:

数组A = 0, 0, 0, 1; 数组 B = 0、1、3、3。

并排比较仅显示 0 和 0 之间的双射。

然后,我的问题是: 您是否知道一种在两个大小相等的集合之间映射元素并计算双射数的方法,无论整数的顺序如何?

解决了!

Ivaylo Strandjev 给出的答案有效:

  1. 对集合进行排序,
  2. 使用std::set_intersection函数,
  3. 利润。