圖書館演算法
A. 圖書館圖書索引過程中用到的的演算法
圖書索書號一般包括兩個部分(多數情況下佔2行),一是分類號,二是區分號。分類號表示這本書屬於哪一學科類別,區分號表示本圖書館該類圖書的不同品種區分。比如一圖書館買了很多種「c語言編程」的圖書,有張三編的,有李四編的。
B. 求助:實現圖書館借書系統
#include <iostream>
#include <string>
using namespace std;
class Book //設置圖書館藏書類,用以封存圖書信息
{
public:
Book (string n, int N, string p) //圖書類構造函數
{
name = n; //設置圖書書名
NO = N; //設置圖書庫存量
publisher = p; //設置圖書出版社
}
void display() //display函數,以顯示圖書信息
{
cout << "書名:" << name << endl;
cout << "目前庫存:" << NO << endl;
cout << "圖書出版社:" << publisher << endl;
cout << endl;
}
//為方便調用,以下數據全部定義為公用
string name; //圖書書名
int NO; //圖書庫存量
string publisher; //圖書出版社
};
//創建圖書館藏書小資料庫,圖書序號等於該對象數組的下標
Book book[6] =
{
Book ("C++ primer", 3, "人民郵電出版社") ,
Book ("Python核心編程", 3, "人民郵電出版社") ,
Book ("Writing clean code", 3, "電子工業出版社") ,
Book ("簡體中文Solaris 10用戶指南", 3, "Sun Microsystems, Inc") ,
Book ("《The C Programming Language》第二版", 3, "機械工業出版社") ,
Book ("計算機程序設計藝術第三版第一卷:基本演算法", 3, "國防工業出版社")
};
void display_all() //顯示圖書館所有圖書,方便讀者借閱
{
int i;
cout << "這是圖書館的所有圖書" << endl;
for (i = 0; i<6; i++)
{
cout << "圖書序號:" << i << endl;
cout << "書名:" << book[i].name << endl;
cout << "目前庫存:" << book[i].NO << endl;
cout << "圖書出版社:" << book[i].publisher << endl;
cout << endl;
}
}
class people
{
public:
people(string nam, int num) //student構造函數
{
name = nam;
number = num;
}
void borrow(int); //定義借書成員函數
void back(int); //定義還書成員函數
private:
string name; //性名
int number; //在圖書館已借圖書數量
};
// student類,用以定義學生信息
class student : public people
{
public:
student(string nam, int num, int gra) : people (nam, num) //student構造函數
{
grade = gra;
}
private:
int grade; //學生年級
};
//teacher類,teacher是student的派生類
class teacher : public people
{
public:
teacher(string nam, int num, string t) : people(nam , num) //派生類構造函數
{
title = t; //教師職稱
}
private:
string title; //教師職稱
};
void people :: borrow (int a) //借書成員函數
{
int i, j; //定義兩個整型變數,以便需要shirt使用
char k; //定義字元型變數以便進行Y/N的判斷
void service() ; //聲明service函數
if (number >= a) //首先進行許可權判斷,如果讀者已借書數量不小於他的許可權,則提示進行其他操作
{
cout << "根據您的許可權,你最多能借" << a << "本書!您現在不能借書歡迎下次再來" << endl;
cout << "您是否想進行其他操作? (是請輸入y, 退出請輸入n) " << endl;
cin >> k;
if (k == 121)
service ();
if (k == 121)
return;
else if (k = 110)
return;
cout << endl;
}
else
{
display_all() ; //調用display_all函數,輸出所有圖書顯示,方便讀者借閱
cout << "您想借哪本書? 請輸入圖書序號0-5" << endl;
cin >> i;
while (book[i].NO == 0 || i>5 || i<0) //判斷所要借圖書的庫存及輸入的合法性
{
cout << "您輸入的圖書序號錯誤或者所借書庫存不足,請重新輸入.圖書序號是0-5" << endl;
cin >> i;
//提示讀者是否進行其他操作
cout << "您是否想進行其他操作? (是請輸入y, 繼續借書請輸入n) " << endl;
cin >> k;
if (k == 121)
service (); //如果讀者要進行其他操作,則引用service函數,對讀者進行重新引導
if (k == 121)
return; //進行其他操作完畢,直接跳出borrow函數
else
continue; //若讀者選擇繼續借書,則跳出本次循環,進行下一次循環
}
cout << endl; //此處還行是為了人機界面的美觀
cout << "以下是您要借的書籍的信息" << endl;
book[i].display();
cout << "您想借幾本書?" << endl;
cin>>j;
//判斷讀者的許可權、圖書館庫存及輸入的合法性
while ((a-number)<j || book[i].NO<j || j<0 || j>3)
{
cout << "因為你的許可權不夠、數量輸入有誤或者圖書館庫存不足,";
cout << "你目前不能借這么多書!請輸入一個合適的數目." << endl;
cin>>j;
//提示讀者是否進行其他操作
cout << "您是否想進行其他操作? (是請輸入y, 繼續借書請輸入n) " << endl;
cin>>k;
if (k == 121)
service();
if (k == 121)
return;
else
continue;
cout << endl;
}
book[i].NO = book[i].NO - j; //借書完畢,對圖書館的小資料庫從新調整一下
number = number + j; //借書完畢,讀者已借書籍數量要加上現在借的書數量
cout << endl;
cout << "您在圖書館還可以借 " << a - number << " 本書" << endl;
cout << "《" << book[i].name << "》" << "目前剩餘" << book[i].NO << "本" << endl;
}
} //borrow函數結束
void people::back (int a) //還書成員函數
{
int n, m;
char k;
void service() ;
cout << "您要還哪本書" << endl;
cin >> n;
while (book[n].NO = 3) //判斷圖書館庫存,庫存是滿的,那就沒人從這借過這種書而且沒還
{
cout << "您借過這本書嗎?請重新輸入圖書序號. " << endl;
cin>>n;
cout << "您是否想進行其他操作? (是請輸入y, 繼續還書請輸入n) " << endl;
cin>>k;
if (k == 121)
service();
if (k == 121)
return;
else
continue;
cout << endl;
}
while (n>5 || n<0) //判斷讀者所要借的書是否存在
{
cout << "您輸入的圖書序號錯誤,請重新輸入.圖書序號是0-5. " << endl;
cin>>n;
cout << "您是否想進行其他操作? (是請輸入y, 繼續還書請輸入n) " << endl;
cin >> k;
if (k == 121)
service () ;
if (k == 121)
return;
else
continue;
cout << endl;
}
cout << endl; //此處換行是為了人機界面的美觀
cout << "以下是您要借的書籍的信息" << endl;
book[n].display () ;
cout << "你要還幾本書" << endl;
cin >> m;
//判斷圖書館這種書的庫存是否小於讀者要還的書的數量,及讀者輸入的合法性
while ((3-book[n].NO) <m || m>3)
{
cout << "您有借過這么多書嗎?請重新輸入." << endl;
cin >> m;
cout << "您是否想進行其他操作? (是請輸入y, 繼續借書請輸入n) " << endl;
cin >> k;
if (k == 121)
service ();
if (k == 121)
return;
else if (k = 110)
continue;
cout << endl;
}
book[n].NO += m; //還書完畢,及時對圖書館的資料庫進行整理
number -= m; //讀者已借書籍數減輕現在所還書籍數量
//以下是一些給讀者的提示信息
cout << "恭喜!您還書成功!" << endl;
cout << "你還可以借 " << a-number << " 本書!" << endl;
} //back函數結束
void service () //service函數,完成對讀者的服務、詢問功能
{
int a;
int b;
student stud("ming", 0, 2007); //定義student類的對象stu,並初始化
teacher tea("li", 0, "assistant"); //定義teacher類的對象tea,並初始化
//詢問讀者身份,給出選項
cout << "歡迎來到圖書館,請問您的身份是: (請輸入首數字) " << endl;
cout << "1.教師" << endl;
cout << "2.學生" << endl;
cin >> a;
while (a != 1 && a != 2) //對讀者的錯誤輸入進行提醒
{
cout << "請輸入正確的選項:" << endl;
cin >> a;
}
cout << endl;
cout << "請問您想要: (請輸入首數字) " << endl; //詢問讀者所希望進行的工作,給出選項
cout << "1.借書" << endl;
cout << "2.還書" << endl;
cout << "3.離開借書台" << endl;
cin >> b;
while (b != 1 && b != 2 && b != 3) //對讀者的錯誤輸入進行提醒
{
cout << "請輸入正確的選項" << endl;
cin >> b;
}
cout << endl;
if (a == 1) //如果讀者是老師,則進行以下操作
{
if (b == 1)
{
tea.borrow(6); //調用借書函數
}
else if (b == 2)
{
tea.back(6); //調用還書函數
}
else
{
cout << " = ^_^ = 謝謝您的光臨!\n" << endl; //退出
}
}
else if (a == 2) //如果讀者是學生,則進行以下操作
{
if (b == 1)
{
stud.borrow(4);
}
else if (b == 2)
{
stud.back(4);
}
else
{
cout << " = ^_^ = 謝謝您的光臨!\n" << endl;
return;
}
}
cout << endl;
} //service函數結束
//主函數
int main()
{
char k;
service() ;
while (1) //操作完畢,提示讀者是否進行其他操作。
{
cout << "是否繼續進行其他操作?";
cout << " (進行其他操作請輸入y, 退出請輸入n) " << endl;
cin >> k;
cout << endl;
if (k == 121)
service ();
else
cout << " = ^_^ = 謝謝您的光臨!\n" << endl;
break;
}
return 0;
}
C. 經常聽到「數據結構和演算法」,但我在圖書館沒找到《演算法》只找到《數據結構》。 是不是《數據結構》包含
演算法:
可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題
所以演算法是一個非固定的東西,它可以有千千萬萬,比如,一個取隨機數的演算法,每個人寫的演算法也都不一定相同
數據結構:
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率
D. 上海圖書館演算法租界嗎
不演算法租界。
上海法租界是法國在舊中國四個租界(廣州灣不是租界,歸屬法屬印度支那管轄)中面積最大、發展最好的一個租界。法租界在上世紀三十年代達到發展的頂峰,此後隨著日軍全面侵華,法租界短暫地成為日佔上海中的孤島,並在1943年由當時的傀儡維希法國政權移交給傀儡汪精衛政權,正式退出了歷史舞台。
上海圖書館位於上海市徐匯區淮海中路,是上海市綜合性研究型公共圖書館和行業情報中心,也是全國文化信息資源共享工程上海市分中心、文化部公共文化研究基地,是首批國家重點古籍保護單位。
E. 基於大數據的圖書館個性化服務讀者行為分析方法和策略
1. 基於大數據的圖書館個性化服務讀者行為分析方法與步驟
基於大數據的圖書館個性化服務讀者行為分析,是指圖書館基於事件存儲大資料庫數據的支持,通過對用戶海量數據進行採集、過濾、分析和定義,從中發現讀者行為數據中蘊含的行為關系、用戶需求和知識,是對讀者的行為進行分析、判定、定義和匹配的過程,也是圖書館掌握讀者閱讀習慣和發現服務需求,提高個性化服務精確性和用戶滿意度的關鍵,讀者行為分析與判定流程見圖2-2。
讀者行為分析過程可分為用戶行為事件採集、用戶行為事件的存儲、用戶行為事件初步過濾、用戶行為定義、用戶行為分析與判定、用戶行為匹配、用戶行為存儲大資料庫的更新、行為分析與判定過程的完善8部分內容。在用戶行為事件分析、判定前,圖書館應全面、規范地採集讀者行為數據,並對數據進行科學分類、綜合分析、行為定義和人工匹配,構建具備海量存儲、高效管理和查詢功能的用戶行為事件存儲大資料庫。
當圖書館完成對用戶行為數據的採集後,首先,應依據對用戶行為的分類和管理員經驗,對用戶行為數據進行價值過濾和人工篩選,以提高行為數據的價值密度和可用性。其次,對用戶行為發生的時間、地點、方式、作用對象和結果進行定義,採用高效演算法對存儲於用戶行為事件大資料庫中的資源進行分析、判定,並對用戶行為的類型進行詳細定義。再次,應將已定義的用戶行為和用戶行為存儲大資料庫中的數據進行比對,進一步完善、規范用戶行為存儲大資料庫的資源。同時,利用用戶行為存儲大資料庫資源,對用戶行為分析與判定的規則實施反饋,完成對用戶行為分析、判定規則的動態修改與完善。最後,圖書館可依據讀者行為分析與判定的結果,明確讀者閱讀需求及其變化趨勢,為讀者提供個性化的閱讀推送式服務。
圖2-2 圖書館讀者行為分析與判定流程圖
個性化服務是一個不斷完善的過程,多次經過行為模擬和分析反復校準才能讓個性化服務盡可能貼近每一個用戶。如通過記錄用戶訪問某些專業內容來判斷為用戶推薦的相關內容或深度內容是否精準,就需要不斷地積累用戶在某專業內容上的行為記錄,記錄次數越多,記錄越精細,在下一次為用戶做個性化推薦時的精準度就越高。所以個性化服務所需的數據分析系統包括採集與感知都是循環起效的,這是一個閉環上升的垂直優化體系。
2.基於大數據的圖書館個性化服務讀者行為分析策略
(1)發現讀者需求及變化趨勢。大數據背景下,圖書館可通過監控設備、感測器網路和其他讀者行為採集設備,獲取讀者閱讀活動的服務內容與方式、閱讀終端與服務模式、閱讀社會關系組成、成員信息交流、論壇、博客、微博、微信朋友圈等社交網路上的思想表達、移動閱讀中讀者個體的行為路徑、感測器網路對讀者活動的記錄、服務系統的運行參數信息等數據,這些數據蘊含著巨大的社會和商業價值。因此,圖書館力圖採集讀者行為大數據,將讀者行為進行解析、描述和量化,最終實現對讀者服務需求、服務模式變化趨勢預測與控制。同時,圖書館應注重讀者行為數據分析的時效性,及時獲取讀者閱讀情緒和服務需求的變化數據,並將數據變化結果可視化表現出來,確保服務策略和內容隨著讀者個性化需求變化而動態調整。
(2)最大范圍的採集讀者行為數據。科學採集高價值讀者行為數據,是准確分析和預測讀者需求,提高讀者忠誠度和服務滿意度的關鍵。首先,圖書館應從讀者服務全局出發,收集讀者的行為數據,採集來自伺服器運行監控設備、感測器網路、用戶閱讀終端設備、系統運行日誌、讀者論壇與博客、讀者服務反饋系統、網頁cookies、搜索引擎、讀者閱讀行為監控設備的數據,盡量減少用戶行為數據採集的盲點,提高數據的完整性、精確性、及時性和有效性。其次,所採集的數據應具有海量和實時性特點,依據讀者閱讀需求對讀者行為分析的內容,選取數據和應用對象進行調整,避免讀者行為分析過程中可能會對讀者服務產生的消極影響,最終實現從理解讀者閱讀行為到掌握讀者閱讀需求的轉變。再次,圖書館應與第三方服務商合作,以服務協作和大數據資源共享的方式,努力拓展讀者行為數據採集的廣度和深度,在實現以讀者為中心的讀者行為數據選擇、過濾、共享和互補前提下,提高數據應用分析和增強數據的可用性。
(3)保證讀者行為數據的安全性和可用性。讀者行為數據具有海量、全面、高價值和實時性的特點,圖書館應加強對讀者行為數據的安全性和可用性管理,保證用戶保密信息和隱私數據的安全。但是,移動終端工作模式和使用環境的不確定性,嚴重影響了圖書館大數據閱讀服務的安全性,因此,必須加強閱讀終端的安全性管理。首先,圖書館應依據閱讀終端的安全設計標准及其移動性、開放性,以及閱讀終端與讀者閱讀行為的關聯性,為不同類型的閱讀終端劃分相應安全度,並通過嚴格限制閱讀終端的使用對象、安全模式、應用環境和通信方式來保證設備安全。其次,應將讀者行為數據劃分為用戶隱私數據、讀者特徵數據、行為日誌數據和公開數據四個安全等級,執行相應的安全存儲、管理和使用策略,並依據用戶行為數據生命周期發展規律,加強數據收集、存儲、使用、轉移和刪除五個環節的安全管理。再次,應堅持讀者需求精確感知、行為關系全面挖掘、服務模式發展准確預測和讀者行為科學分析的原則,實現讀者行為數據的良性監控和採集,避免採集與讀者閱讀服務保障無關的個人隱私行為數據。
(4)重點突出讀者閱讀行為數據挖掘的知識關聯分析。知識關聯分析就是從海量數據中發現存在於大量數據集中的關聯性或相關性,從而描述了一個事物中某些屬性同時出現的規律和模式,通過讀者閱讀行為數據的知識關聯分析,發現讀者不同行為之間的聯系,以及讀者的閱讀習慣和服務需求,是圖書館以讀者需求為中心制定服務策略的前提。圖書館應在三維空間開展讀者閱讀行為數據的交叉關聯分析,所涉及的主要內容包括讀者閱讀活動頻率、閱讀的時間與地點、閱讀內容分布規律、閱讀習慣和愛好、閱讀關鍵詞關聯度、閱讀社會關系交集、熱點內容的關注度等。同時,行為數據的選擇要堅持以服務保障為中心和高價值的原則,特別加強對讀者閱讀活動的熱點內容、主要閱讀模式和個性化服務需求反饋行為數據之間的關聯分析。此外,基於讀者閱讀行為數據挖掘的知識關聯分析,應加強對讀者閱讀行為的跟蹤和監控,在加強對讀者顯性行為特徵數據監控的同時,還應突出利用顯性行為數據挖掘,而獲得隱性行為信息。對讀者閱讀需求、閱讀熱點、閱讀行為關聯性等進行關聯分析,增強讀者行為知識關聯分析的廣度、深度和有效性。
F. 幫忙寫個c語言圖書管理系統的演算法描述啊萬分感激!!!
這個很簡單,,C語言的初級知識就可以寫了。。好好看下c。。
G. 基於哈夫曼演算法建立圖書館管理系統
試為這樣的信息收發站寫一個哈夫曼編碼的編/解碼系統。 [基本要求] ; ;以前做過的,我有源程序,編碼,解碼都有.只要改一下字母頻率就可以了我
H. 某圖書室共有100本圖書,均被借過。其中甲借閱過
正常的演算法,求至少有一人借過的書的數量:
甲+乙+丙-(甲乙)-(乙丙)-(甲丙)+(甲乙丙)
現在,甲,乙,丙,甲乙,乙丙,甲丙都已知,
至少有一人借過的書的數量為:
33+44+55-29-36-25+(甲乙丙)
=42+(甲乙丙)
甲乙29
甲丙25
乙丙36
那麼甲乙丙都借過的書最多為25
所以至少一人借過的書,最多有:
42+25=67本
那麼沒有被借過的書,至少有:
100-67=33本