位图算法。

http://topic.youkuaiyun.com/u/20100424/15/621f263f-2a63-4a2a-85b6-5e6c1292848d.html

本意是在论坛里开了一个讨论找出两个数组中的相同元素的帖子, 学会了这个角位图算法的算法,不知道为啥叫这个名字,好像跟位图没点关系啊.该算法的核心步骤是将整型数组转换成一个二进制序列.如有素组:{2,3,200,7000,12000},则先申请一个二进制数组,其大小为可能出现的最大的元素的值.如下图:

  

 

然后将这个数组序列保存在二进制数组当中,如下图所示,第n位如果为1,则表示n存在于这个序列中:

 

 

发现用该算法可以很好的解决数组排序问题(前提是知道数组中的元素的最大值),下面一个问题就可以很好的用这个算法来解决:

1.题目描述:

输入:一个文件,里面大约有1千万行数据,每个数据是7位整数,同时每个数是唯一的,即不允许有2个数相同,这些整数不与其他任何数产生关联。

输出:将这个整数按升序排列,并生成到一文件中

限制:能够使用内存为1M,但是附存足够大,运行时间最多为几分钟,10s为最合适的时间。

 

算法:用含有1千万个位的字符串来表示这个文件,文件中有的数据则标识为1,没有则标识为0,最后从第一位读至最后一位,即为有序的集合。

 

参考文档:http://hi.baidu.com/yeetoo/blog/item/24ce5190e5013789a977a4b2.html/

             http://topic.youkuaiyun.com/u/20100424/15/621f263f-2a63-4a2a-85b6-5e6c1292848d.html

### 关于嵌入式系统中优先级位图算法的示例题目解释 #### 示例题目:实现一个简单的优先级调度器 在一个多任务处理环境中,假设存在多个进程,每个进程都有不同的优先级。为了有效地管理这些进程并确保高优先级的任务能够得到及时响应,可以采用优先级位图算法。 具体需求如下: - 进程数量不超过100个; - 每个进程有一个唯一的ID号(范围为`0~99`),以及对应的优先级值(整数形式表示); - 调度程序总是选取当前最高优先级的进程执行;如果有相同优先级,则按先进先出原则选择最先到达的那个; - 提供接口用于添加新的进程、移除指定ID的进程以及获取下一个要被执行的进程的信息。 #### Python代码实现 下面是一个基于上述描述构建的简单模拟例子: ```python class PriorityScheduler: def __init__(self, max_priority=100): self.max_priority = max_priority self.bitmap = [None] * (max_priority + 1) def add_process(self, pid, priority): if not 0 <= priority <= self.max_priority or pid is None: raise ValueError('Invalid input') # 插入到对应位置 if self.bitmap[priority]: self.bitmap[priority].append(pid) else: self.bitmap[priority] = [pid] def remove_process(self, pid): for i in range(len(self.bitmap)): if self.bitmap[i] and pid in self.bitmap[i]: self.bitmap[i].remove(pid) break def get_next_process(self): for i in reversed(range(len(self.bitmap))): if self.bitmap[i]: return {'priority': i, 'process_id': self.bitmap[i][0]} return None if __name__ == '__main__': scheduler = PriorityScheduler() # 添加几个测试用例 scheduler.add_process(1, 70) scheduler.add_process(2, 85) scheduler.add_process(3, 60) print(scheduler.get_next_process()) # 应该返回优先级最高的那个即{‘priority’: 85, ‘process_id’: 2} ``` 此段代码展示了如何利用列表作为底层数据结构来存储不同优先级下的进程集合,并实现了基本的功能函数[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值