아 날로 그 LRU 알고리즘 & 채널 처리 알고리즘
13750 단어 LRU
아 날로 그 LRU 페이지 교체 알고리즘:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #define TN 3 //
6 #define PN 10 //
7
8 int page[TN],cnt[PN]; //
9 typedef struct PAGE{
10 int kPage; //the kth line
11 int aPage; //address page
12 int cnt; //
13 }PAGE;
14
15 PAGE pg[PN]; //
16 int cmp(const void *a, const void *b){
17 return ((PAGE *)b)->cnt - ((PAGE *)a)->cnt;
18 }
19
20 /* */
21 void init(int k, int p){
22 for(int i=0;i<k;i++){
23 if(pg[i].aPage==p)
24 pg[i].cnt=1;
25 }
26 }
27
28 /* , */
29 int findMax(){
30 int ans=0, max_cnt=-1, cnt, index;
31 int i,j;
32 for(i=0;i<TN;i++) {
33 /* */
34 for(j=0;j<PN;j++){
35 if(page[i] == pg[j].aPage){
36 cnt = pg[j].cnt;
37 break;
38 }
39 }
40
41 if(max_cnt < cnt) {
42 max_cnt = cnt;
43 ans = i;
44 index = j;
45 }
46 }
47 return ans;
48 }
49
50 int main(){
51 int i,p,k=0; /*p: ,k: */
52 memset(page,0,sizeof(page));
53 memset(cnt,0,sizeof(cnt));
54 memset(pg,0,sizeof(pg));
55
56 while(~scanf("%d",&p)){
57 int inserted=0, hit=0;
58
59 pg[k].aPage=p;
60 for(i=0;i<=k;i++) {
61 pg[i].cnt+=1;
62 }
63 printf(" %d :
",k+1);
64 for(i=0;i<TN;i++) {
65 if(p == page[i]) { //
66 pg[k].cnt=1;
67 inserted=1;
68 hit=1;
69 printf(" %d %d
",i+1,p);
70 break;
71 }
72 if(!page[i]){ //
73 page[i]=p;
74 pg[k].kPage=i;
75 pg[k].cnt=1;
76 inserted=1;
77 printf(" %d %d
",i+1,p);
78 break;
79 }
80 }
81 if(hit == 1) init(k,p);
82
83 /* , */
84 if(!inserted){
85 //qsort(page,N,sizeof(page[0]),cmp);
86 init(k,p);
87 int replaceIndex=findMax();
88 int old=page[replaceIndex];
89 page[replaceIndex]=p; //
90 printf(" %d %d %d
",replaceIndex+1,old,p);
91 }
92 printf("————————————
");
93 k++;
94 }
95 return 0;
96 }
바이트 다 중 채널 응답 과 장치 처리:
1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4
5 #define N 5 //
6 #define GAP 10 //
7
8 struct Device{
9 int cycle; //
10 int start; //
11 int priority; //
12 bool applied; //
13 }d[N];
14
15 /* */
16 void init() {
17 for(int i=0; i < N; i++) {
18 d[i].applied = false;
19 cin>>d[i].start>>d[i].cycle>>d[i].priority;
20 }
21 }
22
23 int cmp(const void *a, const void *b){
24 int c=((Device *)b)->priority - ((Device *)a)->priority; //
25 if(c == 0) return ((Device *)a)->start - ((Device *)b)->start;
26 else if(c > 0)
27 return 1;
28 else return -1;
29 }
30
31 void swap(Device **a, Device *b){
32 Device tmp;
33 tmp.cycle = (*a)->cycle;
34 tmp.priority = (*a)->priority;
35 tmp.start = (*a)->start;
36 tmp.applied = (*a)->applied;
37
38 (*a)->cycle = b->cycle;
39 (*a)->priority = b->priority;
40 (*a)->start = b->start;
41 (*a)->applied = b->applied;
42
43 b->cycle = tmp.cycle;
44 b->priority = tmp.priority;
45 b->start =tmp.start;
46 b->applied = tmp.applied;
47 }
48 void Quicksort(Device **p) {
49 for(int i=0; i<N; i++) {
50 if(d[i].applied == true) { //
51 if(d[i].priority > (*p)->priority) {
52 swap(p, &d[i]);
53 }
54 else if(d[i].priority == (*p)->priority){
55 if(d[i].start < (*p)->start)
56 swap(p, &d[i]);
57 }
58 }
59 }
60 }
61 void handle(int end_time){
62 int i,jv;
63 Device *p; //
64 for(i = 0; i<end_time; i+=GAP){
65 int k=0;
66 for(j = 0; j<N; j++) {
67 if(d[j].start <= i) {
68 d[j].applied=true; //
69 if(k==0) p=&d[j]; //
70 k++;
71 }
72 }
73 Quicksort(&p);
74
75 /* */
76 p->applied = false;
77 p->start+=p->cycle;
78 cout<<p->priority<<" "<<p->cycle<<endl;
79 }
80 }
81
82 int main(){
83 init();
84 int end_time;
85 cin>>end_time;
86 cout<<"
result:
";
87 handle(end_time);
88 return 0;
89 }
분류:
데이터 구조 & 알고리즘
현재 태그: 알고리즘
아 날로 그 LRU 알고리즘 & 채널 처리 알고리즘
Seiyagoo 2012 - 04 - 07 23: 25
확 장 된 유클리드 & 중국의 잉여 정리
Seiyagoo 2012 - 03 - 21 19: 05 댓 글 969 개
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
프로그래머스 캐시(LV2)지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다. 어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시작하였고...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.