貪心算法解決會議安排問題

文章目錄

前言

一、什么是貪心算法?

貪心算法的基本概念:貪心算法并不從整體最優上加以考慮,所做的選擇只是在某種意義上的局部最優選擇。

二、會議安排題目

1.題目理解

2.思路剖析

總結



前言

本文將主要介紹貪心算法需要注意的地方以及基本概念,理解和解決最經典的會議安排問題,以及有相應的變形題


一、什么是貪心算法?

  1. 貪心算法的基本概念:貪心算法并不從整體最優上加以考慮,所做的選擇只是在某種意義上的局部最優選擇
  2. 貪心算法的基本要素:
  • 最優子結構性質:一個問題的最優解包含其子問題的最優解。
  • ?貪心選擇性質:在每一步選擇中都采取當前狀態下的最優選擇,即不考慮未來的影響,僅考慮當前步的選擇,從而希望最終能夠找到全局最優解

二、會議安排題目

1.題目理解

這里我們需要根據活動的開始和結束時間來安排最多的活動數目,前提是這里只有一個會場并且時間也只有一天,對于安排活動,根據日常的生活經驗,我們可以想到有下面三種安排方式:

  • 先來先服務:誰開始的時間早就安排誰
  • 最短作業時間優先:誰占用會場的時間少就先安排誰
  • 截止時間優先:誰結束的早就先安排誰

下面我們來逐一分析:

如果采用第一種方式,第一個開始的活動占用了很長的時間就會導致后面的活動都無法安排,很多時候并不能滿足活動數最多

如果采用第二種方式,假如最晚開始的活動占用會場的時間最少,那么前面的時間都相當于浪費了,也不是一個好的選擇

而第三種方式根據結束時間的早晚來安排能夠最大程度的未為后面的活動騰出時間,故此類會議安排題目我們都是利用截止時間優先的方式進行安排

2.思路剖析

由上面的題目理解易知我們需要知道活動的開始時間、截止時間并且根據截止時間對活動進行排序。這里我們需要定義兩個數組 si 和 fi 分別存儲第 i 個活動的開始時間和截止時間,下面我們通過一個列題梳理代碼思路。

如圖所示,我們首先根據截止時間進行排序,然后我們選擇第一個活動最先開始,這時我們發現第一個活動的截止時間是7與第二個活動發生沖突(不相容)則我們要將這個活動去掉,再選擇開始時間大于第一個活動的截止時間的活動也就是第三個活動,同理安排好第三個活動,我們也要將沖突的活動剔除,依次類推我們可以選擇1、3、5或者1、3、6這兩種安排方式,通過這個例題也說明了貪心算法的最優解是不唯一的

下面是這個過程的核心代碼:

void GreedySelector(int n, int s[],int f[],bool A[])
{    A[1]=true;//安排第一個活動int j=1;//當前結束活動的下標for(int i=2;i<=n;i++){if(s[i]>f[j]){A[i]=true;//將活動列入安排中j=i;//更新當前結束的活動}elseA[i]=false;
}}

總結

本文通過貪心算法解決了經典的會議安排問題,即在有限的會議室資源下安排盡可能多的互不沖突的活動。首先,我們定義開始時間和結束時間兩個關鍵數組。然后采用貪心算法的策略,按照活動結束時間進行排序,確保每次選擇最早結束的活動,從而為后續活動留出更多時間。在具體實現中,使用標志數組來跟蹤已安排的活動,并通過迭代選擇兼容活動來完成最優安排。通過示例分析,我們驗證了該算法能夠正確計算出最多可安排的活動數量及其具體組合。這種基于貪心選擇的方法不僅保證了解決方案的最優性,還具有較高的執行效率(O(n log n)時間復雜度),非常適合處理此類活動調度問題。
喜歡的朋友們點贊支持一下啦~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79624.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79624.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79624.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從入門到登峰-嵌入式Tracker定位算法全景之旅 Part 4 |IMU 死算與校正:慣性導航在資源受限環境的落地

