Wednesday, April 04, 2007

Zip Code Distances

I am currently involved in a project where the program I am writing is supposed to return a list of the 10 doctors nearest to a visitor's zip code. Note that this is not the same as doctors in a given radius (say 10 miles), but it does use the same basic formula. This article will be the first of a two part series and lays the groundwork for calculating what is nearest to a zip code. In the second part I intend to show how I integrate this logic with a list of doctors with addresses.

Below you will find the results of my experimental queries that compare the classic radius methodology with my own "10 nearest" methodology. My production program uses a UDB (DB2) database, and I thought of the performance contrasts between UDB and MySQL was interesting, so I am going to show all the comparisons below. Finally, I wanted to show what differences there were between the more accurate "Haversine Formula" as compared to the less intensive "Spherical Law of Cosines" when calculating the distance between two points on a sphere. These examples should give you plenty of real life code you can use in your own programs.

The company I work for subscribes to the zip code database (referred to here as ZipUSA) from http://www.zipdatafiles.com/data/ The data comes from the United States Postal Service and other sources, but I have occasionally found strange geocoding results. I will probably write a different article about that using a different application that I have written.

Within 10 miles

Haversine Formula

The following finds the zip codes within 10 miles of 27712 using the haversine (great circle) equation. The field names are based on the ZipUSA tables.

SELECT DISTINCT
destination.zip_code,
3956 * 2 * ASIN(SQRT(
POWER(SIN((origin.lat - destination.lat) * 0.0174532925 / 2), 2) +
COS(origin.lat * 0.0174532925) *
COS(destination.lat * 0.0174532925) *
POWER(SIN((origin.lng - destination.lng) * 0.0174532925 / 2), 2)
)) distance

FROM
tblZipUSA origin,
tblZipUSA destination

WHERE
origin.zip_code = '27712'
AND
3956 * 2 * ASIN(SQRT(
POWER(SIN((origin.lat - destination.lat) * 0.0174532925 / 2), 2) +
COS(origin.lat * 0.0174532925) *
COS(destination.lat * 0.0174532925) *
POWER(SIN((origin.lng - destination.lng) * 0.0174532925 / 2), 2)
)) < 10

ORDER BY
distance, zip_code

The ZipUSA database was set up with the same indexes in MySQL and UDB (DB2). Queries in MySQL were run in the phpAdmin tool. The UDB/DB2 queries were run in Quest.


MySQL















































































zip_code distance
27712 0
27704 4.75326962990057
27705 5.34287681627437
27708 5.57383981806715
27503 5.58564401941337
27701 6.41245709075393
27706 6.58029004252293
27709 6.59449266010451
27702 6.61586916445661
27710 6.61586916445661
27711 6.61586916445661
27715 6.61586916445661
27717 6.61586916445661
27722 6.61586916445661
27707 8.57121741472298
27703 9.5828790270889
27278 9.58552637370736
27564 9.72570727493623
27509 9.80777888765073

Showing rows 0 - 18 (19 total, Query took 2.1139 sec)



DB2/UDB



















































































zip_code distance
27712 0
27704 4.75326962990023
27705 5.34287681627435
27708 5.57383981806714
27503 5.58564401941335
27701 6.41245709075397
27706 6.58029004252301
27709 6.5944926601046
27702 6.61586916445641
27710 6.61586916445641
27711 6.61586916445641
27715 6.61586916445641
27717 6.61586916445641
27722 6.61586916445641
27707 8.571217414723011
27703 9.582879027088699
27278 9.58552637370768
27564 9.725707274936291
27509 9.80777888765007

19 rows selected in 35.77 secs.


I was very shocked to have such a slow run time in UDB! I was expecting better performance from a corporate-level product. I also went back and checked all the indexes to verify they were on the same fields as were in my MySQL database. I do not have enough knowledge about UDB to explain why this disparity exists or how one might optimize the query to run better on this platform. I would not think one should have to do that.



Spherical Law of Cosines



SELECT DISTINCT
destination.zip_code,
3956 * ACOS(
SIN(origin.lat * 0.0174532925) * SIN(destination.lat * 0.0174532925) +
COS(origin.lat * 0.0174532925) * COS(destination.lat * 0.0174532925) *
COS((destination.lng - origin.lng) * 0.0174532925)
) AS distance

