色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

遞歸算法實(shí)踐--到倉(cāng)合單助力京東物流提效增收

京東云 ? 來(lái)源:京東物流 李碩 ? 作者:京東物流 李碩 ? 2025-01-09 14:57 ? 次閱讀

作者:京東物流 李碩

一、背景

京東物流到倉(cāng)業(yè)務(wù)「對(duì)商家」為了減少商家按照京東采購(gòu)單分貨備貨過(guò)程,對(duì)齊行業(yè)直接按照流向交接,提升商家滿意度;「對(duì)京東」攬收操作APP提效;到倉(cāng)合單功能應(yīng)運(yùn)而生;

二、問(wèn)題

一次批量采購(gòu)單(一次50或者100個(gè)采購(gòu)單)需要根據(jù)不同的規(guī)則合并成多個(gè)訂單;

每一個(gè)采購(gòu)單可以是不同的來(lái)源類(lèi)型(自營(yíng)和非自營(yíng))、不同的收貨類(lèi)型,每一個(gè)采購(gòu)單會(huì)有多個(gè)SKU,同一個(gè)SKU只有一個(gè)等級(jí),一批采購(gòu)單會(huì)有多個(gè)SKU,同一個(gè)SKU會(huì)有多個(gè)等級(jí);

合單規(guī)則:

1.自營(yíng)和非自營(yíng)不能合;

2.實(shí)物收貨和單據(jù)收貨的采購(gòu)單不能合并;

3.相同收獲倉(cāng)和配送中心的采購(gòu)單可以合并;

4.兩個(gè)采購(gòu)單如果合并之后同一個(gè)SKU擁有多個(gè)等級(jí),則不可以合單;

三、打法

A、思路

1.首先認(rèn)為這一批單子可以合單,后續(xù)就是根據(jù)合單規(guī)則將不符合規(guī)則轉(zhuǎn)換成拆單的過(guò)程;

2.根據(jù)合單規(guī)則1、2、3可以將這一批單子拆成多個(gè)需要執(zhí)行規(guī)則4的待合單集合List;

3.舉個(gè)極端例子,規(guī)則1、2、3這些采購(gòu)單都是相同的,則該List數(shù)量為1,這100個(gè)單子進(jìn)行后續(xù)根據(jù)SKU+等級(jí)維度的合單;

4.由于相同SKU不同等級(jí)不可以合單,我們可以先找出這100個(gè)采購(gòu)單中包含最多等級(jí)的SKU,比如skuA 包含最多的7個(gè)等級(jí), 根據(jù)skuA進(jìn)行按等級(jí)進(jìn)行分堆,分成7堆之后,由于并不是所有的采購(gòu)單都包含skuA, 則這100個(gè)采購(gòu)單可能還會(huì)剩下一些單子不在這7堆之內(nèi),也就是剩下的這些單子如果只是基于skuA維度進(jìn)行分堆,可以跟這7堆任何一堆進(jìn)行合單,這時(shí)候需要將這些剩下的單子分別加入到這7堆里面,得到第一次合單后的結(jié)果,這里很重要,也是納入遞歸算法的基礎(chǔ);

5.得到的7堆再分別進(jìn)行第四步的操作,直到當(dāng)前這一堆的sku不包含不同等級(jí)為止(這里是遞歸結(jié)束的條件);

6.由于分堆里面包含了重復(fù)的訂單,所以有些單子組合會(huì)被重復(fù)計(jì)算,這時(shí)候需要維護(hù)一個(gè)列表將計(jì)算過(guò)的單據(jù)進(jìn)行保存,這樣可以將重復(fù)的列表進(jìn)行剪枝,這樣可以保證整個(gè)算法的時(shí)間復(fù)雜度不是指數(shù)級(jí)增長(zhǎng);

7.針對(duì)最終全部遞歸之后的結(jié)果將合單的列表進(jìn)行由多到少進(jìn)行排序,然后進(jìn)行排重,這里如果排重之后只有一個(gè)采購(gòu)單了可以先釋放,但不要加到排重列表里面,因?yàn)楹竺婵赡苓€會(huì)出現(xiàn)可合并的集合,很重要,不然得到的合單結(jié)果會(huì)變少,得到最終的合單后的結(jié)果;

