算法的一些条件思考?

一直在写代码学习,写代码学习,……………..

直到10年后的有一天,才真正意义上的思考算法、速度大O、效率等的问题。

当遇到任何的一个需求时,考虑算法,我的脑子里总会有如下这些算法思想或者说要准备的条件,也或者说依据等等值得考虑的内容。

问题:抽象考虑,解决问题,函数,类等。

0,分析这个数据是什么结构(内存,数组,数据表例如线性表之类等)

  内存 0 1 2 3 4 5 6 7 8

  顺序 0 1 2 3 4 5 6 7 8

  线性表 a1 a2 a3 a4 a5 a6 a7 a8 a9

1,数据的结构是什么?

2,是循环,还是判断来解决。

3,是比较吗?

4,什么样的算法效率更高。O(n) 或 O(log n)

5,基点或者说开始,我还会考虑数据结构的结束。(开始也或者说基准)

6,要不重新组装数据结构。

7,返回的结果是什么

8,是函数,是类,还是api的调用

9,是自已写,还是拿来用,百度找

10,排序啊,递归啊,快排啊,考虑散列表啊,广度优先搜索,狄克斯特拉算法,贪婪算法,动态的规划,K最近等等。

最后的学习还是回归数据的本身结构和有趣的数据算法。

<?php 
/**
* 数据算法,之二分查找
* 要求是数据为索引,查找从索引中间位置进行二分查询查找。
* @ arr $list 数组
* @ string $item 数值
* @ 开源达人 2023-8-20
*/ 
function bs($list,$item){
    $low = 0;   //数组索引从0 索引开始的位置
    $high = count($list)-1; // 索引最后的位置
    
    while($low <= $high){
        $mid = ($low + $high) / 2; //二分查找 从数据的中间索引进行
        $guess = $list[$mid];  //中间索引的数值

        if($guess == $item){ // 如果这个索的 数值 等于 查找的值
            return $mid; //返回 索引
        }
        if($guess > $item){ //如果 索引的数值 大于 查找的值
            return $mid - 1;   //返回 索引值 减去 1
        }else{
            $low = $mid -1; //开始的索引 减去 1
        }
    }
    return null; //返回 空
}

$mylist = [1,3,4,5,6,7,9];
echo count($mylist);
echo "///////////";
echo bs($mylist,3);

发表评论