Part 4 |IMU 死算與校正:慣性導航在資源受限環境的落地 本章聚焦 ESP32-S3 平臺上如何利用 LSM6DS3 IMU 實現 死算(Dead Reckoning),并結合 零速更新(ZUPT) 或 磁力計輔助 進行 漂移校正,最終通過 EKF/UKF 融合提升定位精度。 一、傳感器簡介與校準 LSM6DS3 主要參數 加速…

力扣1128題解

記錄 2525.5.4 題目&#xff1a; 思路&#xff1a; 先將dominoes[i]的二元全部變為前大后小的形式&#xff0c;再遍歷該數組&#xff0c;用數組來記錄。 代碼&#xff1a; class Solution {public int numEquivDominoPairs(int[][] dominoes) {int [] [] cnt new int [10…

with的用法

Python SQLite 操作詳解 本文檔詳細解釋了使用 Python 操作 SQLite 數據庫時涉及的關鍵概念和代碼實踐&#xff0c;包括 with 語句、事務處理、批量插入以及相關的優化建議。 一、with 語句的作用&#xff08;自動關門的保險庫&#xff09; with sqlite3.connect(city_1301.d…

力扣解題匯總(困難)

文章目錄 技巧42_接雨水 技巧 42_接雨水 class Solution {public int trap(int[] height) {int LMax 0, RMax 0;int len height.length;int[] L2R new int[len];int[] R2L new int[len];//計數每一個格的左右邊最高柱for (int i 0; i < len; i) {LMax Math.max(LMa…

【Redis】Redis常用命令

4.Redis常見命令 4.1 Redis數據結構介紹 Redis是一個key-value的數據庫&#xff0c;key一般是String類型&#xff0c;不過value的類型多種多樣&#xff1a; 命令太多&#xff0c;不需要死記&#xff0c;學會查詢就好了~ Redis為了方便我們學習&#xff0c;將操作不同數據類型…

Ubuntu 系統上廣受好評的瀏覽器推薦

日常使用與開發者首選 Firefox 特點&#xff1a;開源、隱私保護強大&#xff0c;支持豐富擴展&#xff08;如開發者工具、廣告攔截&#xff09;&#xff0c;默認預裝且跨平臺兼容368。 適用場景&#xff1a;日常瀏覽、開發者調試&#xff08;支持實時 CSS/JS 編輯&#xff09;、…

Rust Trait 學習

概述 特征&#xff08;trait&#xff09;是rust中的概念&#xff0c;類似于其他語言中的接口&#xff08;interface&#xff09;。特征定義了一個可以被共享的行為&#xff0c;只要實現了特征&#xff0c;你就能使用該行為。 如果不同的類型具有相同的行為&#xff0c;那么我們…

JavaScript性能優化實戰(9):圖像與媒體資源優化

引言 在當今視覺驅動的網絡環境中,圖像和媒體資源往往占據了網頁總下載量的60%-80%,因此對圖像和媒體資源進行有效優化已成為前端性能提升的關鍵領域。盡管網絡帶寬持續提升,但用戶對加載速度的期望也在不斷提高,特別是在移動設備和網絡條件不穩定的場景下。 本文作為Jav…

NHANES指標推薦:LC9

文章題目&#xff1a;Association between lifes crucial 9 and kidney stones: a population-based study DOI&#xff1a;10.3389/fmed.2025.1558628 中文標題&#xff1a;生命的關鍵 9 與腎結石之間的關聯&#xff1a;一項基于人群的研究 發表雜志&#xff1a;Front Med 影響…

谷歌 NotebookLM 支持生成中文播客

谷歌 NotebookLM 支持生成中文播客。 2025 年 4 月 29 日&#xff0c;NotebookLM 宣布其 “音頻概覽”&#xff08;Audio Overviews&#xff09;功能新增 76 種語言支持&#xff0c;其中包括中文。用戶只需將文檔、筆記、研究材料等上傳至 NotebookLM&#xff0c;然后在設置中選…

ElasticSearch深入解析(十):字段膨脹(Mapping 爆炸)問題的解決思路

文章目錄 一、核心原理&#xff1a;動態映射的雙刃劍1. 動態映射的工作機制2. 映射爆炸的觸發條件3. 底層性能損耗 二、典型場景與案例分析1. 日志系統&#xff1a;動態標簽引發的災難2. 物聯網數據&#xff1a;設備屬性的無序擴展 三、系統性解決方案1. 架構層優化2. 配置層控…

交互式智能體面臨長周期決策和隨機環境反饋交互等挑戰 以及解決辦法

交互式智能體面臨長周期決策和隨機環境反饋交互等挑戰 以及解決辦法 目錄 交互式智能體面臨長周期決策和隨機環境反饋交互等挑戰 以及解決辦法隨機初始化參數,lora但是訓練需要更加細粒度的評價指數(對思考過程評價,對得出結果的證明評價,對結果評價)用戶進看到結果《RAGE…

4:機器人目標識別無序抓取程序二次開發

判斷文件是否存在 //判斷文件在不在 int HandEyeCalib::AnsysFileExists(QString FileAddr) {QFile File1(FileAddr);if(!File1.exists()){QMessageBox::warning(this,QString::fromLocal8Bit("提示"),FileAddrQString::fromLocal8Bit("文件不存在"));retu…

【Touching China】2007-2011

文章目錄 1、20072、20083、20094、20105、2011 1、2007 錢學森 身份&#xff1a;中國航天事業奠基人&#xff0c;中國科學院、中國工程院資深院士獲獎事跡&#xff1a;錢學森1955年沖破重重阻力回到祖國&#xff0c;長期擔任火箭導彈和航天器研制的技術領導職務。他以總體、動…

linux常用基礎命令_最新版

常用命令 查看當前目錄下個各個文件大小查看當前系統儲存使用情況查看當前路徑刪除當前目錄下所有包含".log"的文件linux開機啟動jar更改自動配置文件后操作關閉自啟動linux靜默啟動java服務查詢端口被占用查看軟件版本重啟關機開機啟動取別名清空當前行創建文件touc…

Mamba+Attention+CNN 預測模型:破局長程依賴的計算機視覺新范式

目錄 一、引言:從 CNN 到 Mamba 的視覺建模進化之路 二、模型關鍵組成部分解析 (一)CNN 基干:局部特征提取器 (二)Mamba 塊:長程依賴建模核心 (三)注意力機制:特征交互增強器 三、模型創新點 四、模型原理與作用 五、優缺點對比 六、應用領域 一、引言:從 C…

LangChain4j +DeepSeek大模型應用開發——8 Function Calling 函數調用

Function Calling 函數調用也叫 Tools 工具 入門案例 例如&#xff0c;大語言模型本身并不擅長數學運算。如果應用場景中偶爾會涉及到數學計算&#xff0c;我們可以**為他提供一個 “數學工具”。**當我們提出問題時&#xff0c;大語言模型會判斷是否使用某個工具。 創建工具…

【Prometheus-Mongodb Exporter安裝配置指南,開機自啟】

目錄 內容概述 一、創建MongoDB監控專用用戶二、安裝MongoDB Exporter三、啟動Exporter服務四、配置Systemd服務五、服務管理命令六、Prometheus集成配置七、Grafana看板 內容概述 本教程詳細演示了如何在Linux系統中部署MongoDB Exporter以監控MongoDB數據庫&#xff0c;并將…

在 Ubuntu 上安裝 cPanel

開始之前&#xff0c;請確保擁有一臺 Ubuntu 服務器&#xff0c;推薦使用 Ubuntu 22.04 LTS。如果沒有&#xff0c;可以查看免費服務器&#xff1a; 11個免費 VPS&#xff0c;夠用一輩子了&#xff01;&#xff08;2025最新&#xff09;Top 11 免費VPS推薦平臺對比&#xff08…

【算法基礎】插入排序算法 - JAVA

一、算法基礎 1.1 什么是插入排序 插入排序是一種簡單直觀的排序算法&#xff0c;它的工作原理類似于我們打牌時整理手牌的過程。插入排序的核心思想是將數組分為已排序和未排序兩部分&#xff0c;每次從未排序部分取出一個元素&#xff0c;插入到已排序部分的適當位置。 1.…