B、算法

??遞歸算法是一種通過(guò)重復(fù)將問(wèn)題分解為同類(lèi)的子問(wèn)題來(lái)解決問(wèn)題的方法?; 特點(diǎn)是函數(shù)或子程序在運(yùn)行過(guò)程中直接或間接調(diào)用自身;常見(jiàn)的遞歸算法包括?Fibonacci函數(shù)、?Hanoi問(wèn)題和?階乘計(jì)算等;

C、解決方案

1. 遞歸代碼塊

/**
 * 指定不同等級(jí)不能合單
 *
 * @param poNoSet       采購(gòu)單號(hào)Set
 * @param poMainInfoMap 采購(gòu)單詳情
 * @param calculatedSet 計(jì)算過(guò)的采購(gòu)單據(jù)列表的集合
 * @return
 */
private List> doMergeClassDifferent(Set poNoSet, Map poMainInfoMap, Set calculatedSet) {
    // 如果該set已經(jīng)計(jì)算過(guò)則不重復(fù)計(jì)算
    List> resultList = new ArrayList();
    String calculatedPoNoKey = buildCalculatedPoNoKey(poNoSet);
    if (calculatedSet.contains(calculatedPoNoKey)) {
        return resultList;
    } else {
        calculatedSet.add(calculatedPoNoKey);
        resultValue.incrementAndGet();
    }

    // 以sku為key的集合
    Set skuSet = new HashSet();
    // 以sku 為key, 值為poNos
    Map> skuMap = new HashMap();
    // 存放同一個(gè)sku下有多少個(gè)不同等級(jí)的集合
    Map> skuToskuLevelMap = new HashMap();

    // 以sku+level 為key的集合
    Set skuLevelSet = new HashSet();
    // 以sku+level 為key, 值為poNos
    Map> skuLevelMap = new HashMap();

    for (String poNo : poNoSet) {
        PoOrderFacadeResponse.PoMainInfo poMainInfo = poMainInfoMap.get(poNo);
        // 采購(gòu)單條目
        List poItemInfos = poMainInfo.getPoItemInfos();
        for (PoOrderFacadeResponse.PoItemInfo poItemInfo : poItemInfos) {

            String skuKey = poItemInfo.getGoodsNo();
            String skuLevelKey = buildSkuLevelKey(poItemInfo);
            skuSet.add(skuKey);
            setKeyMap(skuKey, skuMap, poNo);
            // 存放同一個(gè)sku下有多少個(gè)不同等級(jí)的集合
            Set stringSet = skuToskuLevelMap.get(skuKey);
            if (CollectionUtils.isEmpty(stringSet)) {
                stringSet = new HashSet();
                skuToskuLevelMap.put(skuKey, stringSet);
            }
            stringSet.add(skuLevelKey);
            skuLevelSet.add(skuLevelKey);
            setKeyMap(skuLevelKey, skuLevelMap, poNo);
        }
    }

    if (skuSet.size() == skuLevelSet.size()) {
        // 此處sku的數(shù)量和sku+level的數(shù)量相同,不需要再進(jìn)行遞歸運(yùn)算
        // 方法結(jié)束的出口
        resultList.add(poNoSet);
        return resultList;
    } else {
        // 同一個(gè)sku下最多等級(jí)個(gè)數(shù)
        int high = MagicCommonConstants.NUM_1;
        // 最多等級(jí)個(gè)數(shù)的對(duì)應(yīng)sku
        String maxLevelSku = "";
        for (String sku : skuToskuLevelMap.keySet()) {
            Set strings = skuToskuLevelMap.get(sku);
            if (strings.size() > high) {
                high = strings.size();
                maxLevelSku = sku;
            }
        }
        if (high > MagicCommonConstants.NUM_1) {
            // 獲取該sku下的poNos
            Set strings = skuMap.get(maxLevelSku);
            // 差集
            Set chaJiSet = poNoSet;
            chaJiSet.removeAll(strings);

            Set skuLevels = skuToskuLevelMap.get(maxLevelSku);
            for (String skuLevel : skuLevels) {
                Set poNoTempSet = skuLevelMap.get(skuLevel);
                poNoTempSet.addAll(chaJiSet);
                // 遞歸計(jì)算
                List> clist = doMergeClassDifferent(poNoTempSet, poMainInfoMap, calculatedSet);
                if (CollectionUtils.isNotEmpty(clist)) {
                    resultList.addAll(clist);
                }
            }
        }
    }

    return resultList;
}

