| — |
服务器技术:算法:穷举案例 [2020/06/23 17:16] (当前版本) chenjinlian 创建 |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | <p>package com.isoftstone.tsl.monitor;<br/><br/>import java.util.ArrayList;<br/>import java.util.Arrays;<br/>import java.util.HashMap;<br/>import java.util.Iterator;<br/>import java.util.Map;<br/><br/><br/>public class Pop {<br/><br/>    private ArrayList<Element> srcList = new ArrayList<>();<br/>    <br/>    private Map<String, Element[]> resultSet = new HashMap<String, Element[]>();<br/>    <br/>    /**<br/>   * 递归次数<br/>   */<br/>    private int loopTimes = 8;<br/>    <br/>    /**<br/>   * 目标值<br/>   */<br/>    private int targetNum = 0;<br/>    <br/>    <br/>    public int getLoopTimes() {<br/>        return loopTimes;<br/>    }<br/><br/>    public void setLoopTimes(int loopTimes) {<br/>        this.loopTimes = loopTimes;<br/>    }<br/><br/>    public int getTargetNum() {<br/>        return targetNum;<br/>    }<br/><br/>    public void setTargetNum(int targetNum) {<br/>        this.targetNum = targetNum;<br/>    }<br/>    <br/>    <br/><br/>    public ArrayList<Element> getSrcList() {<br/>        return srcList;<br/>    }<br/><br/>    public void setSrcList(ArrayList<Element> srcList) {<br/>        this.srcList = srcList;<br/>    }<br/><br/><br/><br/>    public class Element implements Comparable<Object> {<br/>        private int id;<br/>        <br/>        private int value;<br/><br/>        public Element(int id, int value){<br/>            this.id = id;<br/>            this.value = value;<br/>        }<br/>        public int getId() {<br/>            return id;<br/>        }<br/><br/>        public void setId(int id) {<br/>            this.id = id;<br/>        }<br/><br/>        public int getValue() {<br/>            return value;<br/>        }<br/><br/>        public void setValue(int value) {<br/>            this.value = value;<br/>        }<br/>        <br/>        @Override<br/>        public int compareTo(Object o) {<br/>            if (o instanceof Element) {<br/>                Element element = (Element) o;<br/>                if (this.value > element.value) {<br/>                    return 1;<br/>               } else if (this.value == element.value) {<br/>                    return 0;<br/>               } else {<br/>                    return -1;<br/>                }<br/>            }<br/>            return 0;<br/>        }<br/>        <br/>        <br/>    }<br/>    <br/>    public Pop(int[] numbers){<br/>        for (int i = 0; i < numbers.length; i++) {<br/>            Element element = new Element(i, numbers[i]);<br/>            srcList.add(element);<br/>        }<br/>    }<br/>    <br/>    <br/>    public void printIfIsRight(Element[] targetList){<br/>        if (targetList == null || targetList.length == 0) {<br/>            return ;<br/>        }<br/>        int totoal = 0;<br/>        for (int i = 0; i < targetList.length; i++) {<br/>            if(targetList[i] != null)<br/>            totoal+= targetList[i].getValue();<br/>        }<br/>        if (totoal == targetNum) {<br/>            System.out.println("===================find=================");<br/>            Element[]  tempList  = new Element[targetList.length];<br/>            for (int i = 0; i < tempList.length; i++) {<br/>                tempList[i] = targetList[i];<br/>            }<br/>            Arrays.sort(tempList);<br/>            String key = "";<br/>            for (int i = 0; i < tempList.length; i++) {<br/>                //System.out.println("id = "+tempList[i].getId());<br/>                key = key +tempList[i].getId()+"-";<br/>                System.out.println(""+tempList[i].getValue());<br/>                <br/>            }<br/>            resultSet.put(key, tempList);<br/>            System.out.println("=======================================");<br/>            <br/>           <br/>        }<br/>        <br/>        <br/>    }<br/>    <br/>    public void  printResult() {<br/>        <br/>        for (Iterator<String> iterator = resultSet.keySet().iterator(); iterator.hasNext();) {<br/>            String key = (String) iterator.next();<br/>            Element[] elements = resultSet.get(key);<br/>            System.out.println("===================find=================");<br/>            System.out.println("ids="+key);<br/>            for (int i = 0; i < elements.length; i++) {<br/>                System.out.println("id="+elements[i].getId());<br/>            <br/>                System.out.println("value="+elements[i].getValue());<br/>                <br/>            }<br/>            System.out.println("=======================================");<br/>        }<br/>    }<br/>    <br/>    public ArrayList<Element> popOne(ArrayList<Element> srcList , Element element){<br/>        ArrayList<Element> newList = new ArrayList<>();<br/>        for (int i = 0; i < srcList.size(); i++) {<br/>            Element e = srcList.get(i);<br/>            if (element.getValue() != e.getValue()) {<br/>                newList.add(e);<br/>            }<br/>        }<br/>        return newList;<br/>        <br/>    }<br/>    <br/>    public void findByLoop(ArrayList<Element> srcList, Element[] targetList, int loopOffset) {<br/>        <br/>        <br/>        for (int i = 0; i < srcList.size(); i++) {<br/>            <br/>            Element element = srcList.get(i);<br/>            <br/>            targetList[loopOffset] = element;<br/>                        <br/>            for (int j = loopOffset+1; j < targetList.length; j++) {<br/>                //后面的清空<br/>                targetList[j] = null;<br/>            }<br/>            <br/>            <br/>            <br/>            if (loopOffset < this.loopTimes - 1) {<br/>                <br/>                int nextLoopOffset = loopOffset+1;<br/>                                <br/>                findByLoop(popOne(srcList, element), targetList, nextLoopOffset);<br/>                                <br/>                <br/>           } <br/>            <br/>            if (loopOffset == this.loopTimes-1) {<br/>                printIfIsRight(targetList);<br/>            }<br/>                        <br/>        }<br/>        <br/>        <br/>        <br/>        <br/>    }<br/><br/>    public static void main(String[] args) {<br/>    <br/>        int num = 9;<br/>        Element[] targetList = new Element[num];<br/>        int[] numbers = {343420,349488,388100,398168,425090,429256,510636,518340,553603,574291,609070,614425,<br/>                616740,639664,686264,708628,713200,722258,772328,840200,840880,905098,945724,1195817,1248000,<br/>                1308202,2019308,41280,16850,80000,158300,11000,237956,30000,477120,193730,10200,11100,12250,12500,<br/>                20000,20800,22096,22500,25000,26790,29030,29512,29520,31400,31850,33760,35100,35816,41600,53756,<br/>                55900,66400,78160,86900,97536,97540,99800,104300,124800,135024,154080,156952,157788,196378,206746,<br/>                211180,221406,231692,238302,253420,292428,310550,317160,346360,366850,398650,401150,445058,1530790,<br/>                1712261,351993,238258};<br/>        <br/>        Pop pop = new Pop(numbers);<br/>        pop.setTargetNum(3697636);<br/>        pop.setLoopTimes(num);<br/>        <br/>        pop.findByLoop(pop.getSrcList(), targetList, 0);<br/>        <br/>        pop.printResult();<br/>        System.out.print("end");<br/>    }<br/><br/>}<br/><br/></p> | ||