FROM
tblZipUSA origin,
tblZipUSA destination

WHERE
origin.zip_code = '27712'
AND
3956 * ACOS(
SIN(origin.lat * 0.0174532925) * SIN(destination.lat * 0.0174532925) +
COS(origin.lat * 0.0174532925) * COS(destination.lat * 0.0174532925) *
COS((destination.lng - origin.lng) * 0.0174532925)
) < 10

ORDER BY
distance, zip_code


MySQL



















































































zip_code distance
27712 0
27704 4.75326963012033
27705 5.34287681651191
27708 5.57383981817397
27503 5.58564401945863
27701 6.41245709087189
27706 6.58029004273494
27709 6.59449266019943
27702 6.61586916464669
27710 6.61586916464669
27711 6.61586916464669
27715 6.61586916464669
27717 6.61586916464669
27722 6.61586916464669
27707 8.57121741478871
27703 9.58287902708428
27278 9.58552637385399
27564 9.72570727482013
27509 9.80777888768795

Showing rows 0 - 18 (19 total, Query took 1.9229 sec)



DB2/UDB



















































































zip_code distance
27712 0
27704 4.75326963012037
27705 5.3428768165119
27708 5.57383981817396
27503 5.58564401945862
27701 6.41245709087191
27706 6.58029004247087
27709 6.59449266019946
27702 6.61586916438409
27710 6.61586916438409
27711 6.61586916438409
27715 6.61586916438409
27717 6.61586916438409
27722 6.61586916438409
27707 8.571217414991439
27703 9.58287902726561
27278 9.58552637385398
27564 9.72570727482014
27509 9.807778887510789

19 rows selected in 11.05 secs.



It is obvious that using the Spherical Law of Cosines equation is much faster than the Haversine Formula. MySQL shows a 5% improvement in speed and UDB shows a 53% performance improvement. It is also obvious that the distances calculated are very close. For these mile calculations, the first seven decimal places are the same. In most applications I have seen, the miles are rounded off to two decimal places, meaning that there is no reason to use the Haversine formula for distances as far apart as most "centers of zip codes" are. Haversine calculations are more suited to much closer calculations. Also, since zip code to zip code distances are only used for approximate distances, it would not make sense to nit-pick over the only-so-slightly more accurate results the Haversine formula gives. And even beyond that, accuracy depends a lot on the latitude and longitude data supplied. I have found that different sources have different geocoding information concerning the geographic center of zip codes.


10th closest




The next part of this experiment was to find the 10 nearest zip codes to the one given. The first step is finding out which zip ranks number 10. In this case it is simply a matter of choosing the 10th zip code from the list.


Haversine Formula



SELECT DISTINCT
destination.zip_code,
3956 * 2 * ASIN(SQRT(
POWER(SIN((origin.lat - destination.lat) * 0.0174532925 / 2), 2) +
COS(origin.lat * 0.0174532925) *
COS(destination.lat * 0.0174532925) *
POWER(SIN((origin.lng - destination.lng) * 0.0174532925 / 2), 2)
)) distance

FROM
tblZipUSA origin,
tblZipUSA destination

WHERE
origin.zip_code = '27712'

ORDER BY
distance, zip_code

LIMIT 10, 1










Zip Code Distance
27711 6.61586916445661

Showing rows 0 - 0 (1 total, Query took 3.4441 sec)



Spherical Law of Cosines



SELECT DISTINCT
destination.zip_code,
3956 * ACOS(
SIN(origin.lat * 0.0174532925) * SIN(destination.lat * 0.0174532925) +
COS(origin.lat * 0.0174532925) * COS(destination.lat * 0.0174532925) *
COS((destination.lng - origin.lng) * 0.0174532925)
) AS distance

FROM
tblZipUSA origin,
tblZipUSA destination

WHERE
origin.zip_code = '27712'

ORDER BY
distance, zip_code

LIMIT 10, 1










zip_code distance
27711 6.61586916464669

Showing rows 0 - 0 (1 total, Query took 3.1833 sec)



10th Closest Without PO Box Zip Codes


