标签:代码 int 建立 bin ice query name env utf-8
题目地址 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 程序的 几十倍。详情如下表所示
标签:代码 int 建立 bin ice query name env utf-8
原文地址:http://www.cnblogs.com/tmortred/p/7903403.html