সংলগ্ন তালিকার সাথে সম্পর্কিত কোনও গ্রাফের ডেরাইভেটিভ কি?


14

কনর ম্যাকব্রাইডের কিছু কাজ, ডিফ , ডিসিসেক্ট , তাদের "এক-গর্তের প্রকারের ধরণের" সাথে ডেটা ধরণের ডেরাইভেটিভ সম্পর্কিত। এটি হ'ল যদি আপনি যে ধরণের ডেটাভেটিভ গ্রহণ করেন তবে কোনও ডেটা টাইপ রেখে যান যা আপনাকে দেখায় যে কোনও নির্দিষ্ট বিন্দুতে ডাটা টাইপটি ভিতর থেকে কীভাবে দেখায়।

সুতরাং, উদাহরণস্বরূপ, যদি আপনার একটি তালিকা থাকে (হাসকেলে)

data List a = [] | a : List a

এই অনুরূপ

data List a = 1 + a * List a

এবং একটি সামান্য গাণিতিক যাদু মাধ্যমে, ডেরাইভেটিভ হয়

data ListDeriv a = List a * List a

যার অর্থ এটি ব্যাখ্যা করা হয় যে তালিকার যে কোনও বিন্দুতে বামদিকে একটি তালিকা এবং ডানদিকে একটি তালিকা থাকবে। ডেরাইভেটিভ ডেটা স্ট্রাকচার ব্যবহার করে আমরা মূল তালিকাটি জিপ করতে পারি।

এখন, আমি গ্রাফের সাথে অনুরূপ কিছু করতে আগ্রহী। গ্রাফগুলির একটি সাধারণ প্রতিনিধিত্ব হ'ল শীর্ষ এবং প্রান্তগুলির একটি সেট, যা কোনও তথ্য টাইপের সাথে নির্লজ্জভাবে প্রয়োগ করা যেতে পারে যেমন:

data Gr a b i = Gr [(i,a)] [(i,i,b)]

যদি আমি এটি সঠিকভাবে বুঝতে পারি, গ্রাফ সূচীর প্রতি এই ডেটা টাইপের একটি ডেরাইভেটিভ এর iমতো হওয়া উচিত।

data GrDeriv a b i = d/di (Gr a b i)
     = d\di ( [a*i] * [b*i^2] )
     = (d\di [a*i]) * [b*i^2] ) + [a*i]*(d/di [b*i^2])
     = (a* [a*i] * [a*i]) * [b*i^2] ) 
       + [a*i] * (2*b*i) *[b*i^2]*[b*i^2])
     = InNodes { nodesLeft :: [(a,i)]
               , nodeLbl :: a
               , nodesRight :: [(a,i)]
               , edges :: [(b,i,i)] }
     | InEdges { nodes :: [(a,i)]
               , adjNode :: Either (b,i) (b,i)
               , edgesLeft :: [(b,i,i)]
               , edgesRight :: [(b,i,i)] }

আমি ডেরাইভেটিভগুলির জন্য পণ্য বিধি এবং চেইন বিধিগুলি ব্যবহারের মাধ্যমে পেয়েছি এবং সম্ভবত কিছু ত্রুটি থাকলেও এটি সাধারণ স্কিমটি অনুসরণ করে বলে মনে হচ্ছে। এই কাঠামোতে আপনি হয় নোড (আইএনএনডস কনস্ট্রাক্টর) বা প্রান্তগুলি (প্রান্তগুলিতে) ফোকাস করবেন এবং স্থানটি দেবেন তবে আপনি প্রাসঙ্গিক ডেটা দেখতে পাবেন।

তবে এটি আমি প্রত্যাশা করছিলাম না। আমি মার্টিন এরভিজ ফাংশনাল গ্রাফ লাইব্রেরির ইন্টারফেসের সাথে আরও ঘনিষ্ঠভাবে সম্পর্কিত একটি নির্মাণের জন্য আশা করছিলাম। বিশেষত, আমি একটি নোডে নোডের লেবেল এবং দুটি সংলগ্ন তালিকার প্রতিনিধিত্বকারী একটি প্রসঙ্গ দেখতে চাই, একটি বহির্মুখী জন্য, একটি আসার জন্য।

