database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40746 게시물 읽기
No. 40746
쿼리 퀴즈입니다.(파스칼 삼각형)
작성자
김흥수(protokhs)
작성일
2015-03-18 16:53ⓒ
2015-03-31 14:12ⓜ
조회수
6,965

 여기 글을 뒤져보면 장진주 님이 만드신 파스칼 삼각형 쿼리 퀴즈가 있습니다.

같은 문제인데요..

 

단 파스칼 삼각형의 일반항 공식 (nCr = n! / ( r! * (n-r)! ))은 사용하지 않고

다음과 같이 출력해야 합니다.

 

1
1
1
1
2
1
1
3
3
1
1
4
6
4
1
1
5
10
10
5
1
1
6
15
20
15
6
1
1
7
21
35
35
21
7
1
1
8
28
56
70
56
28
8
1
1
9
36
84
126
126
84
36
9
1
 
==> n=10 까지의 결과
 
함 도전해보시길...
이 글에 대한 댓글이 총 1건 있습니다.

 문제가 재미없나보네요...

 

일반항을 사용하는 경우
파스칼 삼각형의 공식은
nCr = n! / ( r! * (n-r)! ) 이고
 
n! 은 exp(sum(ln(n)) 으로 구할 수 있으므로
 
with base_line as
(
    select
        level-1 l
    from    dual
    connect by  level <= 10
)
, base_fct as
(
    select
        a.l+1 l
        ,round(exp(sum(ln(a.l+1)) over (order by a.l))) fct
    from    base_line a
    union all
    select
        0
        ,1
    from    dual
)
, base_frame as
(
    select
        b.l n
        ,a.l k
    from    base_line a
            , base_line b
    where   a.l <= b.l
)
select
    a.n
    , a.k
    , b.fct / ( c.fct * d.fct ) n_c_k
from    base_frame a
        , base_fct b
        , base_fct c
        , base_fct d
where   a.n = b.l
and     a.k = c.l
and     (a.n - a.k) = d.l
order by
    a.n
    ,a.k
 
 
 
점화식으로 구하기
 
An1 = 1
Ann = 1
Ank = A(n-1)(k-1) + A(n-1)k
 
이므로 이를 구하면
 
select
    *
from
    (
        select
            b.l n
            ,a.l k
        from    (
                    select
                        level-1 l
                    from    dual
                    connect by  level <= 10
                ) a
                , (
                    select
                        level-1 l
                    from    dual
                    connect by  level <= 10
                ) b
        where   a.l <= b.l
        order by
            n,k
    ) a
model
    DIMENSION by (n,k)
    MEASURES ( CAST(1 AS NUMBER) n_c_r )
    RULES AUTOMATIC ORDER
    (n_c_r[n,k] = case when cv(n) = 0 and cv(k) = 0 then 1 else nvl(n_c_r[cv(n)-1,cv(k)-1],0) + nvl(n_c_r[cv(n)-1,cv(k)],0) end)
 
김흥수(protokhs)님이 2015-03-25 10:21에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40749OCP 자격 취득
정용석
2015-03-19
6346
40748오라클 tree 구조 질문좀 드립니다. [6]
ka
2015-03-19
7910
40747체적쿼리 질문입니다. [11]
초보자
2015-03-18
9544
40746쿼리 퀴즈입니다.(파스칼 삼각형) [1]
김흥수
2015-03-18
6965
40745마농님 지정시간 관련 sql 문의드립니다. [2]
김태경
2015-03-17
7291
40744그룹해서 최대 데이터 4개 출력 [2]
윤민근
2015-03-17
6349
40738[쿼리질문] 세로열을 가로열로 만들기 [4]
최혁준
2015-03-17
7980
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다