If you have a stiuation where you will be working only with street addresses and can eliminate the zip codes, there is some performance improvement. In the ZipUSA tables, this is accomplished by placing fac_cd and zip_class in the WHERE clause. However, I soon found that 1) some of our doctors are using P.O. Boxes, and 2) some small towns only have post offices with PO Boxes. I ended up not using that further past this experiment.



SELECT DISTINCT
destination.zip_code,
(3956 * (2 * ASIN(SQRT(
POWER(SIN(((origin.lat-destination.lat)*0.017453293)/2),2) +
COS(origin.lat*0.017453293) *
COS(destination.lat*0.017453293) *
POWER(SIN(((origin.lng-destination.lng)*0.017453293)/2),2)
)))) distance

FROM
tblZipUSA origin,
tblZipUSA destination

WHERE
origin.zip_code='27712'
AND destination.fac_cd = 'P'
AND destination.zip_class != 'P'

ORDER BY distance
LIMIT 10,1










Zip Code Distance
27703 9.58287927196898

Showing rows 0 - 0 (1 total, Query took 2.4226 sec)



Nearest 10



Now that we can find the 10th closest zip code, we can join the two types of queries together to find all the zip codes up to the closest 10th. As a pleasant side effect, if there is a tie for 10th place, all of those zip codes are included as well. This becomes particularly obvious in the case where several P.O. Box zip codes are served from the same post office, and thus have the same geocoding. Of course, it is possible that there will be two or more physically distinct zip codes that will be equidistant from a given reference zip code, but I can only imagine that would be a very rare case.



Haversine Formula



SELECT DISTINCT
destination.zip_code,
3956 * 2 * ASIN(SQRT(
POWER(SIN((origin.lat - destination.lat) * 0.0174532925 / 2), 2) +
COS(origin.lat * 0.0174532925) *
COS(destination.lat * 0.0174532925) *
POWER(SIN((origin.lng - destination.lng) * 0.0174532925 / 2), 2)
)) distance

FROM
tblZipUSA origin,
tblZipUSA destination,
(
SELECT DISTINCT
destination1.zip_code,
3956 * 2 * ASIN(SQRT(
POWER(SIN((origin1.lat - destination1.lat) * 0.0174532925 / 2), 2) +
COS(origin1.lat * 0.0174532925) *
COS(destination1.lat * 0.0174532925) *
POWER(SIN((origin1.lng - destination1.lng) * 0.0174532925 / 2), 2)
)) distance

FROM
tblZipUSA origin1,
tblZipUSA destination1

WHERE
origin1.zip_code = '27712'

ORDER BY
distance, zip_code

LIMIT 10, 1
) zipDistance

WHERE
origin.zip_code = '27712'
AND
3956 * 2 * ASIN(SQRT(
POWER(SIN((origin.lat - destination.lat) * 0.0174532925 / 2), 2) +
COS(origin.lat * 0.0174532925) *
COS(destination.lat * 0.0174532925) *
POWER(SIN((origin.lng - destination.lng) * 0.0174532925 / 2), 2)
)) <= zipDistance.distance

ORDER BY
distance, zip_code






























































zip_code distance
27712 0
27704 4.75326962990057
27705 5.34287681627437
27708 5.57383981806715
27503 5.58564401941337
27701 6.41245709075393
27706 6.58029004252293
27709 6.59449266010451
27702 6.61586916445661
27710 6.61586916445661
27711 6.61586916445661
27715 6.61586916445661
27717 6.61586916445661
27722 6.61586916445661

Showing rows 0 - 13 (14 total, Query took 5.6745 sec)



Spherical Law of Cosines



SELECT DISTINCT
destination.zip_code,
3956 * ACOS(
SIN(origin.lat * 0.0174532925) * SIN(destination.lat * 0.0174532925) +
COS(origin.lat * 0.0174532925) * COS(destination.lat * 0.0174532925) *
COS((destination.lng - origin.lng) * 0.0174532925)
) AS distance

FROM
tblZipUSA origin,
tblZipUSA destination,
(
SELECT DISTINCT
destination1.zip_code,
3956 * ACOS(
SIN(origin1.lat * 0.0174532925) * SIN(destination1.lat * 0.0174532925) +
COS(origin1.lat * 0.0174532925) * COS(destination1.lat * 0.0174532925) *
COS((destination1.lng - origin1.lng) * 0.0174532925)
) AS distance

FROM
tblZipUSA origin1,
tblZipUSA destination1

WHERE
origin1.zip_code = '27712'

ORDER BY
distance, zip_code

LIMIT 10, 1
) zipDistance
WHERE
origin.zip_code = '27712'
AND
3956 * ACOS(
SIN(origin.lat * 0.0174532925) * SIN(destination.lat * 0.0174532925) +
COS(origin.lat * 0.0174532925) * COS(destination.lat * 0.0174532925) *
COS((destination.lng - origin.lng) * 0.0174532925)
) <= zipDistance.distance

ORDER BY
distance, zip_code






























































zip_code distance
27712 0
27704 4.75326963012033
27705 5.34287681651191
27708 5.57383981817397
27503 5.58564401945863
27701 6.41245709087189
27706 6.58029004273494
27709 6.59449266019943
27702 6.61586916464669
27710 6.61586916464669
27711 6.61586916464669
27715 6.61586916464669
27717 6.61586916464669
27722 6.61586916464669

Showing rows 0 - 13 (14 total, Query took 5.1353 sec)



So there you have it. In the second part of this series I will show how I use this same kind of logic to find the 10 closest locations from a database of addresses. Until then, enjoy!

1 comment:

謝明博馬陰人放購ˇ屁ㄉ人不董識貨ㄉ人精打細算ㄉ人霖宏百里緒恩駛溟含凾信攔醬油邱科信彰柏宏與簽纏t06單耳耽溺娟謝政道QKPb戲曲學院部大汐布袋戲model mode台北不婚獨子女 臺獨 said...

2009年4月5日 星期日
論證



[組成]
[涉及]
因此,任何論證就包含有論題、論據和論證三個[組成部分]或[要素]




演繹的直接論證
歸納的直接論證
類比的直接論證


間接
反證法
淘汰法






(一)反駁論題
1.直接反駁法
2.間接反駁法
(1)另立相反論題反駁法
相互排斥(矛盾 反對)
(2)歸謬法
(二)反駁論據
(三)反駁論證方式





第四節 論證中[必須遵循]的邏輯思維[規律]
[try&error]
一、同一律以及論辯中違反同一律而發生的邏輯錯誤 
(一)同一律的基本內容
A=A(或「A->A」)
(二)論辯中違反同一律的典型錯誤
1.「偷換概念」
內涵 外延 熱力學 密度 比容 倒數關係
混淆概念
2.轉移論題
偷換論題
中心
天馬行空 東拉西扯,節外生枝 「論題不清」是「轉移論題」一種極端情形。
辯護 看不慣 跟著做
這裡,本來確立的論題是「真理有階級性」,而在引用論據進行論證時,卻把它變成了「認識、利用和接受真理都有階級性」。這一論證,撇開其內容的正確或錯誤不說,僅從邏輯上看,他預先確立的論題和實際證明的論題就不是同一回事,這就犯「轉移論題」的錯誤。
已構成 完全可能
二、矛盾律以及論辯中違反矛盾律而發生的邏輯錯誤 
(一)矛盾律的基本內容
~(A^~A)
(二)論辯中違反矛盾律的典型錯誤
自相矛盾
三、排中律以及論辯中違反排中律而發生的邏輯錯誤 
(一)排中律的基本內容
AV~A
(二)論辯中違反排中律的典型錯誤
模稜兩可
模稜以持兩端
騎牆居中、似是而非,在相互否定的兩種思想面前,既否定這種,又否定那種,貌似有所斷定,實則是在兩種思想游移不定、含糊其辭。這就是說,其思維特徵直接表現出來的卻是「模稜兩不可。」
觀點含糊、模稜兩可
一種情形
基本粒子是又間斷又連續,若斷若續、非斷非續,續中有斷、斷(段?!)中有續(序?@!);可能愈分愈小,也可能愈分愈大。
玄 論證者在這裡就既未肯定「A」這樣的觀點,也未肯定「~A」這樣的觀點;似乎是這樣的觀點,又似乎不是這樣的觀點。表面看來,表達的觀點全面、論證,實則讓人不明究竟。
另一種情形
論證中對某個問題的態度,「是」也否定,「非」也否定,讓人無法確認論證者的觀點和態度究竟是什麼;或者,在對待別人關於某個問題的態度上,你這樣做他要指責,不這樣做他也指責,讓人動輒得咎、無所適從。




