最近最先演算法
① 【高分懸賞】用C/C++語言設計一個適應演算法(最先、最佳或最壞適應演算法)
考的是內存的動態劃分區域內容,很好寫啊
1.可以用數字來模擬內存區域劃分情況,比如建一個100大小的數組(結構為struc (區號,值),值為0表示空閑,值為1表示佔用,初始化幾個已確定佔有的分區,分區一,1-5 佔有,6-12 空閑,。。。。。。。,並建立空閑區域表,很簡單,從頭到尾對數組掃描下就知道了
2.最先適應:從內存開始地址找到第一個大於請求大小的連續空閑區域,如請求5個空間,那就在剛開始6-12空閑處建立分區二 ,6-11 ,佔用
3.最佳適應:指所有空閑塊最適應請求大小的那塊,min(空閑塊大小-請求大小)
4.最壞:指適應請求大小,且最大的那塊空閑區域
② A*演算法 和 最佳優先搜索演算法(Best-First-Search)
最佳優先搜索演算法是一種啟發式搜索演算法(Heuristic Algorithm),其基於廣度優先搜索演算法,不同點是其依賴於估價函數對將要遍歷的節點進行估價,選擇代價小的節點進行遍歷,直到找到目標點為止。 BFS演算法不能保證找到的路徑是一條最短路徑,但是其計算過程相對於Dijkstra
演算法會快很多 。
最佳優先搜索是一種啟發式搜索演算法。廣度優先搜索和深度優先搜索都屬於窮舉類型的搜索,需要依次遍歷所有的節點,當空間非常大的時候,這種方式的效率就會非常差。而啟發式的搜索是對狀態控制項中的每個點進行評估,然後選出最好的位置。
啟發估價函數公式為:
n表示當前的點,g(n)為從起始點到點n的實際代價,h(n)為從點n到目標點的估價。
(圖片來源於網路)
A*演算法將BFS演算法和Dijkstra演算法結合在一起,結合兩演算法的優點,既可以查找最短路徑的,有擁有和BFS差不多的效率。
(圖片來源於網路)
A*演算法詳解
模擬尋路的地址
③ 最短路徑優先演算法
從某頂點出發,沿圖的邊到達另一頂點所經過的路徑中,各邊上權值之和最小的一條路徑叫做最短路徑。解決最短路的問題有以下演算法,Dijkstra演算法,Bellman-Ford演算法,Floyd演算法和SPFA演算法等。
④ 先進先出演算法,最近最少使用演算法分別遵循程序執行的什麼特點
先進先高槐爛出演算法指的是先放入棧中的數據先出棧戚漏。例如隊列。
最少使用演算法是指將最近最少使用到的數據或程序用新的數據或程序從內存中明旁替換掉。
⑤ CACHE替換演算法有哪幾種,分別簡要說明
其代表演算法有:①Hybrid演算法:演算法對Cache中的每一個對象賦予一個效用函數,將效用最小的對象替換出Cache;②LowestRelativeValue演算法:將效用值最低的對象替換出Cache;③(LCNR)演算法:該演算法使用一個關於文檔訪問頻次、傳輸時間和大小的推理函數來確定替換文檔;④Bolot等人提出了一種基於文檔傳輸時間代價、大小、和上次訪問時間的權重推理函數來確定文檔替換;⑤SizeAdjustLRU(SLRU)演算法:對緩存的對象按代價與大小的比率進行排序,並選取比率最小的對象進行替換
擴展知識:
Cache是一種根據程序局部性原則,通過小容量速度快的存儲器緩存部分數據,以減少處理器對慢速大容量存儲器的訪問次數,從而提升處理器取指效率的機制。Cache替換演算法是指當Cache缺失發生後,Cache按某種機制選中高速緩存中的某個地址進行數據更新。Cache替換演算法對Cache的命中率有較大的影響。目前主流的Cache替換演算法有偽隨機、先進先出(FIFO——First In First Out)和最近最少使用(LRU——Least Recently Used)等。相較於偽隨機和先進先出演算法,LRU演算法更符合程序局部性原則(當前執行的程序代碼,在不久後會再次訪問該代碼段),Cache的命中率更高,但其硬體資源消耗非常大。
傳統的LRU演算法對Cache的每一路進行統計,在需要替換時,將最近最少被使用的那一路替換。由於傳統LRU演算法的數據使用頻率統計為向上計數,故其計數器計數位寬較大,且需要額外的機制來處理計數溢出的情況。
⑥ 最短作業優先演算法
以下是最短作業優先演算法
最短作業優先調度演算法是對預計執行時間短的作業(進程)優先分派處理機,通常後來的短作業不搶先正在執行的作業。這種演算法稱為這種演算法會根據作業長短,也就是作業服務時間的多少來調度作業,服務時間短的會被優先調度執行。
通常情況下,對於簡單的時間觸發式調度器來說,待命任務列表的數據結構的設計要盡可能縮短最壞賣嫌情況下,程序在調度器關鍵部分的執行時間,以防止其他任務一直在待命列表中,無法及時執行。
因此,在這種調度器中,應盡可能避免搶占式任務,甚至應該關閉調度器之外的所有中斷。當然,待命任務列表的數據結構也應根據這個系統需要的最大任務數量做進一步的優化。
⑦ 「prim」 演算法 是誰最先提出在那篇著作裡面提出來的對現在有什麼意義有什麼應用最好詳細點。謝謝
Prim演算法是圖論中求最小生成樹的一種演算法,最早於1930年由捷克數學家Vojtěch Jarník發現;並在1957年由美國計算機科學家Robert C. Prim獨立發現,1959年Edsger Dijkstra再次發現了該演算法賀芹,參見論文:
R. C. Prim. Shortest Connection Networks And Some Generalizations
JOSEPH B. KRUSKAL, JR. ON THE SHORTEST SPANNING SUBTREE OF A GRAPH AND THE TRAVELING SALESMAN PROBLEM
該演算法用於求解圖的最小生成樹,所有可轉換為求圖的最小生成樹銷渣的問題的應用均可以應虧拍悄用Prim演算法來解決,他本人的論文里也提及了部分應用。
⑧ 虛擬存儲器採用的頁面調度演算法是「先進先出」(FIFO)演算法嗎
虛擬存儲器採用的頁面調度演算法是「先進先出」(FIFO)演算法嗎。常見的替換演算法有4種。
①隨機演算法:用軟體或硬體隨機數產生器確定替換的頁面。
②先進先出:先調入主存的頁面先替換。
③近期最少使用演算法(LRU,Least Recently Used):替換最長時間不用的頁面。
④最優演算法:替換最長時間以後才使用的頁面。這是理想化的演算法,只能作為衡量其他各種演算法優劣的標准。
虛擬存儲器的效率是系統性能評價的重要內容,它與主存容量、頁面大小、命中率,程序局部性和替換演算法等因素有關。
(8)最近最先演算法擴展閱讀
虛擬存儲器地址變換基本上有3種形虛擬存儲器工作過程式:全聯想變換、直接變換和組聯想變換。任何邏輯空間頁面能夠變換到物理空間任何頁面位置的方式稱為全聯想變換。每個邏輯空間頁面只能變換到物理空間一個特定頁面的方式稱為直接變換。
組聯想變換是指各組之間是直接變換,而組內各頁間則是全聯想變換。替換規則用來確定替換主存中哪一部分,以便騰空部分主存,存放來自輔存要調入的那部分內容。
在段式虛擬存儲系統中,虛擬地址由段號和段內地址組成,虛擬地址到實存地址的變換通過段表來實現。每個程序設置一個段表,段表的每一個表項對應一個段,每個表項至少包括三個欄位:有效位(指明該段是否已經調入主存)、段起址(該段在實存中的首地址)和段長(記錄該段的實際長度)。
⑨ FIFO調度演算法和LRU演算法
FIFO:先進先出調度演算法
LRU:最近最久未使用調度演算法
兩者都是緩存調度演算法,經常用作內存的頁面置換演算法。
打一個比方,幫助你理解。
你有很多的書,比如說10000本。
由於你的書實在太多了,你只能放在地下室裡面。
你看書的時候不會在地下室看書,而是在書房看書。
每次,你想看書都必須跑到地下室去找出來你想看的書,
然後抱回來放到書桌上,之後才開始看。
還有就是,有一些書你會反復的看,今天看了也許過幾天又要看。
總之,你自己是不知道你哪天會需要看哪本書的。
你的老師每天下課的時候會給你布置一個書單,讓你晚上回去去看哪本書。
(假設你老師讓你看的書在你的地下室裡面都有)
跑地下室當然是非常麻煩的,所以你希望你的經常看的那些書最好放在書桌上。
但是你的書房的書桌同時只能擺放10本書(這個是假設的啊)。
那麼,問題來了。
到底把哪些說留在書桌上最好呢?
這里說的最好,就是說你盡量少的跑地下室去找書。
為了解決這個問題,人們發明了很多的演算法。
其中,比較常見的就是上面這兩種:FIFO演算法和LRU演算法。
FIFO演算法
很簡單,我把書桌上的10本書按照放置時間先後堆放成一堆。
這里的放置時間,就是說這本書在我的書桌上放了幾天了。
每次要看書的時候,我先在書桌上找,找到就直接可以讀了。
讀完之後放回原來的位置就可以,不打亂順序。
如果書桌上面沒有我要讀的書,就去地下室找。
找來之後,我就把書桌上放的時間最長的那本(也就是
書堆裡面最下面的那本書)放回地下室。
然後把我今天需要看的這本書放在書堆的最上面。
LRU演算法
也不難,我把書桌上的10本書按照閱讀時間先後堆放成一堆。
這里的閱讀時間,就是說我最近一次讀這本書是幾天之前。
每次要看書的時候,我先在書桌上找,找到就直接可以讀了。
讀完之後放在書堆的最上面。
如果書桌上面沒有我要讀的書,就去地下室找。
找來之後,我就把書桌上最久沒有閱讀的那本
(也就是書堆裡面最下面的那本書)放回地下室。
然後把我今天需要看的這本書放在書堆的最上面。
上面這個比方,相信你可以看明白吧。
這里的地下室對應內存,書桌對應緩存,書對應頁面。
⑩ 先進先出演算法
這題又不難的,畫個圖就出來了,不會畫的話就對比計算機組成原理課本上的那個圖。先進先出是8次