Node a b = ([(i,b)],a,[(i,b)])

আমি আশাবাদটি দেখতে পাচ্ছি, যেহেতু সংলগ্নতার উপস্থাপনার সাথে কয়েকটি aগর্তের ডেরিভেটিভ, একাকী লেবেল, প্রতিটি গর্তের স্থানে, প্রতিটি প্রান্তের সংলগ্ন প্রতিনিধিত্ব / বিচ্ছিন্নতার সাথে মিল রয়েছে terms

যেহেতু একটি ডেরাইভেটিভ মূল হিসাবে একই ক্রিয়াকলাপ নয়, তবে ডেরিভেটিভের একটি সংহতকরণ (কিন্ডোফ) রয়েছে, তাই কোনও কিছু সংহতকরণ অ্যানালগ রয়েছে যা ডেরিভেটিভকে নোড প্রসঙ্গের সংগ্রহে রূপান্তরিত করতে সাহায্য করবে? আসল কাঠামোটি পুনরুদ্ধার করার জন্য সরাসরি সংহতকরণ নয়, মনে রাখবেন, তবে মূলটির সমতুল্য একটি কাঠামো তবে আরও অ্যালগরিদম বান্ধব উপস্থাপনায়।

যদি সেখানে থাকে তবে আমি আশা করি যে সম্পর্কের ধরণের কাঠামোগুলি কিছু সহজ "শীর্ষে এবং প্রান্তগুলির সেট" ভাষা দ্বারা নির্দিষ্ট করা যেতে পারে এবং আমি সেই কাঠামোর সাথে কাজ করার জন্য একটি দক্ষ গ্রন্থাগার পেতে পারি। "গ্রাফ তত্ত্বের বাইরে" কাঠামোগত অধ্যয়নের জন্য এই জাতীয় প্রয়োগ ব্যবহার করা যেতে পারে: হাইপার গ্রাফ, সরলিক জটিলগুলি ...

So. এই ধারণাটি কি সম্ভব বলে মনে হচ্ছে? কাজে লাগল? এই ধরণের জিনিস নিয়ে আমি কি আরও পড়তে পারি?

অভিযোজ্য বস্তু

কার্টিস এফ দ্বারা মন্তব্য করা হিসাবে , নোড এবং প্রান্তগুলির একটি সেট ঠিক কোনও গ্রাফ নয়। যাইহোক, সমস্ত গ্রাফগুলি এ জাতীয় দ্বারা প্রতিনিধিত্ব করা যেতে পারে এবং আমি এটি যথেষ্ট সাধারণ উপস্থাপনা বলে মনে করি। আমি দেখেছি (খুব মোটা স্পেসিফিকেশন) এমন গবেষণায় ব্যবহৃত হয়েছে যা গ্রাফ তত্ত্বটি বিভিন্নভাবে ওয়্যারলেস নেটওয়ার্কগুলির অপ্টিমাইজেশনে প্রয়োগ করে। এখানে একটি খোলার অ্যাক্সেসের উদাহরণ, ড্র্যান্ড *। এটি প্রশ্ন উত্থাপন করে, উপস্থাপনাটির মধ্যে কী যোগসূত্র এবং কীভাবে কোনও সফ্টওয়্যার গবেষণার ভিত্তিতে প্রয়োগ করা যেতে পারে।G=(V,E)

এটি বলেছিল, আমি থেকে অন্য কোনও কিছুর ইনপুট স্পেস পরিবর্তন করার সম্পূর্ণ বিরোধী নই । উদাহরণস্বরূপ, একটি সূচক প্রকার দেওয়া হয়েছে , নোড লেবেল, , এবং প্রান্ত লেবেল, । তারপরে গ্রাফটি সূচকগুলি থেকে একটি লেবেল এবং প্রান্ত তালিকার একটি ফাংশন।G=(V,E)IVE

G=I(VIE)

এটি, আমি নিশ্চিত যে প্রকাশ করা যেতে পারে (বিভাগের তত্ত্ব?)

