方案

2013-04-03 48 views
0

我目前堅持以下問題遞歸搜索:方案

我有n個元素的數據庫,我想做一個遞歸搜索,這樣我會得到所有可能的匹配。

因此,可以說,我爲第一種模式獲得k個匹配。對於每發生k場比賽,我都會用下一個模式重新搜索數據庫,並獲取新的關聯列表....等等。這是我的問題,我不能做一個能夠給我所有結果的函數。

我真的不能讓自己想出一個「計劃」來攻擊這個問題。我總是想知道如何保存我的治療列表,並同時在結束時將其刪除。

我的想法總結:如果我有一個數據庫= db,並需要匹配n個模式。我從模式0開始,得到k assoc-list,並且我想向前移動以匹配模式1,考慮到我有前面的k個關聯列表。我完成模式1並獲得M assoc-list,對於每個m assoc-list我前進......最後,我要麼得到一個大小爲n(模式數)的關聯列表或者得到錯誤。

我真的只想要一些想法,所以我可以通過這個「磚牆」。請判斷,刺殺,殺死我的想法,任何事情。謝謝。

回答

0

我不確定是否希望根據後續搜索縮小或擴大您的搜索範圍。下面是僞代碼拓寬:

recursive_search (list_of_patterns) 
    if is_empty(list_of_patterns) 
    return empty_list 
    pattern = pop_first(list_of_patterns) 
    return query(pattern) + recursive_search(list_of_patterns) 

編輯,讓您的圖案與查詢作爲ALIST ......我的計劃-foo是弱的,但這裏有雲:

(define query_alist (lambda x)(x . query-exec(x))) 

(define r_query (lambda pattern__list) 
    (cond 
    ((null pattern_list)()) 
    (else ((query_alist (first pattern_list) (r_query (rest pattern_list))) 
) 
) 
+0

這是我什麼此刻正在做。我遇到的問題是,我希望隨時隨地保留關聯列表並擴展它們,最後,我得到一個關聯列表的大列表,其中包含所有尊重初始模式的元素。 – Georgianaevil 2013-04-03 23:11:52

+0

我還沒有嘗試過運行方案代碼,所以它可能是越野車,但是這對你所尋找的是什麼? – 2013-04-04 00:05:17