免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: cxytz01
打印 上一主题 下一主题

[算法] 求一取最大值得算法!!常见排序算法不要。 [复制链接]

论坛徽章:
7
天蝎座
日期:2013-09-28 10:45:42双子座
日期:2013-10-16 16:27:09射手座
日期:2013-10-23 10:21:32处女座
日期:2014-09-17 16:44:332015年亚洲杯之巴林
日期:2015-04-09 17:28:01冥斗士
日期:2015-11-26 16:19:0015-16赛季CBA联赛之山东
日期:2018-03-02 23:59:31
11 [报告]
发表于 2013-01-10 10:53 |只看该作者
本帖最后由 cxytz01 于 2013-01-10 10:55 编辑

后期数组可能会增大,不仅限于1024,而是上万。

而且比较函数是放在for( ; ;   )中的。

想看看有什么时间复杂度低的算法。

linux_c_py_php 发表于 2013-01-09 19:20
排序干嘛... 扫一遍不就知道了?

论坛徽章:
7
天蝎座
日期:2013-09-28 10:45:42双子座
日期:2013-10-16 16:27:09射手座
日期:2013-10-23 10:21:32处女座
日期:2014-09-17 16:44:332015年亚洲杯之巴林
日期:2015-04-09 17:28:01冥斗士
日期:2015-11-26 16:19:0015-16赛季CBA联赛之山东
日期:2018-03-02 23:59:31
12 [报告]
发表于 2013-01-10 10:58 |只看该作者
本帖最后由 cxytz01 于 2013-01-10 10:59 编辑

如果是遍历一遍就简单了,

但问题是是无限遍历

for(;  ; ) {

  某些操作使某个数组元素值变化

  取最大值...     数组目前是1024个元素,后期会扩展成1万个 以上。
   
  使用最大值



}


嗯,和排序无关,我想错了。

ahui886 发表于 2013-01-10 10:50
求个最大值,遍历一遍不就出来了?跟排序有啥关系呢?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
13 [报告]
发表于 2013-01-10 11:03 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
14 [报告]
发表于 2013-01-10 11:03 |只看该作者
回复 12# cxytz01


一楼说永远是1024,现在又说后期可能上万,,,,到底闹哪般?

请把需求一次性描述清楚,包括数组内容,比如:数字?字符串?用于比较大小的函数?

这样才可以分析你对数组的存取方式,比如哈希之类的,要提供需求的完整描述,然后

同时思考设计合理的存和取的方式,然后才能有明确答案

论坛徽章:
1
双子座
日期:2013-11-14 17:43:24
15 [报告]
发表于 2013-01-10 11:06 |只看该作者
使用大顶堆的算法,对现有的数组进行建堆操作。这样取最大值的就是O(1)操作。

基本的逻辑代码:

(以1024个元素为例子)
  1. your_function_impl(.............)
  2. {
  3.     int number[1024];
  4.    
  5.     create_max_heap( number,1024 )
  6.    
  7.     for(;;)
  8.    {
  9.         if ( number中某个元素改动 )
  10.              adjust_max_heap( number,1024 )
  11.         
  12.          max_value = number[0];
  13.          
  14.          execute other tasks.
  15.     }
  16. }
复制代码

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
16 [报告]
发表于 2013-01-10 11:10 |只看该作者
回复 12# cxytz01


另外,最快的取一最大值算法,我觉得应该单独设立一变量保存最大值的下标,比如:

static int MAX_VAL_ADDR = -1;

做insert(element)操作的时候

xx  insert(element)
{
    ...
    if(-1 == MAX_VAL_ADDR)
    {
        MAX_VAL_ADDR = insert_addr;
    }
    else
    {
        if(element > val_array[MAX_VAL_ADDR])
        {
            MAX_VAL_ADDR = insert_addr;
        }
    }
}

int get_max_val_addr()
{
    return MAX_VAL_ADDR;
}
这样在取的时候复杂度O(1)

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
17 [报告]
发表于 2013-01-10 11:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
18 [报告]
发表于 2013-01-10 11:12 |只看该作者
回复 16# cokeboL


    不过要看你支持不支持delete操作,否则delete时候还是要考虑

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
19 [报告]
发表于 2013-01-10 11:14 |只看该作者
cxytz01 发表于 2013-01-10 10:51
是啊,很难。你搞出个给我看看。

不要告诉下面的代码


自己需求都不说清楚,还这种口气,懒得给你方法了

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
20 [报告]
发表于 2013-01-10 11:14 |只看该作者
回复 17# pmerofc


楼主都能数数上万了, 记得俺幼儿园第一堂数学课作业就是数数,而且只要数到一百,第二天

老师让挨个同学背诵1-100,好怀念~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP