国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 读书| 夹江县| 巴青县| 石嘴山市| 轮台县| 深水埗区| 古丈县| 沂水县| 乐清市| 焦作市| 岚皋县| 丰原市| 耿马| 乐都县| 泸定县| 遂平县| 彰化市| 清流县| 新乐市| 桑植县| 福海县| 蒙城县| 安远县| 高要市| 吴川市| 佛山市| 定远县| 汪清县| 朝阳区| 邢台市| 房产| 始兴县| 高唐县| 寻甸| 毕节市| 阿勒泰市| 阿克苏市| 贵南县| 东平县| 新野县| 上高县|