2. 去重代碼塊

/**
 * 去重 合單之后的采購(gòu)單號(hào)
 *
 * @param sets
 * @param dooModel
 */
private List> uniqueRepeatPoNo(List> sets, DooModel dooModel) {
    sets.sort(new Comparator>() {
        @Override
        public int compare(Set o1, Set o2) {
            return o2.size() - o1.size();
        }
    });

    List> resultList = new ArrayList();
    Set allMergedSet = new HashSet();

    Set allSet = new HashSet();
    for (Set set : sets) {
        Set tempSet = new HashSet();
        for (String poNo : set) {
            if (!allSet.contains(poNo)) {
                tempSet.add(poNo);
                allMergedSet.add(poNo);
            }
        }
        if (!tempSet.isEmpty()) {
            if (tempSet.size() > 1) {
                allSet.addAll(tempSet);
                resultList.add(tempSet);
            }
            // 此處的單條后面不一定不能合單
        }
    }

    // 差集
    allMergedSet.removeAll(allSet);
    if (allMergedSet.size() > 0) {
        for (String poNo: allMergedSet) {
            putPoNoToSet(dooModel, poNo);
        }
    }
    return resultList;
}

四、價(jià)值

目前上線之后剛推廣,功能上線45天,已經(jīng)在浙江、 河南、上海、江蘇、安徽、天津、四川、北京22個(gè)客戶使用,增收500萬(wàn)整體運(yùn)營(yíng)平穩(wěn),且在大促期間合單收貨功能優(yōu)勢(shì)更加凸顯:「對(duì)商家」減少商家按照京東采購(gòu)單分貨備貨過(guò)程,對(duì)齊行業(yè)直接按照流向交接,商家滿意度提升。「對(duì)京東」 攬收操作APP提效30%,分貨、入庫(kù)交倉(cāng)效率提升10%,整體TC轉(zhuǎn)運(yùn)效率更快;

五、總結(jié)

難點(diǎn):將根據(jù)SKU分堆之后剩下的采購(gòu)單分別加到不同的分堆中,這個(gè)方案也是思考了好久之后想到的,然后構(gòu)造成遞歸進(jìn)行計(jì)算,最終進(jìn)行去重;

