thinking in algorithm,O(n)到O(1)的实例(一)
2011-03-27 13:49
344 查看
需求:验证用户权限
O(n):
参数:所有权限用户对象组,用户ID
返回:true[有权限],false[没有权限]
伪代码:
function isPower(Power[] powers, int userId) {
for each power in powers {
if (userId == power.id)
return true;
}
return false;
}
O(1):
参数:所有权限用户ID组[经过了排序],用户ID
返回:true[有权限],false[没有权限]
伪代码:
Arrays.sort(powerIds); //进行排序
function isPower(int[] powerIds, int userId) {
if (Arrays.binarySearch(powersIds, userId) > -1)
return true;
return false;
}
技巧:
一、待查找的集合进行排序
二、采用O(1)查找算法
O(n):
参数:所有权限用户对象组,用户ID
返回:true[有权限],false[没有权限]
伪代码:
function isPower(Power[] powers, int userId) {
for each power in powers {
if (userId == power.id)
return true;
}
return false;
}
O(1):
参数:所有权限用户ID组[经过了排序],用户ID
返回:true[有权限],false[没有权限]
伪代码:
Arrays.sort(powerIds); //进行排序
function isPower(int[] powerIds, int userId) {
if (Arrays.binarySearch(powersIds, userId) > -1)
return true;
return false;
}
技巧:
一、待查找的集合进行排序
二、采用O(1)查找算法
相关文章推荐
- 《Thinking in Java》中利用Map测试Random类的随机性实例
- 《Thinking In Algorithm》15.堆结构之二项堆
- 《Thinking in Algorithm》12.详解十一种排序算法
- 《Thinking in Algorithm》12.详解十一种排序算法
- 《Thinking In Algorithm》09.彻底理解递归
- 《Thinking In Algorithm》14.由背包问题了解动态规划和贪心
- 《Thinking in Algorithm》12.详解十一种排序算法
- 《Thinking in Algorithm》12.详解十一种排序算法
- 《Thinking in Algorithm》12.详解十一种排序算法
- 《Thinking In Algorithm》03.数据结构之数组
- 《Thinking In Algorithm》11.堆结构之二叉堆
- 《Thinking In Algorithm》07.Red-Black Trees(红黑树)
- 《Thinking In Algorithm》09.彻底理解递归
- 《Thinking In Algorithm》13.详解动态规划问题
- 《Thinking In Algorithm》09.彻底理解递归
- 《Thinking In Algorithm》02.Stacks,Queues,Linked Lists
- 《Thinking In Algorithm》08.B-Tree
- 《Thinking in Algorithm》16.堆结构之斐波那契堆
- 《Thinking In Algorithm》13.详解动态规划问题
- 《Thinking in Algorithm》12.详解十一种排序算法