java - 映射连接的算法

标签 java algorithm

我认为这可能以前已经解决了,如果我有适当的数学词汇,我可能只需谷歌一下。我正在编写一个为像 Arduino 这样的微 Controller 生成代码的应用程序,这个过程的一部分是将传感器等设备所需的连接映射到微 Controller 本身。

问题是不是微 Controller 上的所有连接都具有同等能力,有些只能做数字IO,有些可以做数字IO +模拟输出,有些可以做数字IO +模拟输入,有些可以同时做数字和模拟模拟输入输出。因此,例如,如果我用完纯数字 IO 连接并需要更多连接,我仍然可以使用例如数字 IO + 模拟输入引脚。但如果那是唯一的数字 IO + 模拟引脚,然后我实际上需要另一个连接的功能,那么我需要将它移动到不同类型的引脚。

所以基本上我需要一种算法,如果可能的话,它可以创建这种映射。这个问题有点像 child 游戏,有形状的积木和相应的洞,有些形状可以放入多个洞,有些则不能,你能想出是否可以将所有给定的积木都放入洞中吗?

最佳答案

好吧,它并没有我想象的那么糟糕,我自己解决了它。

所以我们有四类功能(DIO+AIO、DIO+AI、DIO+AO、DIO only)

1) 为功能最强大的引脚 (DIO+AIO) 分配任何请求的连接,如果不够用,它将无法工作

2) 将尽可能多的请求连接分配给仅提供所需功能的引脚,最终会出现 3 组溢出。 (第4次溢出失败。)

3)AI 连接不能使用 AO 引脚,反之亦然,所以此时它们都在争夺空闲的 AIO 引脚,如果溢出的 AI 和 AO 连接比可用的 AIO 引脚多,则失败,否则分配溢出的 AI & AO 连接到 AIO 引脚。

4) 将任何溢出的数字连接分配给空闲的 AI 和 AO 引脚,如果没有足够的则失败。

5) 如果你到了这里,你应该有连贯的连接图!

关于java - 映射连接的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489460/

相关文章:

algorithm - 实现 Velicer 的 MAP 标准

c++ - 用更少的内存在 C++ 中实现二维数组

algorithm - Haskell 中的无限/惰性水库采样

java - 示例案例的建议锁

java - 从索引优先级队列中删除 (java)

java - android - SimpleDateFormat 以奇怪的方式解析数据。错误的月份或/和年份

algorithm - 30,000 个数据点,找出 2 周时间内的最大变化

c++ - 大文件中的 C++ 文件读取错误

java - 如何在 ANTLR3 tree-parser @init 操作中获取行号

java - web.xml 中的 taglib 配置