`
jackyhongvip
  • 浏览: 159617 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

位图法应用

 
阅读更多

     使用位图法判断整形数组是否存在重复。判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。

     位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上 1,如遇到5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在着重复。这种给新数组初始化时置零其后置一的做法类似于位图的处理方法故称位图法。它的运算次数最坏的情况为2N。如果已知数组的最大值即能事先给新数组定长的话效率还能提高一倍。


1-[位图问题]

给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中


2-[投票问题]

投票,甲得 M,乙得 N,票一张一张计,求计票过程中甲始终领先乙的概率(M>N)。

既无法一一枚举,故而简化之,以六票分甲四乙二为例。

甲票标为 A,乙票标为 B,枚举所有情况:AAAABB、AAABAB、AAABBA、AABAAB、AABABA、AABBAA、……不再枚举,因为从 AABBAA 开始,已经不能满足甲始终领先了。

做如下操作:从左往右遍历,做压栈处理,一旦栈顶处 A 与 B 相遇,则双双弹出栈,若遍历过程中栈终始不为空,则满足条件,否则,不满足条件。

如是操作之道理:相遇的 AB 互相抵消,对甲的领先没有任何影响。若遍历过程中栈内始终不为空,表示始终有未被抵销的票;由于甲乙交替领先权的一个必要条件就是计票过程中栈被清空,也即需要完全抵销对方的优势才可,故而又由于最终甲胜,栈内必然始终不得为空,留下的一定是甲票。

我们将上述枚举处理一下,抵消者以 X 代替,则有 AAXXXX、AAXXXX、AXXXXA、AXXAXX、AXXXXA、XXXXAA、……凡是第一个为 X 者,则表示栈被清空过,因此我们需要序列的第一项为 A。


换种思路:让序列的首尾相连成圈,然后在某一处切断它,形成一种序列。由于有 M + N 个结点,因此有 M + N 种断法。假设从圆外向圆内切,下刀的右侧为新序列起始点,左侧为末尾点。注意这里,会形成许多种圈,比如 AAXXXX、AXXAXX 就是两种圈,分别是两个 A 相连和不相连。但无论有多少种圈,只有从圆外向圆内切,切在 A 的左侧断链,才能保证新序列第一项为 A,由于圆内总共有 M - N 个 A,故每种圆都有 M - N 种切法。故而,概率为 (R*( M - N )) / (R*( M + N ))。R 为圆的种数,可将 R 上下消元,得最后结果为 ( M - N ) / ( M + N )


3-[室内布线问题]


装修房子是一项颇为复杂的工程,现在需要写一个程序帮助房主设计室内电线的布局。
  首先,墙壁上插座的位置是固定的。插座间需要有电线相连,而且要布置得整齐美观,即要求每条线都与至少一条墙边平行,且嵌入四壁或者地板(不能走屋顶)。
  房主想要知道,要将所有插座连通,自己需要买的电线最短长度是多少(取整数)?


1、每个房间都有门,电线不可以穿门而过。图中给出一个有4个插座的房间的电线布局。
2、输出时应注意,题目要求取整数,但不能四舍五入,必须向上取整,因为电线短一点就不能保证连通。
输入要求:
输入有若干测试数据组成
每组数据的第1行包含房间的长,宽,高和插座的个数N(N为一个不超过20的正整数)。
接下来的N行中,第i行给出第i个插座的位置坐标(xi,yi,zi);最后一行包含4个3元组(x1,y1,z1)…(x4,y4,z4),分别是长方形门框的4角的三维坐标。4个数字全部为0表示全部测试结束,不要对数据做任何处理。

注意:这里假设长方体形状的房间完全位于三维直角坐标系的第一象限内,而且有一个角落在原点上。地板位于x-y平面。题目数据保证,每个插座仅属于四面墙中的一面,门上没有插座。要求每段电线的两端必须仅与插座连接,电线之间不能互相交叉焊接。

输出要求:
对每一组测试,在一行里输出要将所有插座连通需要买的电线的最短整数长度。

输入例子:
10 10 10 4
0 1 3.3
2.5 0 2
5 0 0.8
5 10 1
0 0 0 0 0 3 1.5 0 0 1.5 0 3
0 0 0 0

输出例子
21

4-[找最大值及其下标]


已知:
a[0] = 0;
a[1] = 1;
...
...
a[2*i] = a[i];
a[2*i+1] = a[i] + a[i+1];
问题:
给定任意一个i(0 <i <2000000)
求a[0]到a[i]之间的最大值,以及其下标。

5-[线段求交]

线段求交问题
问题:写一段多线程代码,用来查找在三维空间内相交的线段对。线段的输入文件和输出结果文件将在命令行上指定。

输入格式:输入文件是一个文本文件,它的第一行将包含一个整数 N,表示文件内包含的线段数。后面的 N 行将包含线段的 4 个(可打印)字符名称和用来表示线段两个 (x,y,z) 端点的 6 个整数。其中的前 3 个数字是一个端点的坐标,后 3 个数字是另一个端点的坐标。求解此问题的程序只要能在 32 位平台上正确运行即可满足精度要求。

输出格式:使用某种人类可读的格式。列出所输入线段中的每一对相交线段。如果没有交点,则打印一条消息说明无交点。

输入文件示例:
===================
8
AAAA -6 1 3 -8 4 -4
BBBB 3 -9 0 -3 -1 6
CCCC -1 -7 2 -4 -8 -4
DDDD 0 0 0 -1 6 2
EEEE 0 3 8 5 3 -7
FFFF 3 6 4 -4 0 -2
GGGG 8 -1 0 7 9 0
HHHH 11 8 0 10 -4 -3
输出文件示例:
====================
Segments that intersect:
DDDD FFFF
计时:将使用总执行时间进行计分。

6-[电梯问题]

问题如下:
一座楼里没有楼梯,只有一架电梯,电梯一次最多只能乘3人,已知楼共有20层,每层有一个人,每个人都有1~20中唯一的编号,他们要去对应的楼层。
  电梯初始状态:在一楼。
  目标状态:每个人在相应楼层。
试编写一个算法,完成目标状态,而且使电梯移动最小距离。

我的思路:
尽可能让电梯满载运行,而且优先解决远处的需求.使得电梯的运行轨迹类似于一个作往复运动的弹簧由于阻尼最后停下来. 对于正态分布的情况, 电梯最后的状态应接近于中点. 理想情况是对于平均分布的输入集合,电梯的运行层数为每个人的(需行层数+3+3)/3,之所以要加两个3是因为电梯在最初运行和达到目标的时候分别有一段必须空载的距离(在初始状态,电梯至少要运行三层才能装满). 当然对于大量数据来说, 实际运行的効率应该趋近这个最优结果的渐近线.

分享到:
评论
1 楼 somefuture 2016-08-18  
第四题怎麼用位图法。写了半天没出来,用了下面的,速度很快
private static int seed = 2000000;

public static void main(String[] args) throws InterruptedException {
Random random = new Random();
int i = random.nextInt(seed);
System.err.println(i);
Thread.sleep(20);
int[] ints = new int[i];
int position = 0;
int start = 0;
for (int j = 0; j < i; j++) {
if (j < 2) {
ints[j] = j;
} else if (j >> 1 << 1 == j) {
ints[j] = ints[j >> 1];
} else {
ints[j] = ints[j >> 1] + ints[(j >> 1) + 1];
}
if (ints[j] > start) {
position = j;
start = ints[j];
}
}
System.err.println(position + ";;" + ints[position]);
}

相关推荐

    操作系统课程实习 位图法分配内存.

    位图法,又称为位示图法,其基本思想是使用一个二进制数组来表示内存的状态,即哪些内存块已经被分配,哪些仍然空闲。数组中的每一位对应内存中的一小块,通常称为内存块或页。如果位图中某一位为1,表示对应的内存...

    Java 位图法排序的使用方法

    在Java中,虽然标准库中的排序算法如`Collections.sort()`或`Arrays.sort()`通常不直接使用位图法,但我们可以自定义实现来理解和应用这个概念。 首先,我们来理解位图的基本原理。假设我们要排序的整数范围是0到N-...

    操作系统位示图法

    ### 操作系统位示图法 #### 知识点概览 1. **位示图的概念及作用** 2. **位示图的数据结构** 3. **位示图的实现细节** 4. **位示图在磁盘空间管理中的应用** 5. **实验环境配置** 6. **位示图算法实现步骤** #### ...

    设计测试用例-因果图法

    因果图法的应用可以分为五个步骤:分析待测得系统规格,找出原因与结果;画出因果图;标记约束或限制条件;把因果图转换为判定表;用判定表中的每一项生成测试用例。通过因果图法,可以生成多种测试用例,覆盖软件的...

    四版中图法

    5. Web版应用:随着互联网技术的发展,四版中图法的Web版应用应运而生。它提供了在线检索、远程访问等功能,使得用户无需依赖纸质版,随时随地可以查询和利用分类信息,极大地便利了图书馆工作和读者服务。 6. 兼容...

    平均周期图法 --谱估计

    该方法将信号分割成多个重叠或非重叠的段,分别对每段应用周期图法,并将所有段的结果求平均。这种做法可以显著降低谱估计的方差,提高谱估计的精度和稳定性。 ### MATLAB代码解析 在提供的MATLAB代码示例中,可以...

    小学三年级-矩形图法分析应用题详解.doc

    小学三年级-矩形图法分析应用题详解.doc

    模拟位示图法管理文件程序-MFC/C++-操作系统 源码

    位示图法是一种在操作系统中用于管理磁盘空间的有效方法,尤其适用于小文件系统的资源分配。这个MFC/C++源码项目就是模拟了这一过程,通过可视化设计帮助用户直观理解位示图法的工作原理。 首先,我们要理解位示图...

    周期图法_周期图法;功率谱_

    总之,周期图法和功率谱是理解复杂信号和噪声相互作用的强大工具,它们在各个领域都有广泛的应用,包括通信、地震学、生物医学工程和控制理论等。掌握这两种方法对于深入研究和解决实际问题至关重要。

    状态图法.doc

     状态迁移图法主要关注在测试状态转移的正确性上面。对于一个有限状态机,通过测试验证其在给定的条件内是否能够产生需要的状态变化,有没有不可达的状态和非法的状态,可能不可能产生非法的状态转移等。通过构造能...

    最全的中图法-TXT版本,很好用~

    中图法最初制定于1975年,经过多次修订和完善,已成为中国图书馆界应用最为广泛的分类法之一。 ### 中图法的结构 中图法的基本结构包括五大部类:马克思主义、列宁主义;哲学;社会科学;自然科学;综合性图书。每...

    204优序图法1

    优序图法的应用场景广泛,如项目管理、产品评估、服务质量和战略决策等。通过这种方法,决策者能够清晰地理解各个因素之间的相对重要性,并据此做出更加明智的决策。在实际操作中,还需要注意矩阵的构造应具有一定的...

    小学三年级矩形图法分析应用题详细讲解.doc

    小学三年级矩形图法分析应用题详细讲解.doc

    模拟实现用位示图法管理文件存储空间的分配与回收.doc.doc

    模拟实现用位示图法管理文件存储空间的分配与回收 本文档是关于操作系统原理课程设计的报告,主题是模拟实现用位示图法管理...同时,也为进一步研究和应用位示图算法在文件存储空间管理中的可能性提供了有价值的参考。

    中图法电子版(第四版)

    《中图法》全称是中国图书馆分类法,是中国最广泛使用的图书馆图书分类系统之一,尤其在中文图书领域具有重要地位。第四版是其发展过程中的一个重要里程碑,它为图书馆管理和图书检索提供了系统的分类依据,方便了...

    电子功用-改进的戴布拉图法在电能质量评估中的应用

    《电子功用-改进的戴布拉图法在电能质量评估中的应用》 本文主要探讨了在电能质量评估领域中,一种改进的戴布拉图法(Debruijn Diagram Method)的应用。电能质量是电力系统运行的重要指标,它直接影响到电力系统的...

    中图法-主题词查询系统

    在实际应用中,中图法主题词查询系统广泛应用于图书馆的图书编目、书目检索、图书推荐等多个环节,同时也服务于在线图书销售平台、学术研究机构等。通过这个系统,用户能够快速获取到图书的分类信息,无论是为了学术...

    周期图法_功率谱估计_matlab_随机信号处理_信号的功率谱_周期_

    总结来说,周期图法是随机信号处理中功率谱估计的一种方法,主要应用于MATLAB环境。通过理解和应用这些理论与工具,我们可以对信号进行深入的频域分析,揭示其内在的频率特性,这对于通信、雷达、声学、地震学等多个...

    一种基于可视图法的机器人全局路径规划算法

    综上所述,基于可视图法的移动机器人全局路径规划算法提供了一种有效解决路径规划问题的方法,尤其适用于需要高适应性和实时性的应用场景。通过合理利用可视图法的原理和实现步骤,机器人可以在复杂多变的环境中自主...

Global site tag (gtag.js) - Google Analytics