(1)G=(VEI)I

অথবা

G=VIEII

যা শীর্ষে এবং প্রান্তের সেট হিসাবে দেখা যায় - যথেষ্ট পরিমাণ সতর্কীকরণ দেওয়া হয়েছে। তবে, এর উদ্ভূত অর্থবোধক কিনা তা পরিষ্কার নয় :(1)

G=ln(VEI)(VEI)I(ln(E)VEI)

আমার মনে হয় এটি কিছু প্রতিশ্রুতি দেখায়, তবে আরও এগিয়ে যাওয়ার মতো পরিশীলতার আমার অভাব রয়েছে। আমি জানি যে সংযোগটি আরও অন্বেষণ করতে এখানে অবশ্যই কিছু কাজ করা উচিত।

* যদি লিঙ্কটি কখনও ভেঙে যায়, উদ্ধৃতি দেওয়া: রি, ইনজং, এবং অন্যান্য। "ড্র্যান্ড: ওয়্যারলেস অ্যাডহক নেটওয়ার্কগুলির জন্য বিতরণ করা এলোমেলো করে টিডিএমএ শিডিউলিং।" মোবাইল কম্পিউটারে আইইইই লেনদেন 8.10 (2009): 1384-1396।


আপনি যে লিঙ্কটি গবেষণার জন্য সরবরাহ করেছেন তা মারা গেছে। ডিওআই বা এটি প্রকাশিত জার্নালের মতো আপনি কি আরও স্থায়ী লিঙ্ক দিতে পারেন?
কার্টিস এফ

উত্তর:


5

আপনার Grধরণটি গ্রাফের সাথে সত্যই মিলছে না, কারণ এর মধ্যে অনেকগুলি উদাহরণ রয়েছে যা স্পষ্টভাবে গ্রাফ নয়, কারণ প্রান্ত সূচকগুলি প্রকৃত ভার্টেক্স সূচকগুলির প্রয়োজন হবে না।

উদাহরণ স্বরূপ,

V={A,B}E={(C,D,e)}

কোনও গ্রাফ নয়, তবে আপনার ধরণের ক্ষেত্রে এটি অনুমোদিত

Gr [(1, A), (2, B)] [(3, 4, e)]

পরিবর্তে, আপনার Grআক্ষরিক সাথে লেবেলযুক্ত সূচকের তালিকার এবং একটি পৃথক, সম্পর্কহীন, লেবেলযুক্ত সূচকগুলির তালিকার সাথে মিল রয়েছে s এই কারণেই আপনি এরকম একটি "আক্ষরিক" ডেরাইভেটিভ পান Grযা গ্রাফের "ছিদ্র" এর সাথে মিলে না।

শীর্ষস্থান / প্রান্তের ক্রম (তাত্পর্যপূর্ণ nodesLeft/Rightএবং edgesLeft/Rightস্বতন্ত্র ক্ষেত্রে দৃশ্যমান ) সম্পর্কে যত্ন নেওয়ার ক্ষেত্রেও দুর্ভাগ্যজনক সমস্যা রয়েছে তবে এটি Setতালিকার পরিবর্তে একটি ব্যবহার করে স্থির করা যেতে পারে ।


এখানে হাসকেলে প্রকাশিত একটি প্রকার যা আমি মনে করি (খালি নয়) গ্রাফগুলির সাথে আরও ঘনিষ্ঠভাবে মিল রয়েছে:

data Graph v e = Lone v | Joined v (Graph (v, ([e], [e])) e)

সরলতার জন্য, আমি পরিবর্তে সম্পূর্ণ, সহজ, পুনর্নির্দেশিত গ্রাফগুলি বিবেচনা করব:

data Graph v e = Lone v | Joined v (Graph (v, e) e)

(সম্পূর্ণ নেস শিথিল করতে, e = Boolপ্রান্ত উপস্থিতি চিহ্নিত করুন)

