国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

用SQL解決有向圖問題

2024-07-21 02:33:24
字體:
供稿:網(wǎng)友
    一個常見的高級計算機科學(xué)問題可以在“有向圖”的范疇之下描述。有向圖是由一組向量和邊所連接的一組有限的節(jié)點。例如,一個節(jié)點可以想象為一座“城市”,而每個向量可以想象為兩座城市間的一個“航線”。     有很多算法和論文講到如何解決每種可能路線的遍歷問題以及尋找最短路徑或者最小代價路徑的問題。這些算法中大部分都是過程化的,或者是使用遞歸方面來解決的。然而 SQL 的聲明性語言使得解決復(fù)雜的有向圖問題更加輕易,而且不需要很多代碼。    讓我們以兩座城市之間的航線為例子,創(chuàng)建一個表保存一些假想數(shù)據(jù):create table airports
(
    code        char(3) constraint airports_pk PRimary key,
    description varchar2(200)
);insert into airports values ('LHR','London Heathrow, UK');
insert into airports values ('JFK','New York-Kennedy, USA');
insert into airports values ('GRU','Sao Paulo, Brazil');create table fares
(
    depart      char(3),
    arrive      char(3),
    price       number,
    constraint fares_pk primary key (depart,arrive),
    constraint fares_depart_fk foreign key (depart) references airports,
    constraint fares_arrive_fk foreign key (arrive) references airports
);insert into fares values('LHR','JFK',700);
insert into fares values('JFK','GRU',600);
insert into fares values('LHR','GRU',1500);
insert into fares values('GRU','LHR',1600);    不能使用CONNECT BY 語法來解決如何從倫敦到圣保羅,因為在圖中有數(shù)據(jù)產(chǎn)生一個環(huán)(從圣保羅飛回):select * from fares connect by prior arrive = depart start with depart = 'LHR';
ERROR:
ORA-01436: CONNECT BY loop in user data    要解決有向圖問題,我們需要創(chuàng)建一個臨時表來保存兩個節(jié)點之間所有可能的路徑。我們必須注重不復(fù)制已經(jīng)處理過的路徑,而且在這種情況下,我們不想路徑走回開始處的同一個地點。我還希望跟蹤到達(dá)目的地所需航程的數(shù)目,以及所走路線的描述。    臨時表使用以下腳本創(chuàng)建:create global temporary table faretemp
(
    depart      char(3),
    arrive      char(3),
    hops        integer,
    route       varchar2(30),
    price       number,
    constraint faretemp_pk primary key (depart,arrive)
);    一個簡單的視圖可以在稍微簡化這個例子中使用的代碼。視圖可以根據(jù) fares 表中的單個航程計算從 faretemp 表中的一個路徑到達(dá)一下一個航程的數(shù)據(jù):create or replace view nexthop
as
    select src.depart,
           dst.arrive,
           src.hops+1 hops,
           src.route','dst.arrive route,
           src.price + dst.price price
      from faretemp src,fares dst
     where src.arrive = dst.depart
       and dst.arrive !
= src.depart;
/
show errors;

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 深圳市| 汉中市| 正阳县| 清河县| 博兴县| 扎鲁特旗| 金华市| 慈利县| 峡江县| 绥芬河市| 龙南县| 夏邑县| 柳河县| 绥江县| 信阳市| 元谋县| 河南省| 康乐县| 依安县| 广饶县| 基隆市| 若羌县| 贵定县| 巴马| 始兴县| 呼和浩特市| 昌江| 利津县| 会泽县| 大洼县| 乳源| 白水县| 汾西县| 信丰县| 兰溪市| 仙游县| 霸州市| 勐海县| 闻喜县| 广安市| 中牟县|