导航:首页 > 源码编译 > table算法

table算法

发布时间:2022-07-21 17:55:08

Ⅰ LUA 关于取出两个table中不同元素的算法

【我理解下你的意思
你是要把 T_letter_tbl 中所有元素的 letter标签和 和 hope_letter_tbl 中的元素比较,如果 发现重复 的 则删除 T_letter_tbl 中的 重复标签吗?
【一般做法】用 lua 做这种很容易,但是要注意方法,不是比较,那样遍历比较 效率太低。先把 需要比较的 table 的元素作为 索引 建立一个 hash
直接取元素 进行 标签判断,

下面是一个演示:table.print 自定义的输出,可以删去,自己选择输出方式


functiontable.print(tbl,name)
name=nameor"table"
localprompt=''
locali=1
localprinted={}
localfunctiontostring2(var)
if(type(var)=="string")then
return'"'..var..'"'
end

returntostring(var)
end
localfunctionitor(t,i)
printed[tostring(t)]=true;
forkey,eleinpairs(t)do
ifnot(type(ele)=="table")then
print(string.format('%s[%s]=%s;',string.rep(prompt,i),tostring2(key),tostring2(ele)))
elseifprinted[tostring(ele)]then
print(string.format('%s[%s]=%s;',string.rep(prompt,i),tostring2(key),tostring2(ele)))
else
print(string.format('%s[%s]={',string.rep(prompt,i),tostring2(key)))
i=i+1
itor(ele,i)
i=i-1
print(string.format('%s};',string.rep(prompt,i)))
end
end
end

print(string.format("%s={",name))
itor(tbl,i)
print("};")
end
-----------------------------------------------------
tbl_letter_HOPE={
[1]="bbbbbb";
[2]="ffffff";
[3]="cccccc";
[4]="xxxxxx";
[5]="eeeeee";
};
tbl_letter_T={
[1]={["letter"]="Y"};
[2]={["letter"]="M"};
[3]={["letter"]="P"};
[4]={["letter"]="K"};
[5]={["letter"]="bbbbbb"};
[6]={["letter"]="R"};
[7]={["letter"]="Q"};
[8]={["letter"]="xxxxxx"};
[9]={["letter"]="L"};
[10]={["letter"]="D"};
[11]={["letter"]="B"};
[12]={["letter"]="ffffff"};
[13]={["letter"]="Z"};
[14]={["letter"]="T"};
[15]={["letter"]="["};
[16]={["letter"]="cccccc"};
[17]={["letter"]="E"};
[18]={["letter"]="C"};
[19]={["letter"]="W"};
[20]={["letter"]="I"};
[21]={["letter"]="F"};
[22]={["letter"]="eeeeee"};
[23]={["letter"]="O"};
[24]={["letter"]="X"};
[25]={["letter"]="U"};
[26]={["letter"]="S"};
};
---根据tbl_letter_HOPE中的元素去除tbl_letter_T中的元素
--
localfunctionmain()
localtbl_erase={}
forkey,eleinpairs(tbl_letter_HOPE)do
--不考虑元素权重则改为=true
tbl_erase[tostring(ele)]=(tbl_erase[tostring(ele)]or0)+1
end


forkey,eleinpairs(tbl_letter_T)do
iftbl_erase[ele.letter]then
--移除整行[12]={["letter"]="ffffff"};
tbl_letter_T[key]=nil

--还是一个标签letter
--tbl_letter_T[key].letter=nil
end
end
table.print(tbl_letter_T)
end
startTime=os.time()
main()
print(string.format(">>Thisfunctioncost:%sms",tostring(os.time()-startTime)))

【附】

如果只想 获得去除给定元素后的 table

可以先 复制原 tbl_letter_T

注意:

不要用 浅复制 你之前 那个代码 可能 就是 希望做一个 tbl_letter_T 的副本

但是 使用 浅复制相当于仅复制了指向table的句柄。

php">tbl_Interim=tbl_letter_T--2个变量指向同一个table表

要用

python">forkey,eleinpairs(tbl_letter_T)do
tbl_Interim[key]=ele
end

Ⅱ 哈希表map和table哪个性能高

list支持快速的插入和删除,但是查找费时;
vector支持快速的查找,但是插入费时。
map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的。
如果我自己写,我也会用二叉检索树,它在大部分情况下可以保证对数复杂度,最坏情况是常数复杂度,而std::map在任何情况下都可以保证对数复杂度,原因是它保证存诸结构是完全二叉检索树,但这会在存诸上牺牲一些时间。
STL 中的 map 内部是平衡二叉树,所以平衡二叉树的性质都具备。查找数据的时间也是对数时间。 vector,在分配内存上一般要比 new 高效的多。
为什么说 hash_map 是对数级的?在不碰撞的情况下,hash_map是所有数据结构中查找最快的,它是常数级的。
如果对问题设计了足够好的hash算法,保证碰撞率很低,hash_map的查找效率无可置疑。
另外,STL的map,它的查找是对数级的,是除hash_map外最高的了,你可以说“也许还有改进余地”,但对于99.9999%的程序员,设计一个比STL map好的map,我执悲观态度。
STL的map有平衡策略(比如红黑树什么的),所以不会退化,不需要考虑数据本身的分布问题。只不过,如果数据本身是排好序的,用vector或heap会明显的快些,因为它们的访问比较简单。

我想没必要怀疑stl::map的查找效率,影响效率最主要的因素是什么?算法,在查找问题上,有什么算法比RB_tree更好吗?至少现在还没有。不否 认你可以通过自己写代码,设计一个符合你需要的BR—TREE,比stl::map简捷那么一点,但最多也就每次迭代中少一行指令而已,处理十万个数据多 执行十万行指令,这对你重要吗?如果你不是在设计OS像Linux,没人会关注这十万行指令花的时间。
rb-tree的时间花在了插入和删除上,如果你不是对插入和删除效率要求很高,你没有理由不选择基于rb-tree的stl::map。

