Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在基于PHP的shop中需要算法实现和创建方面的建议_Php_Algorithm - Fatal编程技术网

在基于PHP的shop中需要算法实现和创建方面的建议

在基于PHP的shop中需要算法实现和创建方面的建议,php,algorithm,Php,Algorithm,几天来,我一直在努力处理我用PHP编写的在线商店中的算法实现。我不知道问题是仅仅是实现上的问题,还是算法设计上的问题。霍维尔,对我来说似乎很好。我只是没有检查它的复杂性,但这是个大问题 在对同一算法进行了长时间的讨论之后,我没有考虑实现问题,而是提出了使用二叉搜索树(bst),并将附加数据插入到由用户定义的信息组成的列表中(稍后讨论)。将显示整个订单列表,或使用inorder方法返回 我是这样写的: 如果输入对象日期大于当前对象日期,则向右移动 如果输入对象日期小于当前对象日期,则向左移动 如

几天来,我一直在努力处理我用PHP编写的在线商店中的算法实现。我不知道问题是仅仅是实现上的问题,还是算法设计上的问题。霍维尔,对我来说似乎很好。我只是没有检查它的复杂性,但这是个大问题

在对同一算法进行了长时间的讨论之后,我没有考虑实现问题,而是提出了使用二叉搜索树(bst),并将附加数据插入到由用户定义的信息组成的列表中(稍后讨论)。将显示整个订单列表,或使用inorder方法返回

我是这样写的:

  • 如果输入对象日期大于当前对象日期,则向右移动

  • 如果输入对象日期小于当前对象日期,则向左移动

  • 如果日期相同,就呆在原地

  • 如果该字段为空,请检查产品是否有库存

    • 如果安装到位并完成

    • 如果没有,什么也不做,退出

  • 如果字段已满

{检查列表中是否有此用户id

  • 如果是,则检查订单优先级

  • 如果没有,则什么也不做并退出

    • 检查是否有库存产品
  • 如果是,则更换记录并退出

  • 如果没有,则什么也不做并退出 }

{如果列表上没有用户id,请检查产品是否有库存

  • 如果是,则将元件放在末端

  • 如果没有,则什么也不做并退出

}

也许看起来有点糟糕,但我没能做缩进

数据在循环中传输到算法中,直到订单列表结束。名单上没有顺序

这是我的实现:

class BinaryTree {    
    private $predescor = array(
        'd'=>array('data'=>0),
        'p'=>null,
        'r'=>null,
        'l'=>null
    );

    private $ancestor = array(
        'd'=>array('data'=>0),
        'p'=>null,
        'r'=>null,
        'l'=>null
    );

    private $i = 0;

    public function insertIntoTree(&$root,$element)
    {
        $this->predescor = $root;
        $this->predescor;

        while($this->predescor)
        {
            if($element['d']['data']==$this->predescor['d']['data'])
            {
                $this->inertIntoList($element,$this->predescor['d']);
                return true;
            }

            $this->predescor = $this->predescor;
            if($element['d']['data']<$this->predescor['d']['data'])
            {
                $this->predescor = $this->predescor['l'];
            }
            else
            {
                $this->predescor = $this->predescor['r'];
            }
        }

        $element['p'] = $this->predescor;

        if(!$this->predescor)
        {
            $root = $element;
        }
        else if($element['d']['data']<$this->predescor['d']['data'])
        {
            $this->predescor['l'] = $element;
        }
        else
        {
            $this->predescor['r'] = $element;
        }

        return true;
    }    
    public function putList(&$list,$root)
    {
        if($root!=null)
        {
            $this->putList($list, $root['l']);
            $lista[$this->i] = $root;
            $this->i++;
            $this->putList($list, $root['r']);
        }
        return;
    }

    private function insertIntoList($element,&$position)
    {
        if($position == null)
        {
            $position = $element;
            return true;
        }

        foreach($position['user'] as &$key)
        {
            if($key == $element['d']['user'])
            {
                if($key['priority']<$element['d']['user']['priority'])
                {
                    return false;
                }
                else if($key['priority']==$element['d']['user']['priority'])
                {
                    return false;
                }
                else
                {
                    if(Orders::checkOrder($element['d']['user']['order']))
                    {
                        $key['order'] = $element['d']['user']['order'];
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
        }

        //@todo add at the end
        return true;
    }
}
类二进制树{
private$predescor=array(
'd'=>array('data'=>0),
'p'=>null,
'r'=>null,
'l'=>null
);
私有$祖先=数组(
'd'=>array('data'=>0),
'p'=>null,
'r'=>null,
'l'=>null
);
私人$i=0;
公共函数插入树(&$root,$element)
{
$this->predescor=$root;
$this->predescor;
而($this->predescor)
{
如果($element['d']['data']==$this->predescor['d']['data']))
{
$this->inertIntoList($element,$this->predescor['d']);
返回true;
}
$this->predescor=$this->predescor;
if($element['d']['data']predescor['d']['data']))
{
$this->predescor=$this->predescor['l'];
}
其他的
{
$this->predescor=$this->predescor['r'];
}
}
$element['p']=$this->predescor;
如果(!$this->predescor)
{
$root=$element;
}
else if($element['d']['data']predescor['d']['data']))
{
$this->predescor['l']=$element;
}
其他的
{
$this->predescor['r']=$element;
}
返回true;
}    
公共函数putList(&$list,$root)
{
如果($root!=null)
{
$this->putList($list,$root['l']);
$lista[$this->i]=$root;
$this->i++;
$this->putList($list,$root['r']);
}
返回;
}
私有函数插入列表($element,&$position)
{
如果($position==null)
{
$position=$element;
返回true;
}
foreach($position['user']as&$key)
{
如果($key==$element['d']['user'])
{
如果($key['priority'],我根本不会用php来编写这个代码

首先,我会将其构建到数据库中。(“订单”意味着一个数据库。)我会首先澄清几点。假设一个订单可以有多个行项目

  • 上次订单后的天数显然适用于订单, 不适用于个别产品
  • 用户“一次只能执行一个请求”。请求 什么?这对一个 订单或订单的行项目
  • 订单优先级显然适用于订单,而不是行 项目。但行项目优先级可能更有意义。(客户首先需要什么产品?)
  • 产品是否有库存似乎适用于行项目,而不是 从整体上来说
我首先要创建两个视图(不是因为最终需要两个视图,而是因为有些事情还不清楚)

一个视图与应用于订单的“排名”有关,它将计算或显示三件事

  • 自上次订单以来的天数
  • 这个订单是“一次执行一个请求”吗
  • 顺序优先
如果分配给这三件事的数字在比例上是一致的,你可以对这三列进行排序。但这不太可能。你可能需要对每个因素进行加权,可能需要乘以“加权”因子。对结果的计算应该可以让您将它们按有用的顺序排列。目前还不清楚计算最好是在视图中还是在存储过程中进行


另一种观点与某一行项目是否有库存有关。不清楚某一行项目缺货是否意味着整个订单不完整,或者某一行项目缺货是否会改变加权数的计算,该加权数与上述其他方法一起缩放。(你可以为每种方法提供一个很好的论证。)

tl;dr......一开始就把你的文章(尤其是你的第一篇)写得简短、切中要害,否则读起来就太长了…改了。我希望现在能写得简短些。如果你觉得合适的话,有什么问题吗?你想做什么?是的,但我有上帝