四、充足理由律以及論辯中違反充足理由律而發生的邏輯錯誤 
(一)充足理由律的基本內容
B^(B->A)->A
(二)論辯中違反充足充足理由律的典型錯誤
1.「理由虛假」
論據虛假
顛倒黑白、無中生有 捏造事實 而且就是這種錯誤的極端情形
維生素B17 Vit?!VITMIN
2.「預期理由」
想當然 估算的生活費用
3.「循環論證」
冒充
4.「推不出來」
不能推出
一種情形 無關論證
態度 意見
我是中國人,何必學外文
亂列理由
盜竊糧食 抗美援朝被俘 訓練班正式學員
錯誤的極端情形
三、充足理由律以及論辯中違反充足理由律而發生的邏輯錯誤 
(一)充足理由律的基本內容
B^(B->A)->A
(二)論辯中違反充足充足理由律的典型錯誤
1.「理由虛假」
論據虛假
顛倒黑白、無中生有 捏造事實 而且就是這種錯誤的極端情形
維生素B17 Vit?!VITMIN
2.「預期理由」
想當然 估算的生活費用
3.「循環論證」
冒充
4.「推不出來」
不能推出
一種情形 無關論證
態度 意見
我是中國人,何必學外文
亂列理由
盜竊糧食 抗美援朝被俘 訓練班正式學員
錯誤的極端情形


楞嚴經
陰魔
第五節 法庭辯論中常見的非形式謬誤
fallacy謬誤 fallacia 悖謬 詭辯 虛妄 荒誕 橘去掉木部改言部詭
貌似正確、似是而非 以任意的方式,憑藉虛假的根據,或者將一個真的道理否定、動搖了,或者將一個虛假的道理說得非常動聽,好像真的一樣
二、法庭論辯中的[非形式謬誤]
(一)故意利用語詞歧義的謬誤
還 偷換概念
(二)任意解釋、曲解法律條款的謬誤
以事實為根據,以法律為準繩
犯 「任意解釋」「曲解法律條款」
「解釋的錯誤」
很年輕
(三)顛倒黑白、強詞奪理的謬誤
想占便宜
主觀責任和客觀條件是兩個不同的問題,絕不能把「責任」和「條件」混為一談;更不能顛倒、用後者去代替前者。
(四)訴諸情感的謬誤
(五)以人為據、人身攻擊的謬誤



自己定義的能力 仿句 例子判例 排比法作文李思翰陳建宏化學CCH
尹衍樑
出生:1950年
現職:潤泰集團總裁
學歷:臺灣大學商學碩士 政治大學企管博士
家庭:已婚,育有1子1女
興趣:開跑車、飛機、遊艇、騎重型機車等
總裁不用的9種人
1.太過俊美的人
2.強烈宗教信仰的人
3.黑道背景的人
4.大官子女
5.富裕家庭子女
6.藝術性格的人
7.心理殘疾的人
8.工作換太多的人
9.自認學歷高的人


所知障
張貼者: 垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 位於 上午 8:35