性能:遞歸算法中大部分計(jì)算都是重復(fù)的,但是經(jīng)過(guò)記錄中間計(jì)算結(jié)果,將計(jì)算過(guò)的采購(gòu)單集合直接剪枝,計(jì)算時(shí)間就不會(huì)隨著采購(gòu)單的數(shù)量增長(zhǎng)而指數(shù)增長(zhǎng),真實(shí)情況也是隨著單據(jù)數(shù)量的增加、SKU和等級(jí)的種類(lèi)增多依然健壯;

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4622

    瀏覽量

    93057
  • 遞歸
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    9038
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    京東雙十一“無(wú)人倉(cāng)”首度曝光 無(wú)縫結(jié)合全程無(wú)人值守

    10月26日消息,雙11大促海量訂單產(chǎn)生的物流環(huán)節(jié)巨大壓力,不僅是物流行業(yè)面臨的難題,更會(huì)影響消費(fèi)者的購(gòu)物體驗(yàn)。今天早些時(shí)候,京東X事業(yè)部智慧物流實(shí)驗(yàn)室第一次揭開(kāi)神秘的面紗,展現(xiàn)了由機(jī)
    發(fā)表于 10-27 11:34 ?1561次閱讀

    JD雙十一“無(wú)人倉(cāng)”首度曝光,完全自動(dòng)化操控全程無(wú)人值守,過(guò)程太流弊了!

    大載荷量和±0.05mm高精度的特點(diǎn)。名詞解析:京東“無(wú)人倉(cāng)”“無(wú)人倉(cāng)”是京東自主研發(fā)的定制化、系統(tǒng)化整體物流解決方案,掌握了核心智慧
    發(fā)表于 10-27 11:31

    2017年京東智慧物流黑科技視頻曝光!

    科技范兒的說(shuō)法,就是京東智慧物流系統(tǒng)收到了你的訂單指令,指揮無(wú)人倉(cāng)各位物流機(jī)器人“機(jī)不停蹄”的忙碌起來(lái)——揀貨、貼標(biāo)簽、分揀、集貨,再到自動(dòng)裝上無(wú)人傳站車(chē)。無(wú)人傳站車(chē)在智能分揀系統(tǒng)的指
    發(fā)表于 02-17 15:38

    LabVIEW中使用遞歸算法

    LabVIEW中使用遞歸算法LabVIEW支持遞歸嗎?如何在LabVIEW中創(chuàng)建遞歸的VI?LabVIEW確實(shí)支持遞歸。按照下面的步驟來(lái)創(chuàng)建
    發(fā)表于 04-17 20:11

    遞歸算法的設(shè)計(jì)模式與調(diào)試

    文中提出一種通用遞歸算法的設(shè)計(jì)模式,并結(jié)合實(shí)例說(shuō)明該模式的應(yīng)用方法和有效性,為研究遞歸算法提供了有效的解決方案,可推廣性強(qiáng)。同時(shí)給出了遞歸
    發(fā)表于 11-03 15:04 ?24次下載

    不止無(wú)人機(jī) 京東欲將“物流無(wú)人化”演繹極致?

    京東物流業(yè)務(wù)連續(xù)五年的虧損一直令業(yè)內(nèi)浮想聯(lián)翩,然而京東卻一直頂著壓力不斷地曝出以京東無(wú)人機(jī)為代表的黑科技來(lái)建立獨(dú)有的物流模式。難道
    發(fā)表于 11-26 11:35 ?788次閱讀

    科捷物流聯(lián)手深圳極智能,打造首個(gè)立體高密度機(jī)器人智能倉(cāng)

    據(jù)報(bào)道,近日,神州控股旗下科捷物流位于北京平谷的BotHive Systems標(biāo)桿試驗(yàn)倉(cāng)正式啟動(dòng)。科捷物流與深圳極智能有限公司合作,應(yīng)用BotHive Systems技術(shù),采用“貨
    發(fā)表于 08-31 15:42 ?1117次閱讀

    京東全國(guó)規(guī)模最大的機(jī)器人倉(cāng)群投入使用 不同層級(jí)無(wú)人倉(cāng)數(shù)量達(dá)到50個(gè)

    11月8日,京東物流公布數(shù)據(jù)顯示,今年11.11全球好物節(jié)期間,京東全國(guó)規(guī)模最大的機(jī)器人倉(cāng)群已經(jīng)投入使用,不同層級(jí)的無(wú)人倉(cāng)數(shù)量達(dá)到50個(gè),分
    發(fā)表于 11-09 10:26 ?2103次閱讀

    機(jī)器人融入正是京東無(wú)人倉(cāng)的重要特色之一

    京東正著力打造的智慧物流中心里,從入庫(kù)、在庫(kù)揀貨、分揀、裝車(chē)的完整過(guò)程都無(wú)需人力參與,讓庫(kù)房擁有極高的效率和出色的靈活性。負(fù)責(zé)京東智慧物流
    發(fā)表于 11-12 11:50 ?1354次閱讀

    C++的實(shí)驗(yàn)教程之函數(shù)的遞歸算法資料免費(fèi)下載

    函數(shù)的遞歸算法 1.范例:求組合數(shù), 一、實(shí)驗(yàn)?zāi)康?. 學(xué)會(huì)解決簡(jiǎn)單的遞歸算法。2. 掌握函數(shù)的嵌套調(diào)用。
    發(fā)表于 01-29 10:51 ?2次下載
    C++的實(shí)驗(yàn)教程之函數(shù)的<b class='flag-5'>遞歸</b><b class='flag-5'>算法</b>資料免費(fèi)下載

    物流業(yè)是物聯(lián)網(wǎng)的最佳應(yīng)用場(chǎng)景,京東再刷新紀(jì)錄

    談到物流行業(yè)的物聯(lián)網(wǎng)應(yīng)用及京東的物聯(lián)網(wǎng)發(fā)展情況,申元慶表示:“我們知道物流是物聯(lián)網(wǎng)最佳應(yīng)用場(chǎng)景之一。今年618購(gòu)物節(jié),我們京東交出了非常棒的成績(jī)
    的頭像 發(fā)表于 08-26 15:45 ?3799次閱讀

    從“敲鑼人”看京東物流IPO后的“新謀略”

    /股,較發(fā)行價(jià)40.36港元上漲 14.1%,總市值約為2805億港元。 京東倉(cāng)配一體物流體系從“自給自足”“改革開(kāi)放”再到“全面開(kāi)放”,用了10年: 2007年,
    的頭像 發(fā)表于 05-29 09:27 ?2349次閱讀

    如何求遞歸算法的時(shí)間復(fù)雜度

    那么我通過(guò)一道簡(jiǎn)單的面試題,模擬面試的場(chǎng)景,來(lái)帶大家逐步分析遞歸算法的時(shí)間復(fù)雜度,最后找出最優(yōu)解,來(lái)看看同樣是遞歸,怎么就寫(xiě)成了O(n)的代碼。
    的頭像 發(fā)表于 07-13 11:30 ?2279次閱讀

    如何求遞歸算法的時(shí)間復(fù)雜度

    相信很多同學(xué)對(duì)遞歸算法的時(shí)間復(fù)雜度都很模糊,那么這篇Carl來(lái)給大家通透的講一講。
    的頭像 發(fā)表于 07-13 11:33 ?1624次閱讀

    京東物流與銳捷網(wǎng)絡(luò)合作再深化,共啟智慧物流新紀(jì)元

    轉(zhuǎn)型。 基于雙方合作的堅(jiān)實(shí)基礎(chǔ),京東物流將在物流領(lǐng)域,依托自身在物流管理上的專業(yè)知識(shí)和豐富經(jīng)驗(yàn),為銳捷網(wǎng)絡(luò)提供包括物流運(yùn)輸服務(wù)、
    的頭像 發(fā)表于 10-29 16:04 ?167次閱讀
    <b class='flag-5'>京東</b><b class='flag-5'>物流</b>與銳捷網(wǎng)絡(luò)合作再深化,共啟智慧<b class='flag-5'>物流</b>新紀(jì)元
    主站蜘蛛池模板: china男士同性视频tv| 欧美片第1页 综合| 久久99热这里只频精品6| 乱辈通奷XXXXXHD猛交| 欧美一区二区三区播放| 翁公吮她的花蒂和奶水| 友田真希息与子中文字幕| 被同桌摸出水来了好爽的视频| 国产精品亚洲第一区二区三区 | 99精品视频在线| 国产精华av午夜在线观看| 久久免费视频在线观看6| 日韩 国产 中文 无码| 夜夜澡人人爽人人喊_欧美| 不良网站进入窗口软件下载免费| 好男人好资源在线观看| 热99re久久精品国产首页| 亚洲无遮挡| 国产69精品久久久久观看软件| 久久视频精品38在线播放| 天天影视网网色色欲| 99re精品视频在线播放视频| 国产一区二区内射最近更新| 欧洲美女高清一级毛片| 伊人久久五月丁婷婷| 国产精品大陆在线视频| 免费看黄色小说| 亚洲乱妇88网| 冈本视频黄页正版| 免费的好黄的漫画| 亚洲色偷偷偷网站色偷一区人人藻 | 国产在线播放91| 全彩acg无翼乌火影忍者| 伊人色综合久久天天| 国产精品视频一区二区猎奇| 欧美成人性色生活18黑人| 影音先锋av色咪影院| 国产免费怕怕免费视频观看| 日本高清免费在线| 97成人免费视频| 久久草福利自拍视频在线观看|