码迷,mamicode.com
首页 > 其他好文 > 详细

3321 性能分析

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

标签:代码   int   建立   bin   ice   query   name   env   utf-8   

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 性能分析

标签:代码   int   建立   bin   ice   query   name   env   utf-8   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!