数据库的二分法查找

先创建函数
create function F(@y float,@c float,@f float,@pv float,@m float,@n int,@d float)
returns float
as
begin
declare @i int
declare @ret float
set @i=0
set @ret=0
while @i<@n
begin
  set @ret=@ret+(@c/@f)*Power(@f/(@f+@y),@d/365*@f+@i)
  set @i=@i+1
end
set @ret=@ret+@m*Power(@f/(@f+@y),@d/365*@f+@n-1)-@pv
return @ret
end
接着再用二分法计算,下面的过程可以写成存储过程,数据的输入你可以从表中读取,如果一次要计算表中多行数据,就用游标
declare @c float,@f float,@pv float,@m float,@n int,@d float
declare @yh float,@yl float,@fm float,@e float,@fh float,@fl float
/*赋值略
set @c=?
set @f=?
……*/
set @fh=dbo.F(@yh)
set @fl=dbo.F(@yl)
if @fh*@fl>=0 select '数据错误'
else begin
while abs(@yh-@yl)>@e
begin
  set @fm=dbo.F((@yh+@yl)/2)
  if @fm=0 break
  if @fm*@fh<0
  begin
    set @yl=(@yh+@yl)/2
    set @fl=@fm
  end
  else
  if @fm*@fl<0  
  begin
    set @yh=(@yh+@yl)/2
    set @fh=@fm
  end
end
select (@yh+@yl)/2
end

转载于:https://www.cnblogs.com/tony-net/archive/2009/06/26/1511838.html

二分法查找算法,也称为折半查找,是一种在有序数组中查找特定元素的搜索算法。它的需求分析主要包括以下几个步骤: 1. **问题理解**: - 确定问题背景:二分法适用于已排序的数据集合,如整数数组,因为算法依赖于数据的有序性。 - 定义问题范围:查找给定数组中的一个特定元素,该元素可能存在也可能不存在。 2. **用户场景**: - 用户可能是一个程序开发者,需要高效地在大量数据中定位目标值。 - 用户可能是数据库查询,要求快速定位记录。 3. **功能需求**: - 输入:已排序的数组(列表)和要查找的目标值。 - 输出:目标值在数组中的索引,如果找到;-1表示未找到(对于数组的搜索)。 - 时间复杂度:理想情况下,二分查找的时间复杂度为O(log n),n为数组长度。 4. **性能需求**: - 快速查找:尽可能减少比较次数,提高查找效率。 - 稳定性:算法应保证在数组元素相等时返回相同的索引结果(稳定性不是二分查找的要求,但可以作为一个附加优点提及)。 5. **边界条件和异常处理**: - 空数组或数组长度为1的情况。 - 目标值不在数组范围内的处理。 6. **接口设计**: - 如果作为函数实现,可能需要定义函数签名,例如`int binarySearch(int array[], int target, int left, int right)`。 7. **可扩展性和维护性**: - 应能够适应不同类型的排序数组,如整数、浮点数或自定义对象。 - 代码应该清晰易懂,便于未来修改或优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值