Table of Contents
Activity selection problem, activity selection
Home Backend Development PHP Tutorial Activity selection problem, activity selection_PHP tutorial

Activity selection problem, activity selection_PHP tutorial

Jul 12, 2016 am 09:05 AM
Selectivity

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: Activity selection problem, activity selection_PHP tutorial 1 #include 2 #define max_size 10010 3 int s[max_size]; 4 int f[max_size]; 5 int c[max_size][max_size]; 6 int ret[max_size][max_size]; 7 8 using namespace std; 9 10 void DP_SELECTOF(int *s,int *f,int n,int c[][max_size],int ret[][max_size]) 11 { 12 int i,j,k; 13 int temp; 14 for(j=2;j<=n;j ) 15 for(i=1;i) 16 { 17 for(k=i 1;k) 18 { 19 if(s[k]>=f[i]&&f[k]<=s[j]) 20 { 21 temp=c[i][k] c[k][j] 1; 22 if(c[i][j]<temp) 23 { 24 c[i][j]=temp; 25 ret[i][j]=k; 26 } 27 } 28 } 29 } 30 } 31 32 int main() 33 { 34 int n; 35 printf("输入活动个数 n: "); 36 while(~scanf("%d",&n)) 37 { 38 memset(c,0,sizeof(0)); 39 memset(ret,0,sizeof(ret)); 40 printf("n输入活动开始以及结束时间n"); 41 int i,j; 42 for(i=1;i<=n;i ) 43 { 44 scanf("%d%d",&s[i],&f[i]); 45 } 46 DP_SELECTOF(s,f,n,c,ret); 47 printf("最大子集的个数=%dn",c[1][n] 2); 48 return 0; 49 } View Code

下面是贪心法的代码:

  

Activity selection problem, activity selection_PHP tutorial 1 #include 2 #define max_size 10010 3 int s[max_size]; 4 int f[max_size]; 5 int ret[max_size]; 6 int c[max_size][max_size]; 7 using namespace std; 8 9 void GREEDY_ACTIVITY_SELECTOR(int *s,int *f,int n,int *ret) 10 { 11 int k,m; 12 *ret =1; 13 k=1; 14 for(m=2;m<=n;m ) 15 if(s[m]>=f[k]) 16 { 17 *ret =m; 18 k=m; 19 } 20 } 21 int main() 22 { 23 int n; 24 printf("输入活动个数 n: "); 25 while(~scanf("%d",&n)) 26 { 27 memset(s,0,sizeof(s)); 28 memset(f,0,sizeof(f)); 29 memset(c,0,sizeof(0)); 30 memset(ret,0,sizeof(ret)); 31 printf("n输入活动开始以及结束时间n"); 32 int i,j; 33 for(i=1;i<=n;i ) 34 { 35 scanf("%d%d",&s[i],&f[i]); 36 } 37 GREEDY_ACTIVITY_SELECTOR(s,f,n,ret); 38 for(i=0;i<=n;i ) 39 { 40 if(ret[i]!=0) 41 printf("a%d ",ret[i]); 42 } 43 printf("n"); 44 } 45 } View Code

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1069127.htmlTechArticle活动选择问题,活动选择 问题描述: 设有n个活动的集合E={1,2,,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

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,

Describe the SOLID principles and how they apply to PHP development. Describe the SOLID principles and how they apply to PHP development. Apr 03, 2025 am 12:04 AM

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 permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

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? How to debug CLI mode in PHPStorm? Apr 01, 2025 pm 02:57 PM

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

Explain the concept of late static binding in PHP. Explain the concept of late static binding in PHP. Mar 21, 2025 pm 01:33 PM

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

How to send a POST request containing JSON data using PHP's cURL library? How to send a POST request containing JSON data using PHP's cURL library? Apr 01, 2025 pm 03:12 PM

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�...

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

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.

See all articles