首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未显示要检索的队列算法

未显示要检索的队列算法
EN

Stack Overflow用户
提问于 2011-08-21 20:24:27
回答 4查看 87关注 0票数 0

我有一个数据库,其中包含法语单词,并希望显示他们没有重复。我不想检索所有它们并放入一个数组中,因为我认为如果我有1.000.000.xxx个单词,这将是困难的,也不是最优的。我想选择一个单词,当我想选择另一个单词时,以前选择的单词将不会出现在结果中。

有没有适合这方面的算法?

PS:如果代码适用于MsSQL,C#会更好。

编辑:我想要显示新的和随机的词根据他们的频率。例如:表中有4个单词,用户希望看到更频繁的单词,2和4。但是第一个单词是已知的,但不想看到它。我想更频繁地显示第二个和第四个单词,但在每个显示的单词中都显示更少的3rd.But我不想重复显示同一个单词

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-21 22:06:49

使用这样的表Words,每行有一个单词

代码语言:javascript
复制
create table Words 
(
  Word varchar(25) primary key,
  Freq int not null
)

您可以使用order by newid()获得一个随机单词。

代码语言:javascript
复制
select top 1 Word
from Words  
order by newid()

频率列是一个int,其中每个单词的值至少为1,频率越高的单词的值越高。要使用order by newid(),我们必须创建一个表,其中包含具有较高频率值的单词的重复项。这可以使用tally table来完成。

为了记录你已经选择的单词,你可以使用另一个表格。

代码语言:javascript
复制
create table PickedWords
(
  Word varchar(25) primary key
)

这是用于将所选单词添加到表PickedWords并使用output子句将该单词返回给客户端的语句。

代码语言:javascript
复制
insert into PickedWords
output inserted.Word
select top 1 W.Word
from Words as W
  inner join tsqlc_Tally as T
    on W.Freq > T.N
where W.Word not in (select Word 
                     from PickedWords)
order by newid()

在一台真正糟糕的笔记本电脑上只需要9秒,处理器为1.2 GHz,字数为1.000.000。

如果您有一个表,其中的单词已经重复,而不是频率列,这样我们就可以跳过计数表,选择一个单词需要2秒。

票数 0
EN

Stack Overflow用户

发布于 2011-08-21 20:34:04

您希望选择一个单词,如果此单词重复,则丢弃pick。对吗?

试试这个:

代码语言:javascript
复制
pick a word
search in a Map
if the word is in the Map
  repited word
else
  new word, insert in Map
票数 1
EN

Stack Overflow用户

发布于 2011-08-21 20:37:12

在Oracle中,您可以使用ROWNUM执行此操作:

代码语言:javascript
复制
SELECT WORD FROM (SELECT DISTINCT WORD FROM WORDS)
WHERE ROWNUM >= :START_INDEX AND ROWNUM <= :END_INDEX

在MySQL中,您可以使用限制功能:

代码语言:javascript
复制
SELECT DISTINCT WORD FROM WORDS
LIMIT :NUMBER_OF_WORDS OFFSET :START_INDEX
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7138233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档