大多数程序员写不出比std::map更好的map,这是当然的。然而并不是std::map的所有特性都出现在我们的程序中,自己编写的可以更适合自己的程序,的确会比std::map更快一些。

关于hash_map,它与map的实现机制是不一样的,map内部一般用树来实现,其查找操作是O(logN)的,这个没有争议,我就不多说了。
hash_map的查找,内部是通过一个从key到value的运算函数来实现的,这个函数“只接受key作为参数”,也就是说,hash_map的查找 算法与数据量无关,所以认为它是O(1)级的。来这里的应该都是达人,可以参看《数据结构》。当然,事实总不这样完美,再引一段前面我自已说的话,进一步 说明,以免误会:
-----------------------------------------
在不碰撞的情况下,hash_map是所有数据结构中查找最快的,它是常数级的。
------------------------------------------
注意我的前提:“在不碰撞的情况下”,其实换句话说,就是要有足够好的hash函数,它要能使key到value的映射足够均匀,否则,在最坏的情况下,它的计算量就退化到O(N)级,变成和链表一样。
如果说 hash_map 是所有容器中最慢的,也只能说:“最拙劣的hash函数”会使hash_map成为查找最慢的容器。但这样说意义不大,因为,最凑巧的排列能使冒泡排序成为最快的排序算法。
BS: "对于大型容器而言,hash_map能够提供比map快5至10倍的元素查找速度是很常见的,尤其是在查找速度特别重要的地方.另一方面,如果hash_map选择了病态的散列函数,他也可能比map慢得多. "
ANSIC++在1998年之后就没再有重大改变,并且决定不再向C++标准库中做任何重大的变更,正是这个原因,hash table(包括hash_map)并没有被列入标准之中,虽然它理应在C++标准之中占有一席之地。
虽然,现在的大多数编译平台支持hash table,但从可移植性方面考虑,还是不用hash table的好。

hehe俺也来凑凑热闹。
1.有的时候vector可以替代map
比如key是整数,就可以以key的跨度作为长度来定义vector。
数据规模很大的时候,差异是惊人的。当然,空间浪费往往也惊人。
2.hash是很难的东西
没有高效低碰撞的算法,hash_xxx没有意义。
而对不同的类型,数据集,不可能有优良的神仙算法。必须因场合而宜。
俺有的解决方法是GP,可不是饭型,是遗传编程,收效不错。

你的百万级的数据放到vector不大合适。因为vector需要连续的内存空间,显然在初始化这个容器的时候会花费很大的容量。
使用map,你想好了要为其建立一个主键吗?如果没有这样的需求,为什么不考虑deque或者list?
map默认使用的是deque作为容器。其实map不是容器,拿它与容器比较意义不大。因为你可以配置它的底层容器类型。

如果内存不是考虑的问题。用vector比map好。map每插入一个数据,都要排序一次。所以速度反不及先安插所有元素,再进行排序。
用 binary_search对已序区间搜索,如果是随机存取iterator,则是对数复杂度。可见,在不考虑内存问题的情况下,vector比map 好。

如果你需要在数据中间进行插入,list 是最好的选择,vector 的插入效率会让你痛苦得想死。

涉及到查找的话用map比较好,因为map的内部数据结构用rb-tree实现,而用vector你只能用线性查找,效率很低。
stl还提供了 hash容器,理论上查找是飞快~~~。做有序插入的话vector是噩梦,map则保证肯定是按key排序的,list要自己做些事情。

HASH类型的查找肯定快,是映射关系嘛,但是插入和删除却慢,要做移动操作, LIST类型的使链式关系,插入非常快,但是查找却费时,需要遍历~~ , 还是用LIST类型的吧,虽然查找慢点,
先快速排序,然后二分查找,效率也不低

Ⅲ 请问Lua语言中table.sort底层使用的是哪种排序算法

根据 lua 的 wiki,table.sort 采用的是基于 quicksort 的排序算法。

Ⅳ C#,关于DataTable的一个递归算法

给你一个思路吧,先通过给出的这个ID,获得这条记录,然后判断这条记录的pid是否为-1等之类的值,如果是,表明没有父类,如果有,再通过这个pid调用这个函数一次,以此类推,得出递归算法!

Ⅳ 求lua中根据table的键值取出相应数据的算法。

local testTabel = {
a = "testSuccessed",
b = 1,
c = 2
}

function GetNodeWithKey(t, k)
return t[k]
end
local data = GetNodeWithKey(testTabel,"a")
print(data)

Ⅵ hashtable和hashmap 算法的区别

HashMap不是线程安全的
hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。

2 HashTable是线程安全的一个Collection。

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差

阅读全文

与table算法相关的资料

热点内容
linux内核根文件系统 浏览:233
3d的命令面板不见了 浏览:518
武汉理工大学服务器ip地址 浏览:139
亚马逊云服务器登录 浏览:515
安卓手机如何进行文件处理 浏览:62
mysql执行系统命令 浏览:921
php支持curlhttps 浏览:134
新预算法责任 浏览:435
服务器如何处理5万人同时在线 浏览:242
哈夫曼编码数据压缩 浏览:415
锁定服务器是什么意思 浏览:376
场景检测算法 浏览:608
解压手机软件触屏 浏览:339
方舟pv怎么转服务器 浏览:100
数据挖掘中误差值算法函数 浏览:119
php开发套件 浏览:191
服务器的spi板是什么 浏览:897
解压缩全能王中文密码是什么 浏览:81
javaftp服务器上传文件 浏览:104
算法设计中文版pdf 浏览:82