C語言實現貪心算法

一、貪心算法核心思想

特征:在每一步選擇中都采取當前狀態下最優(局部最優)的選擇,從而希望導致全局最優解
適用場景:需要滿足貪心選擇性質最優子結構性質


二、經典貪心算法示例

1. 活動選擇問題

目標:在給定時間段內安排最多的互不沖突的活動
策略:每次選擇結束時間最早的活動

#include <stdio.h>
#include <stdlib.h>// 活動結構體定義
typedef struct {int start;int end;
} Activity;// 比較函數:按結束時間升序排序
int compare(const void *a, const void *b) {Activity *actA = (Activity*)a;Activity *actB = (Activity*)b;return actA->end - actB->end;
}void activitySelection(Activity activities[], int n) {// 按結束時間排序qsort(activities, n, sizeof(Activity), compare);printf("選中活動序列:\n");int lastEnd = 0;for(int i=0; i<n; i++) {if(activities[i].start >= lastEnd) {printf("[%d-%d] ", activities[i].start, activities[i].end);lastEnd = activities[i].end;}}
}int main() {Activity acts[] = {{1,3}, {2,5}, {3,7}, {5,9}, {8,10}};int n = sizeof(acts)/sizeof(acts[0]);activitySelection(acts, n);  // 輸出:[1-3] [3-7] [8-10]return 0;
}

2. 找零錢問題

目標:用最少的硬幣數量組成指定金額(假設硬幣系統為規范系統,如人民幣)
策略:每次選擇當前可用的最大面值硬幣

#include <stdio.h>void coinChange(int coins[], int n, int amount) {printf("找零%d元的方案:\n", amount);for(int i=0; i<n; i++) {while(amount >= coins[i]) {printf("%d元 ", coins[i]);amount -= coins[i];}}if(amount > 0) printf("\n剩余%d元無法找零", amount);
}int main() {int coins[] = {100, 50, 20, 10, 5, 1}; // 降序排列int amount = 176;coinChange(coins, 6, amount);  // 輸出:100元 50元 20元 5元 1元return 0;
}

3. 霍夫曼編碼(核心部分)

目標:生成最優前綴編碼,實現數據壓縮
策略:每次合并頻率最小的兩個節點

#include <stdio.h>
#include <stdlib.h>
#define MAX_TREE_HT 100// 霍夫曼樹節點
struct MinHeapNode {char data;unsigned freq;struct MinHeapNode *left, *right;
};// 最小堆結構
struct MinHeap {unsigned size;unsigned capacity;struct MinHeapNode** array;
};// 創建新節點
struct MinHeapNode* newNode(char data, unsigned freq) {struct MinHeapNode* temp = (struct MinHeapNode*)malloc(sizeof(struct MinHeapNode));temp->left = temp->right = NULL;temp->data = data;temp->freq = freq;return temp;
}// 核心構建函數(完整實現需要約150行代碼,此處展示核心邏輯)
void buildHuffmanTree(char data[], int freq[], int size) {// 1. 創建最小堆并初始化// 2. 循環執行以下操作直到堆中只剩一個節點://    a. 提取兩個最小頻率節點//    b. 創建新內部節點,頻率為兩者之和//    c. 將新節點插入堆// 3. 剩余節點即為霍夫曼樹的根
}

三、貪心算法特性對比

問題類型適用性時間復雜度空間復雜度是否需要排序
活動選擇問題?O(n log n)O(1)需要
找零問題?O(n)O(1)需要
單源最短路徑?O(V2)O(V)不需要
背包問題(分數)?O(n log n)O(1)需要

四、貪心算法的局限性

  1. 局部最優 ≠ 全局最優:如旅行商問題(TSP)無法用純貪心解法
  2. 需要嚴格證明:必須證明貪心選擇性質和最優子結構
  3. 依賴問題特性:僅適用于特定類型的問題

五、應用場景推薦

  • 任務調度優化
  • 最小生成樹(Prim/Kruskal算法)
  • 文件壓縮(霍夫曼編碼)
  • 網絡路由(Dijkstra算法)
  • 集合覆蓋問題(近似解)

六、練習建議

  1. 實現完整的霍夫曼編碼程序
  2. 解決區間覆蓋問題(如:用最少的區間覆蓋指定線段)
  3. 嘗試解決「加油站繞行」問題(LeetCode 134)
  4. 學習如何證明貪心算法的正確性(數學歸納法、交換論證法)

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

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

