Activity selection problem, activity selection_PHP tutorial
Activity selection problem, activity selection
Problem description:
Suppose there is a set of n activities E={1,2,…,n}. Each activity requires the use of the same resource, such as a lecture venue, etc., and only one activity can use this resource at the same time. . Each activity i has a start time si that requires the use of the resource and an end time fi, and si < fi. If activity i is selected, it occupies resources within the half-open time interval [si, fi). If the interval [si, fi) and the interval [sj, fj) do not intersect, then activity i and activity j are said to be compatible. That is to say, when si≥fj or sj≥fi, activity i is compatible with activity j. The activity scheduling problem is to select the largest compatible activity sub-set from the given activity set.
.
It can be seen from the figure that there are 11 activities in S. The largest mutually compatible activity subset is: {a1, a4, a8 , a11,} and {a2, a4, a9, a11}.
2. Dynamic programming solution process
(1) Optimal substructure of activity selection problem
Define the sub-problem solution space Sij to be a subset of S, each of which is compatible with each other. That is, each activity starts after ai ends and ends before aj starts.
In order to facilitate discussion and subsequent calculations, add two fictitious activities a0 and an 1, where f0=0, sn 1=∞.
Conclusion: When i≥j, Sij is the empty set.
If activities are ordered monotonically increasing by end time, the subproblem space is used to select the largest compatible subset of activities from Sij, where 0≤i<j≤n 1, so the other Sij are all empty sets.
The optimal substructure is: Assume that the optimal solution Aij of Sij contains activity ak, then for S The solution Aik of ik and the solution Akj of Skj must be optimal.
The problem is divided into two sub-problems through an activity ak. The following formula can calculate the solution Aij of Sij.
(2) A recursive solution
Let c[i][j] be the number of activities in the largest compatible subset of Sij. When Sij is the empty set, c[i][j] =0; when Sij is non-empty, if ak is used in the largest compatible subset of Sij, then the problem Sik The maximum compatible subset of and Skj is also used, so we can get c[i][j] = c[i][k] c[k][j] 1.
When i≥j, Sij must be the empty set, otherwise Sij needs to be calculated according to the formula provided above. If a<🎜 is found >k, then Sij is non-empty (at this time, fi≤sk and fk≤sj), if such ak cannot be found, then Sij is the empty set.
The complete calculation formula of c[i][j] is as follows:
Personal test code:
下面是贪心法的代码: 1 #include
1 #include

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Alipay PHP...

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

Sending JSON data using PHP's cURL library In PHP development, it is often necessary to interact with external APIs. One of the common ways is to use cURL library to send POST�...

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.
