• K7_772806
  • 1.1MB
  • rar
  • 0
  • VIP专享
  • 0
  • 2022-05-26 20:59
Data Structures and Algorithms 13 Hard or Intractable Problems If a problem has an O(nk) time algorithm (where k is a constant), then we class it as having polynomial time complexity and as being efficiently solvable. If there is no known polynomial time algorithm, then the problem is classed as intractable. The dividing line is not always obvious. Consider two apparently similar problems: Euler's problem asks whether there is a (often characterized as the path through a graph which Bridges of K�nigsberg - a traverses each edge only popular 18th C puzzle) once. Hamilton's problem asks whether there is a path through a graph which visits each vertex exactly once. Euler's problem The 18th century German city of K�nigsberg was situated on the river Pregel. Within a park built on the banks of the river, there [Image]were two islands joined by seven bridges. The puzzle asks whether it is possible to take a tour through the park, crossing each bridge only once. An exhaustive search requires starting at every possible point and traversing all the possible paths from that point - an O(n!) problem. However Euler showed that an Eulerian path existed iff * it is possible to go from any vertex to any other by following the edges (the graph must be connected) and * every vertex must have an even number of edges connected to it, with at most two exceptions (which constitute the starting and ending points). It is easy to see that these are necessary conditions: to complete the tour, one needs to enter and leave every point except the start and end points. The proof that these are sufficient conditions may be found in the literature . Thus we now have a O(n) problem to determine whether a path exists. Transform the map into a graph in which We can now easily see that the Bridges of the nodes represent the "dry K�nigsberg does not have a solution. land" points and the arcs represent the A quick inspection shows that it does have a bridges. Hamiltonian path. [Image] However there is no known efficient algorithm for determining whether a Hamiltonian path exists. But if a path was found, then it can be verified to be a solution in polynomial time: we simply verify that each edge in the path is actually an edge (O(e) if the edges are stored in an adjacency matrix) and that each vertex is visited only once (O(n2) in the worst case). Classes P and NP What does NP mean? At each step in the algorithm, you guess which possibility to try next. This is the non-deterministic part: it doesn't matter Euler's problem lies in the which possibility you try next. There is no class P: problems solvable in information used from previous attempts Polynomial time. Hamilton's (other than not trying something that you've problem is believed to lie in already tried) to determine which class NP (Non-deterministic alternative should be tried next. However, Polynomial). having made a guess, you can determine in polynomial time whether it is a solution or Note that I wrote "believed" not. in the previous sentence. No-one has succeeded in Since nothing from previous trials helps you proving that efficient (ie to determine which alternative should be polynomial time) algorithms tried next, you are forced to investigate don't exist yet! all possibilities to find a solution. So the only systematic thing you can do is use some strategy for systematically working through all possibilities, eg setting out all permutations of the cities for the travelling salesman's tour. Many other problems lie in class NP. Some examples follow. Composite Numbers Determining whether a number can be written as the product of two other numbers is the composite numbers problem. If a solution is found, it is simple to verify it, but no efficient method of finding the solution exists. Assignment Assignment of compatible room-mates: assume we have a number of students to be assigned to rooms in a college. They can be represented as the vertices on a graph with edges linking compatible pairs. If we have two per room, a class P algorithm exists, but if three are to be fitted in a room, we have a class NP problem. Boolean satisfiability Given an arbitrary boolean expression in n variables: a1 op a2 op ... op an where op are boolean operators, and, or, .. Can we find an assignment of (true,false) to the ai so that the expression is true? This problem is equivalent to the circuit-satisfiability problem which asks can we find a set of inputs which will produce a true at the output of a circuit composed of arbitrary logic gates. A solution can only be found by trying all 2n possible assignments. Map colouring The three-colour map colouring problem asks if we can colour a map so that no adjoining countries have the same colour. Once a solution has been guessed, then it is readily proved. [This problem is easily answered if there are only 2 colours - [Image] there must be no point at which an odd number of countries meet - or 4 colours - there is a proof that 4 colours suffice for any map.] This problem has a graph equivalent: each vertex represents a country and an edge is drawn between two vertices if they share a common border. Its solution has a more general application. If we are scheduling work in a factory: each vertex can represent a task to be performed - they are linked by an edge if they share a common resource, eg require a particular machine. A colouring of the vertices with 3 colours then provides a 3-shift schedule for the factory. Many problems are reducible to others: map colouring can be reduced to graph colouring. A solution to a graph colouring problem is effectively a solution to the equivalent map colouring or scheduling problem. The map or graph-colouring problem may be reduced to the boolean satisfiability problem. To give an informal description of this process, assume the three colours are red, blue and green. Denote the partial solution, "A is red" by ar so that we have a set of boolean variables: ar A is red ab A is blue ag A is green br B is red bb B is blue bg B is green cr C is red ... ... Now a solution to the problem may be found by finding values for ar, ab, etc which make the expression true: ((ar and not ab and not ag) and ( (bb and (cb and (dg .... Thus solving the map colouring problem is equivalent to finding an assignment to the variables which results in a true value for the expression - the boolean satisfiability problem. There is a special class of problems in NP: the NP-complete problems. All the problems in NP are efficiently reducible to them. By efficiently, we mean in polynomial time, so the term polynomially reducible provides a more precise definition. In 1971, Cook was able to prove that the boolean satisfiability problem was NP-complete. Proofs now exist showing that many problems in NP are efficiently reducible to the satisfiability problem. Thus we have a large class of problems which will are all related to each other: finding an
    • JAVA算法
    • java算法
    • Java算法
      Java算法 该项目的目的是建立 运行并构建 建立 gradle clean build 测试 gradle clean test
    • Java算法大全
    • Java算法
      Java中的算法 关于此存储库 算法早在计算机出现之前就已存在。 算法是计算或其他问题解决操作(尤其是计算机)要遵循的过程或一组规则。 因此,自从有了计算机以来,现在就有了更多的算法算法是计算的核心。 该...
    • java 算法
    • java算法项目
      java算法项目包括: 1)快速查询、折半查询 2)队列算法 3)约瑟夫环问题求解 4)使用数组实现堆栈,包括入栈、出栈、获取堆栈长度 5)分治算法求解假银币问题等
    • JAVA算法应用
    • JAVA算法
      JAVA学习方法 思想 题库
    • java算法
      java算法 Java数据结构和算法中文第二版