相關文章

《一文讀懂Transformers庫:開啟自然語言處理新世界的大門》

《一文讀懂Transformers庫:開啟自然語言處理新世界的大門》 GitHub - huggingface/transformers: ?? Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX. HF-Mirror Hello! Transformers快速入門 pip install transformers -i https:/…

Vue里面elementUi-aside 和el-main不垂直排列

先說解決方法 main.js少導包 import element-ui/lib/theme-chalk/index.css; //加入此行即可 問題復現 排查了一個小時終于找出來問題了&#xff0c;建議導包去看官方的文檔&#xff0c;作者就是因為看了別人的導包流程導致的問題 導包官網地址Element UI導包快速入門

MYSQL 常用字符串函數 和 時間函數詳解

一、字符串函數 1、?CONCAT(str1, str2, …) 拼接多個字符串。 SELECT CONCAT(Hello, , World); -- 輸出 Hello World2、SUBSTRING(str, start, length)?? 或 ?SUBSTR() 截取字符串。 SELECT SUBSTRING(MySQL, 3, 2); -- 輸出 SQ3、LENGTH(str)?? 與 ?CHAR_LENGTH…

Python-Agent調用多個Server-FastAPI版本

Python-Agent調用多個Server-FastAPI版本 Agent調用多個McpServer進行工具調用 1-核心知識點 fastAPI的快速使用agent調用多個server 2-思路整理 1&#xff09;先把每個子服務搭建起來2&#xff09;再暴露一個Agent 3-參考網址 VSCode配置Python開發環境&#xff1a;https:/…

Drools+自定義規則庫

文章目錄 前言一、創建規則庫二、SpringBootDrools程序1.Maven依賴2.application.yml3.Mapper.xml4.Drools配置類5.Service6.Contoller7.測試接口 前言 公司的技術方案想搭建Drools自定義規則庫配合大模型進行數據的校驗。本篇用來記錄使用SpringBoot配合Drools開發Demo程序。…

潮了 低配電腦6G顯存生成60秒AI視頻 本地部署/一鍵包/云算力部署/批量生成

最近發現了一個讓人眼前一亮的工具——FramePack&#xff0c;它能用一塊普通的6GB顯存筆記本GPU&#xff0c;生成60秒電影級的高清視頻畫面&#xff0c;效果堪稱炸裂&#xff01;那么我們就把他本地部署起來玩一玩、下載離線一鍵整合包&#xff0c;或者是用云算力快速上手。接下…

【藍橋杯選拔賽真題104】Scratch回文數 第十五屆藍橋杯scratch圖形化編程 少兒編程創意編程選拔賽真題解析

目錄 scratch回文數 一、題目要求 1、準備工作 2、功能實現 二、案例分析 1、角色分析 2、背景分析 3、前期準備 三、解題思路 四、程序編寫 五、考點分析 六、推薦資料 1、scratch資料 2、python資料 3、C++資料 scratch回文數 第十五屆青少年藍橋杯scratch編…

大廠面試-框架篇

前言 本章內容來自B站黑馬程序員java大廠面試題和小林coding 博主學習筆記&#xff0c;如果有不對的地方&#xff0c;海涵。 如果這篇文章對你有幫助&#xff0c;可以點點關注&#xff0c;點點贊&#xff0c;謝謝你&#xff01; 1.Spring 1.1 Spring框架中的單例bean是線程…

【AI 加持下的 Python 編程實戰 2_10】DIY 拓展:從掃雷小游戲開發再探問題分解與 AI 代碼調試能力(中)

文章目錄 DIY 實戰&#xff1a;從掃雷小游戲開發再探問題分解能力3 問題分解實戰&#xff08;自頂向下&#xff09;3.2 頁面渲染邏輯3.3 事件綁定邏輯 4 代碼實現&#xff08;自底向上&#xff09;4.1 頁面渲染部分4.2 事件綁定部分 寫在前面 本篇將利用《Learn AI-assisted Py…

微信小程序開發1------微信小程序中的消息提示框總結

微信小程序中的消息提示框主要分為以下幾種&#xff1a; 1. wx.showToast(Object object) 功能&#xff1a; 顯示消息提示框&#xff0c;一般用于顯示操作結果、狀態等。 特點&#xff1a; 提示框顯示在屏幕中間&#xff0c;持續一段時間后自動消失&#xff08;默認1.5秒&…