2009年4月5日 星期日
我說阿 膠囊 悉怛多缽怛囉 阿門 陳鴻偉獨生子我
法律邏輯學 雍琦◎著 楊智傑(http//tw.myblog.yahoo.com/yangjames2000/)◎校訂
出版者-五南圖書出版股份有限公司
ISBN 978-957-11-5295-0
性質命題
複合命題
規範命題
演繹推理
歸納推理
類比推理
偵查假說
論證
張貼者: 垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 位於 上午 4:44
9 意見:

垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...
此文章已被作者刪除。
2009年4月5日 上午 5:38
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...
此文章已被作者刪除。
2009年4月5日 上午 5:58
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

性質命題

「關係項」 「關係」
「等於」 「大於」 「相鄰」 「夥同」 「同窗」 「批評」
基本類型
(一)全稱命題與特稱命題
(二)肯定命題與否定命題
SAP
SEP
SIP
SOP
反對關係 下反對關係
差等關係 矛盾關係
隱含命題








複合命題

基本形式
一、聯言命題
在自然語言中,表示聯言命題的[連接詞]多種多樣。如「不但......而且......」,「既......又......」,「雖然......但是......」,「......並且......」等
二、選言命題
析取
三、假言命題
表達假言命題的[連接詞]有:「如果......,那麼......」、「只有......才......」、「當且僅當......,才......」,以及「只要......,就......」、「若......,就......」,等等



等值式
若僅從複合命題各肢命題之間的關係來看,除前面所講的「合取」、「析取」、「蘊涵」(含「逆蘊涵」)等關係外,還有一種「等值」關係,符號表示為「<->」
2009年4月5日 上午 6:05
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

規範命題


所謂模擬命題,就是一切[包含]有「可能」、「必然」、「必須」、「禁止」等這類模擬態的命題。
狹義 [包含]有「可能」、「必然」
廣義 [包含]有「必須」、「允許」、「禁止」
(一)必然命題□
表達必然命題的模態詞,除「必然」外,還有「一定」、「必定」、「必將」、「總是」之類的語詞。
(二)或然命題◇


法律規範 「行為模式(假定 處理)」 「法律後果(制裁)」
(一)「允許」型規範命題的模態詞,通常用「允許」、「可以」、「可」、「有權」、「有......的權利」等一類語詞表示。
(二)「必須」型規範命題,亦稱為義務性規範命題或命令性、強制性規範命題,也就是包含有「必須」、「應當」一類模態詞的命題。
「必須」型規範命題,除了包含有「必須」、「應當」這類模態詞命題以外,還有包含「有義務」、「有......的義務」、「有......的責任」這類語詞的命題。
除「允許」型和「必須」型兩種基本的規範命題類型之外,還有「禁止」型規範命題,亦即包含有「禁止」、「嚴禁」、「不得」、「不准」、「不許」之類語詞的命題。由於「禁止」與「必須」可以互推(如前所述,「禁止C」=「必須非C」)
「允許P」Permission
「必須O」Obligation 「禁止F」Forbid 「A行為規定」規範命題的邏輯變項
2009年4月5日 上午 6:33
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

演繹推理

S小項M中項P大項
假言推理基本形式
充分條件
必要條件
v ^ ->


二難推理
就是以兩個充分條件假言命題和一個選言命題(或聯言命題)做前提而構成的演繹推理。
二難 釋放 不釋放 權衡


R-法律規定
F-確認的案件事實
___________________
D-裁判結論


T->R(具備T構成要件者適用R法律效果)
S=T(待決案件事實符合T構成要件)
___________________
S->R(該待決案件事實適用R法律效果)
2009年4月5日 上午 7:01
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

歸納推理

一、完全歸納推理
(一)窮舉歸納推理
(S1、S2、S3...Sn是S類的全部個體對象)
__________________________________
所以,所有S都具有P屬性
(二)分類歸納推理
(S1、S2、S3...Sn是S類的全部對象的所有可能情況)
__________________________________
所以,S類(或S對象整體)都具有P屬性。











不完全歸納推理
ERRor
推理過程中「輕率概括」,必然導致結論「以偏概全」
所謂「懶散概括」,亦稱「懶散歸納」,其錯誤情形與「輕率概括」又恰好相反。「信念」


因果
場合 相關因素 被研究現象
_______________________
一、契合法
二、差異法
相關因素 被研究對象 有無大小高低正反
[三、契合差異並用法]
[四、共變法]
[五、剩餘法]
2009年4月5日 上午 7:16
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

類比推理

類比法律推理
(一)類推適用
(二)判例適用



比對推理 識同別異
2009年4月5日 上午 7:21
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

假說與[偵查假說]

望聞問切



[程序] 假說的[建立][過程]是一個比較複雜的思維過程,大致可分為[假說的提出、假說的推演、假說的驗證三個階段]
不過,由於偵查假說是一種[作業]假說,假說的推演和驗證常常結合在一起進行。



(H ->e)^H->e


H->e
e
_______
∴H(?)


H->e
~e
_________
∴ ~H
2009年4月5日 上午 7:29
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...
此文章已被作者刪除。
2009年4月5日 上午 7:29 悉怛多缽怛囉阿門證據時效