দ্রষ্টব্য যে Graphপুনরাবৃত্ত হয় (এবং প্রকৃতপক্ষে, প্যারামেট্রিকভাবে পুনরাবৃত্তি)। এটিই আমাদের প্রকারটি কেবল গ্রাফগুলিতে সীমাবদ্ধ রাখার অনুমতি দেয় কেবল ভার্টেক্স তালিকার সাথে সংলগ্ন তালিকা নয়।

আরও বীজগণিতভাবে লিখেছেন,

G(v,e)=v+vG(ve,e)

যেহেতু সাথে আলাদা হয় না , তাই আমি দ্বিতীয় যুক্তিটি সরিয়ে ফেলব :evG

G(v)=v+vG(ve)

বারবার প্রসারিত করার মাধ্যমে আমরা স্থির পয়েন্টটি পাই

G(v)=v1e(12)+v2e(22)+v3e(32)+v4e(42)+

এটি (অর্থাত্) গ্রাফটি যেহেতু হয় তাই বোঝায়

  • একটি শীর্ষ এবং কোন প্রান্ত নেই
  • দুটি শীর্ষ এবং একটি প্রান্ত
  • তিনটি শীর্ষ এবং তিনটি প্রান্ত
  • চারটি শীর্ষ এবং চারটি 2 = 6 টি প্রান্ত চয়ন করে
  • ....

আকার ধরণ কল সুত্রাবলী নকশা । তারপরেkGk(v)=vke(k2)G(v)=G1(v)+G2(v)+

যা ডেরাইভেটিভ আছে

ddvG(v)=i=1Gi(v)

ডেরিভেটিভ

Gk(v)=ddv[vkek(k1)2]=kvk1ek(k1)2

দ্রষ্টব্য যে , যাতেGk1(v)=vk1e(k1)(k2)2Gk(v)=Gk1(v)kek1

অর্থাৎ একটি ডেরিভেটিভ -node গ্রাফ হয় একটি নোড লেখচিত্র, সঙ্গে মিলিত সরানো নোড থেকে প্রান্ত অবশিষ্ট নোড, এবং সূচক যে নোড তালিকায় দখল ছেদচিহ্ন।kk1k1k1k

data SimpleGraph v e = Lone v | Joined v (SimpleGraph (v, e) e)

data SimpleGraphHole v e = Empty
                         | InsertLater v (SimpleGraphHole (v, e) e)
                         | InsertHere (SimpleGraph (v, e) e)

এই গ্রাফের মধ্যে ফিক্সিং অর্ডার

গ্রাফ ডেটা স্ট্রাকচারের এই সংস্করণটি মূলত একটি লিঙ্কযুক্ত-তালিকা এবং তাই এটি শীর্ষে ক্রমকে এনকোড করে। এটি সেট ব্যবহার করে আপনার সংলগ্ন-তালিকা সংস্করণে স্থির করা যেতে পারে, এটি এখানে এতটা সরাসরি নয়।

আমার মনে হয় আপনি রুট ভূমিকা "মাথা" এ করে বাজানো সঙ্গে, স্থিতিমাপ পুনরাবৃত্তির একই ধরনের কাজ করতে একটি গাছ ডেটা-কাঠামো পরিবর্তন করতে পারেন SimpleGraph। ফলস্বরূপ ট্রি-সেটগুলির ইন্টারফেসের মাধ্যমে ক্রম / অন্তর্নিহিত কাঠামোটি অদৃশ্য হয়ে যায় (বা আপনি যদি দ্রুত আপডেটে আগ্রহী না হন তবে ক্যানোনিকাল)।

আপনার প্রস্তাবিত ডেরিভেটিভ

আপনি একটি ডেরাইভেটিভ প্রকার প্রস্তাব করেছেন; আমি এটিকে লেবেল এবং সূচকগুলিকে মিশ্রিত করতে পরিবর্তন করব:([(v,e)], [(v,e)])

এটি as হিসাবে সংহত করা যেতে পারে যা , বা ঠিক । পুরো গ্রাফটি পুনর্গঠন করার জন্য এটিতে পর্যাপ্ত তথ্য নেই , কারণ "প্রান্ত" তথ্য কেবল একটি একক প্রান্তকে চিহ্নিত করে।1(1ve)2C+v1ve(v, [(v, e)])

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.