AI 場景落地:API 接口服務 VS 本地部署,哪種更適合?

在當前 AI 技術迅猛發展的背景下&#xff0c;企業在實現 AI 場景落地時&#xff0c;面臨著一個關鍵抉擇&#xff1a;是選擇各大廠商提供的 API 接口服務&#xff0c;還是進行本地化部署&#xff1f;這不僅關乎成本、性能和安全性&#xff0c;還涉及到技術架構、數據治理和長期戰…

Android 加殼應用運行流程 與 生命周期類處理方案

版權歸作者所有&#xff0c;如有轉發&#xff0c;請注明文章出處&#xff1a;https://cyrus-studio.github.io/blog/ DexClassLoader DexClassLoader 可以加載任意路徑下的 dex&#xff0c;或者 jar、apk、zip 文件&#xff08;包含classes.dex&#xff09;。常用于插件化、熱…

c++進階——類與繼承

文章目錄 繼承繼承的基本概念繼承的基本定義繼承方式繼承的一些注意事項 繼承類模板 基類和派生類之間的轉換繼承中的作用域派生類的默認成員函數默認構造函數拷貝構造賦值重載析構函數默認成員函數總結 不能被繼承的類繼承和友元繼承與靜態成員多繼承及其菱形繼承問題繼承模型…

GAEA情感坐標背后的技術原理

基于GAEA的去中心化物理基礎設施網絡&#xff08;DePIN&#xff09;&#xff0c;用戶有機會在GAEA平臺上獲得寶貴的數據共享積分。為了提升這些洞察的豐富性&#xff0c;用戶必須花費一定數量的積分&#xff0c;將過去的網絡數據與當前的情感數據綁定&#xff0c;從而產生一種新…

圖形編輯器基于Paper.js教程27:對圖像描摹的功能實現,以及參數調整

本篇文章來講一下 圖像描摹的功能的實現。 我們知道要雕刻圖片可以通過分析圖片的像素來生成相應的gcode進行雕刻&#xff0c;但如果你想要將圖片轉換為線稿進行雕刻&#xff0c;這個時候就要從圖片中提取出 線稿。 例如下面的圖片&#xff1a; 你想要獲取到這個圖片的線稿&…

人工智能與機器學習,誰是誰的子集 —— 再談智能的邊界與演進路徑

人工智能&#xff08;Artificial Intelligence, AI&#xff09;作為當代最具影響力的前沿技術之一&#xff0c;常被大眾簡化為 “深度學習” 或 “大模型” 等標簽。然而&#xff0c;這種簡化認知往往掩蓋了AI技術內部結構的復雜性與多樣性。事實上&#xff0c;AI并非單一方法的…

Oracle_開啟歸檔日志和重做日志

在Oracle中&#xff0c;類似于MySQL的binlog的機制是歸檔日志&#xff08;Archive Log&#xff09;和重做日志&#xff08;Redo Log&#xff09; 查詢歸檔日志狀態 SELECT log_mode FROM v$database; – 輸出示例&#xff1a; – LOG_MODE – ARCHIVELOG (表示已開啟) – NO…

IDEA編寫flinkSQL(快速體驗版本,--無需配置環境)

相關資料 文檔內容鏈接地址datagen生成器https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/connectors/table/datagen/print 生成器https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/connectors/table/print/ 準備工作 優點就是下載個ide…

基于AI技術的高速公路交通引流系統設計與應用研究

基于AI技術的高速公路交通引流系統設計與應用研究 1. 研究背景與意義 1.1 交通系統演化脈絡 1.1.1 發展階段劃分 機械化時代&#xff08;1950-1990&#xff09;&#xff1a;固定式信號控制信息化時代&#xff08;1991-2010&#xff09;&#xff1a;SCATS/SCOOT系統智能化時代…

NEGATIVE LABEL GUIDED OOD DETECTION WITH PRETRAINED VISION-LANGUAGE MODELS

1. 介紹: 這篇論文也是基于CLIP通過后處理的方法實現的OOD的檢測,但是設計點在于,之前的方法是使用的ID的類別,這篇工作是通過添加一些在語義上非常不同于ID的類別的外分布類來做的OOD檢測。 CLIP做OOD檢測的這個系列里面我看的以及記錄的第一篇就是MCM的方法,這也是確實是…