首页 > 其他 > 详细

3321 性能分析

时间:2017-11-27 12:37:50      阅读:265      评论:0      收藏:0      [点我收藏+]

Intro

题目地址 http://poj.org/problem?id=3321, 我的遍历算法提交上去居然 TLE 了。poj 网站也没有告诉我用了多少秒,这样我就没办法知道我和别人的差距。也找不到测试数据集来自测,只好写个 python 程序来生成测试数据集。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Queue
import random  

"""
print 3
print "1 2"
print "1 3"
print "3" 
print "Q 1"
print "C 2"
print "Q 1"
"""


MAX_FORK = 100000
MAX_QUERY = 100000



def build_balanced_fork():
    # 这样建的树是 平衡树
    q = Queue.Queue()  
    q.put(1)
    fork_num = 0
    min_b = 2
    
    while fork_num < MAX_FORK:
        s = q.get()
        print "%d %d\n%d %d" % (s, min_b, s, min_b+1)
        fork_num += 2
        q.put(min_b)
        q.put(min_b+1)
        min_b = min_b + 2 

        
def build_unbalanced_fork():
    q = Queue.Queue()  
    q.put(1)
    fork_num = 0
    min_b = 2
    
    while fork_num < MAX_FORK:
        s = q.get()
        if q.qsize() and random.choice([True, False]):
            continue
        print "%d %d\n%d %d" % (s, min_b, s, min_b+1)
        fork_num += 2
        q.put(min_b)
        q.put(min_b+1)
        min_b = min_b + 2 

        
        
def build_query():

    for i in range(0, MAX_QUERY):
        operation = random.choice([‘C‘, ‘Q‘])
        number = random.randint(1, MAX_QUERY)
        print "%s %d" % (operation, number)


if __name__ == ‘__main__‘:
    print MAX_FORK+1
    build_unbalanced_fork()
    print MAX_QUERY
    build_query()

这里的 markdown 编辑器没有预览功能,好难用啊!

一开始, 我只实现了 build_balanced_fork, build_query 两个函数。 build_balanced_fork 函数建立的是个平衡树。 在平衡树树上, 我的遍历修改查询程序和采用树状数组的程序(用的是 hzwer 的代码 http://hzwer.com/8114.html )所花费时间差不多。
用 build_unbalanced_fork 建非平衡树测试集。在非平衡树上,我的程序所用的时间是 hzwer 程序的 几十倍。详情如下表所示

3321 性能分析

原文:http://www.cnblogs.com/tmortred/p/7903403.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!