创建索引顺序表

hi_coding 2014-12-02 08:17:59
我不知道是不是我理解的有问题,百度的,我找到的所有人提到分块查找这个问题时,都避开了如何创建索引顺序表这个问题。
如果是给了一堆乱序的数。1 4 6 9 10 3 2 15 7 8......每五个分一块,每个组找到最大值,要保证第一组的任何元素都要比第二组小。那不就应该要对第一二组的数据进行一些互换?如果还要互换的话,,直接排好序效率岂不是更高?还是说只是创建的时候麻烦一点,建立索引表是为了查找时更加便捷?不知道我哪里理解错了,到底要如何建立索引顺序表?求大神指教。
...全文
339 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-12-05
  • 打赏
  • 举报
回复
数据取值范围、数据个数的量级,都是预先给定的,任何算法实现时都必须要有的前提条件。
分块算法是为了处理超大的数据量,不可能用内存存放数据,通常输入是文件、分块也是文件。
内存中只有索引。
Tiger_Zhao 2014-12-05
  • 打赏
  • 举报
回复
不用担心。
除了算法大赛,实际业务不需要自己写算法。
如果有现成的类库、数据库不用非得自己写,绝对是有钱没处花!
hi_coding 2014-12-05
  • 打赏
  • 举报
回复
引用 12 楼 Tiger_Zhao 的回复:
数据取值范围、数据个数的量级,都是预先给定的,任何算法实现时都必须要有的前提条件。 分块算法是为了处理超大的数据量,不可能用内存存放数据,通常输入是文件、分块也是文件。 内存中只有索引。
哦哦,貌似懂了一点,没做过大工程嘿嘿,所以感觉不到那么做的效率上的优势。总觉得几十个数在创建时那么复杂的忙活太不值了。现在总算感受到了一些。多谢大神指点。谢谢啦。
hi_coding 2014-12-05
  • 打赏
  • 举报
回复
引用 12 楼 Tiger_Zhao 的回复:
数据取值范围、数据个数的量级,都是预先给定的,任何算法实现时都必须要有的前提条件。 分块算法是为了处理超大的数据量,不可能用内存存放数据,通常输入是文件、分块也是文件。 内存中只有索引。
哦哦,貌似懂了一点,没做过大工程嘿嘿,所以感觉不到那么做的效率上的优势。总觉得几十个数在创建时那么复杂的忙活太不值了。现在总算感受到了一些。多谢大神指点。谢谢啦。
hi_coding 2014-12-04
  • 打赏
  • 举报
回复
引用 10 楼 Tiger_Zhao 的回复:
按区段分块,第1段最大值、第2段最大值、第3段最大值自然有序的啊。
额额,我表达的有问题,不好意思。我想我应该不清楚的就是分块的过程。 一串乱序的数,是不是先给定范围,然后把数据一个个分类放到它该在的地方,像第一个分块范围是1-5,所以有3,2这样的就放到第一个块,如此就建立了{1,4,3,2}{6,9,10,7,9}{15}这样的主表,而这段分好块的数据,应该是重新开辟一段空间存储吧,然后以什么存储方式存储?是一个链表存储4,10,15,然后每一个结点还有一个指针指向对应的块内数据么。我是渣渣,求大神指点。
Tiger_Zhao 2014-12-04
  • 打赏
  • 举报
回复
我#1的 4,10,15 难道不是索引?
Tiger_Zhao 2014-12-04
  • 打赏
  • 举报
回复
按区段分块,第1段最大值、第2段最大值、第3段最大值自然有序的啊。
Tiger_Zhao 2014-12-04
  • 打赏
  • 举报
回复
按区段分块,第1段最大值、第2段最大值、第3段最大值自然有序的啊。
Tiger_Zhao 2014-12-04
  • 打赏
  • 举报
回复
按区段分块,第1段最大值、第2段最大值、第3段最大值自然有序的啊。
hi_coding 2014-12-04
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
我#1的 4,10,15 难道不是索引?
是,就是想问程序该如何实现,得到这样的分组,您看你分组的时候,就已经将小数分到前面,大数分到后面了。实现的话,怎样高效的实现这样的分组?
hi_coding 2014-12-04
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
我#1的 4,10,15 难道不是索引?
是,就是想问程序该如何实现,得到这样的分组,您看你分组的时候,就已经将小数分到前面,大数分到后面了。实现的话,怎样高效的实现这样的分组?
hi_coding 2014-12-04
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
我#1的 4,10,15 难道不是索引?
是,就是想问程序该如何实现,得到这样的分组,您看你分组的时候,就已经将小数分到前面,大数分到后面了。实现的话,怎样高效的实现这样的分组?
Tiger_Zhao 2014-12-03
  • 打赏
  • 举报
回复
实际不会是平均分块的,很可能是按范围分块的。 比如你举例的10个数,按区段 [1,5]、[6,10]、[11,15]的范围来分块,得到(前面是最大值): 4->{1,4,3,2} 10->{6,9,10,7,9} 15->{15} 这适用于非常大的数据流(比如大文件)的处理,数据部分无论是分块前、分块、查找都是顺序操作,不像排序会受到内存的限制。
熊熊大叔 2014-12-03
  • 打赏
  • 举报
回复
一种查找算法要综合考虑2个因素: 1. 查找时的开销。 2. 当数据修改的时候,维护数据结构的开销。 现在来比较下二分查找和分块查找(假设一共N个数据,每个块M个数据) 1. 在查找时,二分查找可以直接通过二分法找到数据,性能O(logN);分块查找通过二分法找到块,再在块内部顺序查找,性能O(log(N/M)+M). 一般二分查找占优 2. 在修改数据时,以插入一个数据为例。二分查找要保持数据的有序性,插入一个数据,后面的数据都要移位,平均性能O(N/2); 分块查找块内不用保证有序性,每个块只改动一个数据即可,性能O(N/M) 分块查找占优。 分块查找初始化时可以用排序,但后面数据变化时就不用排序那么大开销了。在数据变化比较频繁,尤其数据量大要放在外部存储时,就有了优势。
hi_coding 2014-12-03
  • 打赏
  • 举报
回复
嗯。。。,谢谢楼上两位大神的解答,我主要还是想问一下怎么创建索引顺序表

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