寻找将集合映射到整数的双射函数

2024-05-14

对于任意两个序列 a, b,其中 a = [a1,a2,...,an] 且 b = [b1,b2,...,bn] (0a, b具有相同的元素,而不关心它们的顺序。例如,如果 a = [1,1,2,3], b = [2,1,3,1], c = [3,2,1,3] ,则 f(a) = f(b),f(a) ≠ f(b)。

我知道有一种简单的算法,它首先对序列进行排序,然后将其映射到整数。 例如,排序后,我们有a = [1,1,2,3],b = [1,1,2,3],c = [1,2,3,3],假设m = 9 ,使用十进制转换,我们最终将得到 f(a) = f(b) = 1123 ≠ f(c) = 1233。但是使用某种排序算法这将花费 O(nlog(n)) 时间(不要使用非比较排序算法)。

有更好的方法吗?像哈希之类的东西? O(n) 算法?

请注意,我还需要易于反转的函数,这意味着我们可以将整数映射回序列(或更简洁地说是集合)。

更新:请原谅我糟糕的描述。这里 m、n 都可以非常大(100 万或更大)。而且我还希望 f 的上限非常小,最好是 O(m^n)。


这适用于足够小的值m,并且数组大小足够小:

#include <stdio.h>

unsigned primes [] = { 2,3,5,7,11,13,17, 19, 23, 29};
unsigned value(unsigned array[], unsigned count);

int main(void)
{
unsigned one[] = { 1,2,2,3,5};
unsigned two[] = { 2,3,1,5,2};
unsigned val1, val2;

val1 = value(one, 5);
val2 = value(two, 5);
fprintf(stdout, "Val1=%u, Val2=%u\n", val1, val2 );

return 0;
}

unsigned value(unsigned array[], unsigned count)
{
unsigned val, idx;

val = 1;
for (idx = 0; idx < count; idx++) {
        val *= primes [ array[idx]];
        }

return val;
}

作为解释,在这里查看我的描述 https://stackoverflow.com/a/11117236/905902.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻找将集合映射到整数的双射函数 的相关文章

  • Networkx 中 Louvain 分区的可视化

    请帮助我更改 Louvain 聚类算法结果的可视化 我从网站上获取了代码https github com taynaud python louvain https github com taynaud python louvain我可以重写
  • 为什么 Convert.ToInt32(1.0/0.00004) != (Int32)(1.0/0.00004)

    为什么这段代码http ideone com YRcICG http ideone com YRcICG void Main double a 0 00004 Int32 castToInt Int32 1 0 a Int32 conver
  • 如何计算具有较大中间值的总和

    我想计算 for n m两个值都是 1000 以内的整数 最终结果是一个不大于 1000 的数字n但中间值对于 python 来说太大了 无法处理 你怎么解决这个问题 我将函数定义如下 from scipy misc import comb
  • 轮廓积分算法 C++

    我正在尝试编写一个应用数学程序来计算复平面中的轮廓积分 对于初学者来说 我想为梯形方法编写一个算法 但我有点坚持理解它会是什么样子 毕竟 我们通常将梯形方法视为 2D 图 而这里我们有 f C gt C 所以我们谈论的是 4D 最终我希望用
  • 全部配对图表上的所有路径

    这可能是一个没有最佳解决方案的问题 假设我有一个有向图 不知道它是否有循环 循环检测将是这个问题的方面之一 给定一组顶点 可能是数百万个顶点 我需要计算给定图的所有唯一对之间的所有不同路径 没有重复顶点的路径 我该如何应对这种情况 让我们看
  • 计算字母表的第 n 个 6 个字符排列

    我已经研究了好几天 试图找到解决这个问题的方法 如果需要的话 我很乐意花钱请人咨询时间来解决这个问题 我目前正在使用Python迭代工具 http docs python org 2 library itertools html生成 32
  • GO中的优先级队列

    谁能向我解释一下 我想在GO中实现一个优先级队列 接口实现来自link https golang org pkg container heap example priorityQueue 但优先级最低 我的代码 pq make Priori
  • 使用对象列表构建树

    我有一个带有属性 id 和parent id 的对象列表 我想建造一棵树来连接那些孩子和父母 1 个父对象可以有多个子对象 并且有一个对象将成为所有对象的祖先 实现该功能最快的算法是什么 我使用 C 作为编程语言 但其他语言也可以 像这样的
  • 当尝试在随机数字数组中查找运行最大值时,会调用多少次更新最大值?

    假设我们有一个包含 N 到 N 的整数的数组 数组大小为 2N 1 我们首先对数组中的元素进行混洗 然后尝试通过从第一个元素到最后一个元素迭代数组来找到最大整数 代码示例是Java语言 int called 0 int max Intege
  • 求从1到N的所有数字的数字之和[重复]

    这个问题在这里已经有答案了 问题 求1到N 包括两端 所有数字的数字之和 时间复杂度应该是 O logN 对于 N 10 总和为 1 2 3 4 5 6 7 8 9 1 0 46 对于 N 11 总和为 1 2 3 4 5 6 7 8 9
  • 可被 N 整除的最小正数

    1 如何找到能被N整除的最小正数 并且它的各位数字和应该等于N 例如 N 结果 1 1 10 190 并且算法时间不应超过 2 秒 有什么想法 伪代码 pascal c 或 java 吗 设 f len sum mod 为 bool 这意味
  • Mathematica 圆柱分解的计算复杂度是多少

    数学 圆柱分解 http reference wolfram com mathematica ref CylindricalDecomposition html实现一种称为圆柱代数分解的算法 Wolfram MathWorld 的文章圆柱代
  • 在大文件中查找重复字符串

    一个文件包含大量 例如100亿 字符串 您需要查找重复的字符串 您有 N 个可用系统 您将如何找到重复项 埃里克森的答案可能是提出这个问题的人所期望的 您可以将 N 台机器中的每台机器用作哈希表中的一个存储桶 对于每个字符串 按顺序说出字符
  • 最大化数组中成对距离的总和

    想象一个清单 e1 e2 en 和一个函数f e1 e2 gt number返回常数时间内任意两个元素之间的距离 f e e 0 e1 e2 gt f e1 e2 gt 0 f e1 e2 lt f e1 e3 f e3 e2 目标是排列列
  • 为什么循环引导迭代算法的数组大小必须为 3^k+1?

    The 循环引导迭代算法 http www geeksforgeeks org an in place algorithm for string transformation 是一种通过将所有偶数项移至前面并将所有奇数项移至后面同时保留其相
  • 有没有办法根据值是大于 0.5 还是小于 0.5 来进行下限/上限?

    我正在尝试舍入我的价值观 以便如果它是0 5或更大 则变为1 否则就变成0 例如 3 7 gt 4 1 3 gt 1 2 5 gt 3 有任何想法吗 Math Round 3 7 MidpointRounding AwayFromZero
  • 如何判断鼠标指针是否位于贝塞尔曲线和直线定义的路径内?

    我有一条由多条贝塞尔曲线和直线段组成的闭合路径 如何判断鼠标指针的当前位置是在路径内部还是外部 Example of mouse leaving the area Example of mouse entering the area 首先
  • 在哪里可以了解有关“蚁群”优化的更多信息?

    我已经阅读了一段时间关于使用 蚁群 模型作为优化各种类型算法的启发式方法的内容 然而 我还没有找到一篇文章或书籍以介绍性的方式甚至详细地讨论蚁群优化 谁能给我指出一些资源 让我可以更多地了解这个想法 如果你懂德语 是的 抱歉 我和一个朋友写
  • 在最小堆中查找 k 个最小元素 - 最坏情况复杂度

    我有一个最小堆n元素并想要找到k该堆中的最小数字 最坏情况的复杂性是多少 这是我的方法 在 stackoverflow 上的某个地方 我读到在最小堆中查找第 i 个最小数字的复杂性是O i 所以如果我们想找到n 1最小的数字 n 毫无意义
  • 对相当大的整数的大集合的操作的快速实现

    描述 我实现了以下类 LabSetInt64 参见下面的代码 这里的目标是尽可能快地操作大量大整数 最多 10M 的值 我的主要要求集中在 至关重要 尽快获取集合的大小 基数 重要 能够非常快速地迭代一组集合 所以 从下面的实现开始 我还有

随机推荐

  • XAML 网格可见性转换?

    我有一个网格 其可见性绑定到我的视图模型中的属性 这一切都工作正常 网格正确地出现 消失 我的问题是 如何应用过渡 以便网格内容滑入 UI 边缘 而不是立即从屏幕上消失 当它可见时 它应该再次滑出
  • swift 中闭包和函数作为参数的区别

    我有将近 4 年的 Objective C 经验 并且是 swift 的新手 我试图从 Objective C 的角度理解 swift 的概念 所以如果我错了 请指导我 在目标 c 中 我们有块 可以稍后异步执行的代码块 这绝对是完全合理的
  • 在工具栏下显示内容

    您好 我试图简单地将我的内容放在工具栏下方 但是当我运行我的应用程序时 某些内容本应位于工具栏下方 却隐藏在工具栏后面 我已经阅读了有关使用框架布局来尝试将其分离的内容 但我有点卡住了 我目前正在使用该软件提供的基本 android stu
  • Twig:如何获取字符串中的第一个字符

    我正在实施按字母顺序搜索 我们显示一个名称表 我只想突出显示那些名称以相应字母开头的字母 我被一个简单的问题难住了 如何读取 twig 中字符串 user name 的第一个字符 我尝试了多种策略 包括 0 操作 但它抛出异常 这是代码 f
  • Burn in WiX 3.6 如何将 MSI 文件捆绑到 .exe 中?

    我有兴趣了解 WiX 如何捆绑使用 Burn 创建的 EXE 文件 我知道创建一个自解压 EXE 文件非常简单 我已经完成了一百万次了WinRAR http en wikipedia org wiki WinRAR EXE 文件解压到哪个目
  • 使用 MemoryStream 创建 Open XML 电子表格时的 Excel 和“不可读内容”

    使用 Open XML SDK v2 0 创建 Excel 电子表格时 我们的 Excel 输出最初可以成功运行几个月 最近Excel 所有版本 开始抱怨 Excel在 zot xlsx 中发现不可读的内容 是否要恢复此工作簿的内容 我们正
  • 使用 React Native 的 FlatList 进行 Swiper

    我想让我的水平 FlatList 启用分页 向左或向右滚动 使内容始终位于屏幕中央 并且下一个和上一个内容仍然出现 Something like this for the horizontal actions But unfortunate
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 从 Angular-ui 引导日期选择器中删除周列和按钮

    我在用Angular UI Bootstrap 日期选择器 http angular ui github io bootstrap datepicker 现在我需要从日期选择器中删除 week 列和周按钮 我的应用程序的多种形式都使用了这个
  • 学习实体框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用全文搜索查找精确匹配

    使用 Sql Server 2008 如何使用全文搜索来实际找到精确的字符串匹配 我对此感到非常困难 而且我在网上找不到令人满意的解决方案 例如 如果我正在搜索字符串 Bojan Skrchevski 我希望第一个结果正是如此 到目前为止
  • 计算数字的二进制表示形式中 1 的数量的最佳方法。 (MIPS)

    我需要计算二进制数中 1 的数量 比如说 5 所以 00001001 将是 2 或 n 2 我正在使用 MIPS 最好的方法来做到这一点 最好的方法是count them 您可以检查是否设置了最低有效位 a1 by and用一个来代替它 如
  • 在 Firebase 中为 TextView Swift 保存字体和大小的方法是什么

    我想在 Firebase 中保存 Swift 中 TextView 的字体 大小和对齐方式 这样我就可以在另一个视图中调用它 我只能将颜色保存在 Firebase 中 这是显示我是如何做到的的代码 IBAction func SendBtn
  • 如何在发送邮件之前验证 smtp 凭据?

    我需要验证在中设置的用户名和密码SmtpClient发送邮件之前的实例 使用此代码 SmtpClient client new SmtpClient host client Credentials new NetworkCredential
  • 如何删除或更改默认帮助命令?

    如何删除或至少更改discord py 中默认帮助命令的格式 我认为改变格式会很好 我根本不喜欢这种格式 尝试这个 bot remove command help 在导入之后将其放在代码的顶部 然后创建你自己的 或者要格式化它 请检查一下
  • 升级到最新支持库后Android JACK编译器错误

    Android Studio 2 2 3 Windows 10 64位 构建工具版本 25 Android Gradle插件版本2 2 3 升级到最新的支持库 从 23 4 0 到 25 1 0 并更改编译版本 从 23 到 25 后 我收
  • Groupby 应用自定义函数 Pandas

    我正在尝试在 pandas 中应用类似于 dplyr 中的 groupby 和 mutate 功能的自定义函数 我想做的是给出这样的 pandas 数据框 df pd DataFrame category1 a a a b b b cate
  • 表已满(使用 MEMORY 引擎)

    我想将生产数据库传输到我的开发机器上进行测试 它有 6 张桌子MEMORY出于性能目的的引擎 I did mysqldump routines hxxx uxxx pxxx prod database gt prod dump sql 当我
  • 在Python中根据for循环中的字典键创建动态变量

    我有这个程序 dict1 x 1 y 10 20 for each in list dict1 keys exec each dict1 each exec x dict x exec y dict y print x print y 我真
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有